2012-08-26 26 views
3

我正在运行Excel 2003.我有以下VBA代码,对应于包含ComboBox控件和Label控件的简单UserForm。它通过保存ComboBox工作,但在保存Label时生成类型不匹配错误。为什么标签在VBA中会出现类型不匹配错误,但组合框不会?

Private whatComboBox As ComboBox 
Private whatLabel As Label 

Private Sub UserForm_Initialize() 
    Call SaveComboBox(SomeComboBox) 
    Call SaveLabel(SomeLabel) 
End Sub 

Private Sub SaveComboBox(aComboBox As ComboBox) 
    Set whatComboBox = aComboBox 
End Sub 

Private Sub SaveLabel(aLabel As Label) 
    Set whatLabel = aLabel 
End Sub 

[我很欣赏VBA与大多数其他语言相比是有限的。但我不会认为这是它会出错的那种。]

谢谢大家!

回答

3

试试这个

Private whatComboBox As msforms.ComboBox 
Private whatLabel As msforms.Label 

Private Sub UserForm_Initialize() 
    Call SaveComboBox(SomeComboBox) 
    Call SaveLabel(SomeLabel) 
End Sub 

Private Sub SaveComboBox(aComboBox As msforms.ComboBox) 
    Set whatComboBox = aComboBox 
End Sub 

Private Sub SaveLabel(aLabel As msforms.Label) 
    Set whatLabel = aLabel 
End Sub 

关于您的查询

它可以通过保存ComboBox的,但保存标签时产生类型不匹配错误。

您必须限定标签对象,因为Excel中也有一个标签

替代对象命名

Private whatComboBox As Control 
Private whatLabel As Control 

Private Sub UserForm_Initialize() 
    Call SaveComboBox(SomeComboBox) 
    Call SaveLabel(SomeLabel) 
End Sub 

Private Sub SaveComboBox(aComboBox As Control) 
    Set whatComboBox = aComboBox 
End Sub 

Private Sub SaveLabel(aLabel As Control) 
    Set whatLabel = aLabel 
End Sub 
+0

+1尼斯一个亚洲时报Siddharth。 –

+0

优秀!就是这样,谢谢你这么清楚地解释它! – Richard

+0

相关问题,如果使用Control作为声明类型:如何在VBA中投射?例如,如果我已将所有对象都声明为Control,但我需要调用特定于ComboBox的方法,那么我需要做什么? (或者,VBA是否根据对象的实际类型而不是其声明的类型动态确定方法调用的有效性?) – Richard

相关问题