如何在 Excel 2016 VBA 中引用 ActiveX ComboBox
How to reference ActiveX ComboBox in Excel 2016 VBA
我在这里和其他地方尝试过各种解决方案,例如:
dim wb as workbook, ws as worksheet
Dim cb As Object
Set cb = ws.OLEObjects("ComboBoxViews")
或
ComboBoxViews
或
ws.comboboxviews
但是全部return错误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
你可以直截了当地引用你在工作表中的控件,比如。
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
希望这对您有所帮助。祝你好运!
我在这里和其他地方尝试过各种解决方案,例如:
dim wb as workbook, ws as worksheet
Dim cb As Object
Set cb = ws.OLEObjects("ComboBoxViews")
或
ComboBoxViews
或
ws.comboboxviews
但是全部return错误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
你可以直截了当地引用你在工作表中的控件,比如。
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
希望这对您有所帮助。祝你好运!