2011-01-14 65 views
1

我想爲excel-VBA創建一個函數。該函數用於計算組合框或列表框中某個字符串的索引。我想功能,具有以下特徵:VBA Combobox和Listbox常用超類

Public Function MyIndexOf(list As ???, str As String) As Integer 

我的問題是,如果有一個共同的超類組合框和列表框,這樣我可以代替???與一些類。

也許有這樣做的IndexOf的另一種方式。建議是受歡迎的,但我希望它在一個共同的單獨功能中完成。

人對如何解決這一建議?

在此先感謝 /帕特里克

回答

4

中有VBA沒有繼承(或VB 6),所以很遺憾沒有這樣的東西作爲一個超類。

你這樣做,不過,有非常弱類型的好處。您可以聲明該變量爲Variant,這是一種通用數據類型,可以保存任何類型的值,包括控件。一般來說,如果可能的話,您應該儘量避免使用使用Variant類型,但在這種情況下,您沒有多少選擇。

所以,你可以聲明你的函數是這樣的:

Public Function MyIndexOf(list As Variant, str As String) As Integer 
    ' Do work here... 
End Function 


當然,記住一個Variant數據類型能夠真正持有任何類型的值,並且該類型不知道,直到運行 - 時間,一個好的防守程序員會檢查,以確保指定的類型不是IntegerString甚至控制不公開相同的公共成員作爲ComboBoxListBox控制(從而打破了你寫的代碼期待一個這樣做)。

您可以使用TypeName函數在運行時確定Variant的實際類型。

Public Function MyIndexOf(list As Variant, str As String) As Integer 
    If (Not TypeName(list) = "ComboBox") And (Not TypeName(list) = "ListBox") Then 
     MsgBox "Wrong type of list variable was specified." 
    Else 
     ' Do work here... 
    End If 
End Function 
+0

你不是說'類型名(名單)`:所以,你可以簡單地修改上面的功能,包括保護條款,以防止超過ComboBoxListBox控制的任何其他的傳遞? – systemovich 2011-01-14 11:06:33