spi*_*tor 2 excel ms-access vba ms-word
如何在 VBA 2007 中确定对象变量的完全限定类和成员名称?例如,Excel.Range而不仅仅是Range......就像它在代码中出现的那样?
Excel 和 Word 都有一个Range对象,但它们是截然不同的类。在下面的示例中, aRange被传递给函数。该函数如何确定它来自哪个类......?
该示例的结果生成“Microsoft Excel.Range”。虽然很接近,但不一样。但是Parent.Name和类名是两个不同的属性,在其他软件中可能是完全不同的文本字符串,没有共性。
那么......如何才能得到Excel.Range而不是Microsoft Excel.Range..?
'Note: Project has references to both Excel and Word.
Public Sub Demo()
Dim r As Excel.range
Dim fulltype As String
Set r = ActiveCell
fulltype = WhatAmI(r)
Debug.Print fulltype
Select Case fulltype
Case "Excel.Range"
'Do stuff.
Case "Word.Range"
'Do other stuff.
End Select
End Sub
Private Function WhatAmI(ByRef X As Object) As String
Dim typ As String
Dim par As String
typ = TypeName(X)
par = X.Application.Parent.Name
WhatAmI = par & "." & typ
End Function
Run Code Online (Sandbox Code Playgroud)
您可以使用 TypeOf 来测试对象是否实现了特定接口:
Public Sub Demo()
Dim r As Excel.range
Dim fulltype As String
Set r = ActiveCell
If TypeOf r Is Excel.Range Then
ElseIf TypeOf r Is Word.Range Then
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
如果一个对象实现了一个特定的接口,那么使用相关的方法和属性是(有点)安全的。
请注意,单个对象可以实现多个接口,请考虑以下 Access 示例:
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("SELECT TOP 1 ID FROM MSysObjects")
Debug.Print TypeOf rs Is Object
'True
Debug.Print TypeOf rs Is Recordset
'True
Debug.Print TypeOf rs Is Recordset2
'True
Debug.Print TypeOf rs Is DAO.Recordset
'True
Debug.Print TypeOf rs Is DAO.Recordset2
'True
Debug.Print TypeOf rs Is ADODB.Recordset
'False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |