TypeName
會工作,但在一天結束時它是一個字符串比較。
在VBA強類型的類型檢查的實際語法是這樣的:
TypeOf [object] Is [Type]
所以:
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.CheckBox Then
Debug.Print TypeName(ctrl), ctrl.Name, ctrl.Value
End If
Next
現在,有點笨拙的MSForms庫正在OptionButton
和CheckBox
實現相同界面(實際上並不是所有這些令人驚訝的),所以對於這兩種類型的控件,上述條件將是True
;你可以與其他類型的檢查篩選出OptionButton
:
If TypeOf ctrl Is MSForms.CheckBox And Not TypeOf ctrl Is MSForms.OptionButton Then
可以說,使用TypeName
是簡單的,至少在這種情況下MSForms
是煩人。但是當您開始需要在VBA中進行類型檢查時,您的已知瞭解TypeOf ... Is
。
謝謝!我發現我無法將控件類型和值的驗證放在同一行上。 – SQLiz
@SQLiz這是因爲VBA邏輯運算符'And','Or'等不會短路,所以整個布爾表達式都需要進行評估。 –