【问题标题】:Loop over ActiveX Objects in Excel VBA在 Excel VBA 中循环 ActiveX 对象
【发布时间】: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


【解决方案1】:

认为你只需要引用Objectproperty

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

【讨论】:

  • 非常感谢@SJR!实际上,添加 Object 属性可以解决问题。不过,您知道为什么 Controls 解决方案可能会出现错误吗?我是否不允许在 Excel 中使用 Access 对象?
  • 不太可能。引用用户表单时可以使用Controls
猜你喜欢
  • 2011-08-12
  • 2020-06-25
  • 2017-03-12
  • 2017-05-26
  • 2023-03-29
  • 1970-01-01
  • 2012-05-30
相关资源
最近更新 更多