如何在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 

希望这可以帮助。 祝你好运!