【发布时间】:2020-07-07 01:40:52
【问题描述】:
我是 Excel 中的 VBA 新手,在理解在模块和用户表单中为 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 或控件 (Loop through Comboboxes 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
能否请您指导我使用循环的解决方案或推荐最佳做法,以生成带有重置选项的模板下拉列表?
【问题讨论】:
-
也许您可以遍历所有 OLEObjects 的集合而忽略名称?
-
第一次通过循环时,您正在寻找 ComboBox0。这有效吗?
-
@BrianMStafford 你是对的,应该从 1 而不是 0 开始。然而,更正并没有改变错误信息。
标签: excel vba loops object combobox