2012-08-26 28 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

相關問題