如何在Excel 2016 VBA中引用ActiveX组合框

如何在Excel 2016 VBA中引用ActiveX组合框,excel,activexobject,vba,Excel,Activexobject,Vba,我在这里和其他地方尝试了各种解决方案,例如: dim wb as workbook, ws as worksheet 或 或 但是返回错误1004,找不到具有指定名称的项。但它确实存在,检查属性时,名称很明显是“ComboboxView” 有什么想法吗 编辑: 为了向将来寻求帮助并使用Romcel非常有用的代码作为基础的任何其他人说明这一点,似乎为了向ActiveX组合框添加项目(这是我的最终目标),您需要将其作为对象引用: Sub caller3() Dim ws As Worksheet

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

dim wb as workbook, ws as worksheet

但是返回错误1004,找不到具有指定名称的项。但它确实存在,检查属性时,名称很明显是“ComboboxView”

有什么想法吗

编辑:

为了向将来寻求帮助并使用Romcel非常有用的代码作为基础的任何其他人说明这一点,似乎为了向ActiveX组合框添加项目(这是我的最终目标),您需要将其作为对象引用:

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
子调用方3()
将ws设置为工作表
作为对象的Dim oleob
设置ws=ThisWorkbook.Sheets(“Sheet1”)
对于ws.OLEObjects中的每个oleob
如果TypeName(oleob.Object)=“组合框”,则

oleOb.Object.AddItem“TEST”您可以像这样直接引用工作表中的控件

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

希望这有帮助。祝你好运

ws.ComboboxView
应该可以工作,仔细检查
ws
是否指向正确的工作表。
Sub caller1b()
Dim ws As Worksheet
  Set ws = Sheet1
  ws.ComboBox1.Value = "value1b"    '  will give error
End Sub
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