确定对象类型

9
有没有办法在向函数传递引用时确定对象类型?
我正在使用一个安全权限函数,该函数确定用户是否具有查看/编辑通过引用传递给它的表单的权限。 我想将其扩展到报告中。
为了保持通用性,我想将表单或报告的ref作为对象传递,例如: function gfSecurity_Permission(obj as Object) 但是,我需要确定函数内部的对象类型。
有人知道如何做到这一点吗?
非常感谢。
2个回答

13
VBA有两个函数:TypeName和TypeOf(TypeOf没有VBA文档文章,但该函数仍然存在)。
然而,要了解它们的使用示例,您可以参考VB.NET文档中的确定对象类型文章。

通用对象变量(即,您声明为Object的变量)可以持有任何类的对象。当使用Object类型的变量时,根据对象的类可能需要采取不同的操作;例如,某些对象可能不支持特定的属性或方法。Visual Basic提供了两种确定对象变量中存储的对象类型的方法:TypeName函数和TypeOf...Is运算符。

TypeName和TypeOf…Is
TypeName函数返回一个字符串,当您需要存储或显示对象的类名时,它是最佳选择,如下面的代码片段所示:

Dim Ctrl As Control = New TextBox  
MsgBox(TypeName(Ctrl))

The TypeOf...Is operator is the best choice for testing an object's type, because it is much faster than an equivalent string comparison using TypeName. The following code fragment uses TypeOf...Is within an If...Then...Else statement:

If TypeOf Ctrl Is Button Then  
    MsgBox("The control is a button.") 
End If

2
在Access VBA中找不到TypeOf关键字的任何参考。怀疑这只适用于.NET。这里是Access VBA中TypeName函数的MSDN参考。顺便说一句,这可能很方便:按类别列出的所有Access VBA函数的列表 - Simon Elms
1
@Simon,它是一个运算符,并且存在于所有版本的VBA中,我猜测... http://msdn.microsoft.com/en-us/library/0ec5kw18%28v=VS.80%29.aspx - Gabriele Petrioli
1
@Gaby:我认为你提供的参考资料是针对VB.NET而不是VBA的。当我搜索TypeOf的参考资料时,我只能找到VB.NET的文章,没有找到任何关于VBA的内容。 - Simon Elms
也许这个链接也会有用:http://www.mrexcel.com/forum/excel-questions/663582-visual-basic-applications-difference-between-type-type-name.html - Daniel Dušek
事实上,提到TypeOf "运算符"没有自己的帮助部分可能会有所帮助。相反,Access VBA帮助将其称为"If TypeOf"结构,在与If...Then...Else语句相同的部分中提到。 - Bobort

7

在Access中确定访问类型的最简单方法是在Access的系统表中进行对象查找。

这里是查找方法:

DLookup("Type","MSysObjects","NAME = '" & strObject & "'")

strObject是Access中对象的名称。

如果对象不存在于Access中,则结果为以下数字之一或NULL。

1 = Access Table
4 = OBDB-Linked Table / View
5 = Access Query
6 = Attached (Linked) File  (such as Excel, another Access Table or query, text file, etc.)
-32768 = Access Form
-32764 = Access Report
-32761 = Access Module

那么,对于一个表单来说,dlookup将提供“-32768”的值,对于一个报告来说,则提供“-32764”的值。希望这能帮到你。


这种方法仅适用于Access对象,它不会返回控件类型。TypeName返回Access对象类型和控件类型。 - DataWriter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接