在 Excel VBA 中循环 ActiveX 对象
Loop over ActiveX Objects in Excel VBA
我是VBA Excel 的新手,在理解模块和用户窗体中ActiveX 对象的循环使用原理方面有一些困难。
我有几个下拉列表,它们是在名为 Summary 的电子表格上使用 ActiveX ComboBox 创建的。使用这些列表后,我想将它们全部重置到初始位置,并使用同一页面上的按钮从其他一些单元格中删除内容。因此,我可以将此文件用作通用模板。
这是一个似乎有效的简短示例:
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 或控件 () 实现以下循环。在这两种情况下,我分别遇到错误 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
property
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
我是VBA Excel 的新手,在理解模块和用户窗体中ActiveX 对象的循环使用原理方面有一些困难。 我有几个下拉列表,它们是在名为 Summary 的电子表格上使用 ActiveX ComboBox 创建的。使用这些列表后,我想将它们全部重置到初始位置,并使用同一页面上的按钮从其他一些单元格中删除内容。因此,我可以将此文件用作通用模板。 这是一个似乎有效的简短示例:
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 或控件 (
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
property
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