不知道這裏的禮儀,所以我會發布它,如果建議,我會回來刪除它。 Chip Pearson在Code Cage論壇上發佈了這個代碼(http://www.thecodecage.com/forumz/microsoft-excel-forum/170961-loop-enumeration-constants.html)。我沒有在我的機器上的TypeLinInfo DLL,所以我無法測試它(我確信谷歌會出現下載TLBINF32.dll的地方)。儘管如此,這是他的整個帖子,以保存其他人註冊論壇:
如果您的 計算機上安裝了TypeLibInfo DLL,則只能這樣做。在VBA中,轉到工具菜單,選擇引用,然後滾動到「TypeLib Info」。如果此項目存在,請檢查它。如果它不存在 ,則退出閱讀,因爲你不能做你想做的事情。您需要的DLL的 文件名是TLBINF32.dll。
下面的代碼演示瞭如何獲取的名稱和值在 XLYesNoGuess枚舉:
Sub AAA()
Dim TLIApp As TLI.TLIApplication
Dim TLILibInfo As TLI.TypeLibInfo
Dim MemInfo As TLI.MemberInfo
Dim N As Long
Dim S As String
Dim ConstName As String
Set TLIApp = New TLI.TLIApplication
Set TLILibInfo = New TLI.TypeLibInfo
Set TLILibInfo = TLIApp.TypeLibInfoFromFile(_
ThisWorkbook.VBProject.References("EXCEL").FullPath)
ConstName = "XLYesNoGuess"
For Each MemInfo In _
TLILibInfo.Constants.NamedItem(ConstName).Members
S = MemInfo.Name
N = MemInfo.Value
Debug.Print S, CStr(N)
Next MemInfo
End Sub
使用這方面的知識,您可以創建兩個有用的功能。 EnumNames 返回包含值的名稱字符串數組中的 枚舉:
Function EnumNames(EnumGroupName As String) As String()
Dim TLIApp As TLI.TLIApplication
Dim TLILibInfo As TLI.TypeLibInfo
Dim MemInfo As TLI.MemberInfo
Dim Arr() As String
Dim Ndx As Long
Set TLIApp = New TLI.TLIApplication
Set TLILibInfo = New TLI.TypeLibInfo
Set TLILibInfo = TLIApp.TypeLibInfoFromFile(_
ThisWorkbook.VBProject.References("EXCEL").FullPath)
On Error Resume Next
With TLILibInfo.Constants.NamedItem(EnumGroupName)
ReDim Arr(1 To .Members.Count)
For Each MemInfo In .Members
Ndx = Ndx + 1
Arr(Ndx) = MemInfo.Name
Next MemInfo
End With
EnumNames = Arr
End Function
你會調用該函數的代碼,如:
Sub ZZZ()
Dim Arr() As String
Dim N As Long
Arr = EnumNames("XLYesNoGuess")
For N = LBound(Arr) To UBound(Arr)
Debug.Print Arr(N)
Next N
End Sub
您還可以創建一個功能測試如果一個值被用於 枚舉定義:
Function IsValidValue(EnumGroupName As String, Value As Long) As
Boolean
Dim TLIApp As TLI.TLIApplication
Dim TLILibInfo As TLI.TypeLibInfo
Dim MemInfo As TLI.MemberInfo
Dim Ndx As Long
Set TLIApp = New TLI.TLIApplication
Set TLILibInfo = New TLI.TypeLibInfo
Set TLILibInfo = TLIApp.TypeLibInfoFromFile(_
ThisWorkbook.VBProject.References("EXCEL").FullPath)
On Error Resume Next
With TLILibInfo.Constants.NamedItem(EnumGroupName)
For Ndx = 1 To .Members.Count
If .Members(Ndx).Value = Value Then
IsValidValue = True
Exit Function
End If
Next Ndx
End With
IsValidValue = False
End Function
如果值被定義F該函數返回真或EnumGroupName或 如果未定義,則爲False。你會調用該函數的代碼 類似如下:
Sub ABC()
Dim B As Boolean
B = IsValidValue("XLYesNoGuess", xlYes)
Debug.Print B ' True for xlYes
B = IsValidValue("XLYesNoGuess", 12345)
Debug.Print B ' False for 12345
End Sub
親切, 芯片皮爾遜 微軟MVP 1998 - 2010 皮爾遜軟件諮詢,LLC www.cpearson.com [在網站上的電子郵件]
在我看來,這是爲了從Excel類型信息中提取數據,這些數據適用於Excel類型,但不適用於用戶定義的類型。 – Geoff 2013-04-24 14:37:41
這一行:'Set TLILibInfo = New TLI.TypeLibInfo'是多餘的。每次使用它時,都會在下一行中分配一個全新的對象。 – mielk 2017-05-27 21:54:20