gpt4 book ai didi

excel - 确定 VBA 2007 中对象变量的库名称..?

转载 作者:行者123 更新时间:2023-12-04 19:56:00 25 4
gpt4 key购买 nike

如何在 VBA 2007 中确定对象变量的完全限定类和成员名称?例如,Excel.Range 而不仅仅是 Range...就像代码中显示的那样?

Excel 和 Word 都有一个 Range 对象,但它们是截然不同的类。在下面的示例中,Range 被传递给函数。该函数如何确定它来自哪个类..?

该示例的结果生成“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

最佳答案

您可以使用 TypeOf 来测试对象是否实现特定接口(interface):

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

如果对象实现特定接口(interface),则使用关联的方法和属性(在某种程度上)是安全的。

请注意,单个对象可以实现多个接口(interface),请考虑以下 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

关于excel - 确定 VBA 2007 中对象变量的库名称..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48169756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com