如何在Excel 2016 VBA中引用ActiveXcombobox
我在这里和其他地方尝试了各种解决scheme,例如:
dim wb as workbook, ws as worksheet
Dim cb As Object Set cb = ws.OLEObjects("ComboBoxViews")
要么
ComboBoxViews
要么
ws.comboboxviews
但是,所有返回错误1004,具有指定名称的项目未find。 但它是否存在,检查属性名称是非常清楚的“comboboxviews”。
有任何想法吗?
编辑:
为了明确其他人在将来寻求帮助,并使用Romcel的非常有用的代码作为基础,似乎为了添加项目到一个ActiveXcombobox(这是我的最终目标),你需要引用它作为一个对象:
Sub caller3() Dim ws As Worksheet Dim oleob As OLEObject Set ws = ThisWorkbook.Sheets("Sheet1") For Each oleob In ws.OLEObjects If TypeName(oleob.Object) = "ComboBox" Then oleOb.Object.AddItem "TEST" <<< CORRECT oleOb.AddItem "TEST" <<< INCORRECT End If Next End Sub
你可以直接在工作表中引用你的控件。
Sub caller1a() Sheet1.ComboBox1.Value = "value 1a" ' no errors End Sub
但是你不能这样做。
Sub caller1b() Dim ws As Worksheet Set ws = Sheet1 ws.ComboBox1.Value = "value1b" ' will give error End Sub
如果您熟悉Excel如何给每个控件分别指定索引。 您可以参考每个控件。
Sub caller2() Dim ws As Worksheet Set ws = Sheet1 ws.OLEObjects(1).Object.Value = "value2" End Sub
或者只是安全地循环浏览它们,并检查它是否是正在使用的正确的控件。
Sub caller3() Dim ws As Worksheet Dim oleob As OLEObject Set ws = ThisWorkbook.Sheets("Sheet1") For Each oleob In ws.OLEObjects If TypeName(oleob.Object) = "ComboBox" Then oleob.Object.Value = "value3" End If Next End Sub
希望这可以帮助。 祝你好运!