如何在Excel 2016 VBA中引用ActiveX ComboBox

时间:2017-05-25 12:49:04

标签: excel excel-vba activexobject vba

我在这里和其他地方尝试了各种解决方案,例如:

dim wb as workbook, ws as worksheet
Dim cb As Object
Set cb = ws.OLEObjects("ComboBoxViews")

ComboBoxViews

ws.comboboxviews

但是所有返回错误1004,找不到具有指定名称的项目。但它确实存在,检查属性的名称非常清楚' comboboxviews'。

有什么想法吗?

编辑:

为了明确其他人在将来寻求帮助并使用Romcel非常有用的代码作为基础,似乎为了将项目添加到ActiveX ComboBox(这是我的最终目标),你需要将其作为对象引用:

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

1 个答案:

答案 0 :(得分:2)

你可以直截了当地在工作表中引用你的控件,如。

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

希望这会有所帮助。祝你好运!