我是Excel中VBA的新手,在理解在模块和用户窗体中为ActiveX对象使用循环的原理时遇到了一些困难。我有几个下拉列表,它们是使用名为"摘要"的电子表格上的ActiveX组合框创建的。处理完这些列表后,我想将所有列表重置到初始位置,并使用同一页面上的按钮删除其他一些单元格中的内容。因此,我可以将此文件用作通用模板。以下是一个似乎有效的简短示例:
Private Sub Clear_Click()
Worksheets("Summary").ComboBox1.ListIndex = 0
Worksheets("Summary").ComboBox2.ListIndex = 0
Worksheets("Summary").ComboBox3.ListIndex = 0
Worksheets("Summary").Range("B4,B6:B8,B10:B12,B18:B21").Select
Selection.ClearContents
End Sub
但是,因为所有的框都遵循该模式,而且我有很多框,所以我试图使用OLEObjects或Controls实现以下循环(通过组合框VBA进行循环(。在这两种情况下,我分别遇到错误1004或438(对象不支持属性或方法(。
Private Sub CommandButton1_Click()
Dim cmb As ComboBox, i As Integer
For i = 1 To 3
Sheets("Summary").Controls ("ComboBox" & i).ListIndex = 0
‘ Sheets("Summary").OLEObjects("ComboBox" & i).ListIndex = 0
Next i
End Sub
你能告诉我一个使用循环的解决方案吗?或者推荐为模板生成下拉列表的最佳实践,并提供重置选项?
认为您只需要引用Object
属性
Private Sub CommandButton1_Click()
Dim cmb As ComboBox, i As Integer, c As OLEObject
For i = 1 To 3
Sheets("Summary").OLEObjects("ComboBox" & i).Object.ListIndex = 0
Next i
'alternative
'For Each c In Sheets("Summary").OLEObjects
' c.Object.ListIndex = 0
'Next c
End Sub