Excel 清除ActiveX下拉框错误438
我有一个填充两个ActiveX下拉菜单的脚本。我有一个重置按钮,当按下该按钮时,会运行一个宏,填充下拉菜单的值字段。我已经包括了按下重置按钮时触发的宏Excel 清除ActiveX下拉框错误438,excel,vba,Excel,Vba,我有一个填充两个ActiveX下拉菜单的脚本。我有一个重置按钮,当按下该按钮时,会运行一个宏,填充下拉菜单的值字段。我已经包括了按下重置按钮时触发的宏 Sub UnhideAll() Application.ScreenUpdating = False Worksheets("Control Panel").Shapes.Range(Array("ComboBox1")).ControlFormat.Value = "Choosing Region" Worksheets("C
Sub UnhideAll()
Application.ScreenUpdating = False
Worksheets("Control Panel").Shapes.Range(Array("ComboBox1")).ControlFormat.Value = "Choosing Region"
Worksheets("Control Panel").Shapes.Range(Array("ComboBox2")).ControlFormat.Value = "Choosing Office"
Worksheets("Global").Columns.EntireColumn.Hidden = False
Worksheets("Global").Rows.EntireRow.Hidden = False
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
我一直收到运行时错误438对象不支持此属性或方法。工作表(…)之后的所有内容都是后期绑定的,因为
工作表
生成一个对象
:您实际上是蒙着眼睛编码。通过告诉编译器您要使用的接口来帮助编译器-在本例中,工作表
:
Dim ctrlPanelSheet As Worksheet
Set ctrlPanelSheet = ActiveWorkbook.Worksheets("Control Panel")
现在,针对ctrlPanelSheet
的成员调用将在编译时进行验证,您将在其成员调用中获得IntelliSense/member完成
也就是说,ControlFormat
是类的一个成员,但是您正在对shaperage
对象调用它。当您对一个对象进行[late bound]成员调用时,对于该对象上不存在的成员,您会得到运行时错误438
但是,当您仅使用单个控件时,不需要形状设置
ctrlPanelSheet.Shapes("ComboBox1").ControlFormat.Value = "..."
现在,这样做将引发类型不匹配错误-ComboBox 1
看起来更像ActiveX控件,而不是表单控件(默认情况下类似于下拉列表1
)-您希望获取该MSForms.ComboBox
对象,您可以从工作表的OLEObjects
集合中获取它:
Dim oleBox1 As OLEObject
Set oleBox1 = ctrlPanelSheet.OLEObjects("ComboBox1")
对象正在包装您的MSForms.ComboBox
控件:
Dim box1 As MSForms.ComboBox
Set box1 = oleBox1.Object
现在,您有了一个MSForms.ComboBox
对象,您可以使用MSForms.ComboBox
对象执行所有通常可以执行的操作—所有操作都带有编译时验证:
box1.Value = "Test"
try:Worksheets(“controlpanel”).OLEObjects(“ComboBox1”).Object.Value=“selecting Region”@EvR可以正常工作,但它仍然是容易出错的后期绑定代码438。最好使用声明的类型并避免不必要的后期绑定。