确定对象类型
Posted
技术标签:
【中文标题】确定对象类型【英文标题】:Determine Object Type 【发布时间】:2010-01-19 01:59:26 【问题描述】:在传递对函数的引用时,有没有办法确定 Object 类型?
我正在使用安全权限功能,该功能确定用户是否有权查看/编辑通过引用传递给它的表单。我想扩展它以包括报告。
为了保持函数的通用性,我想将表单或报表的引用作为对象传递,例如:
function gfSecurity_Permission(obj as Object)
但是,我需要确定函数内对象的type
。
有人知道怎么做吗?
MTIA
【问题讨论】:
【参考方案1】:看看
typeOf and typeName
通用对象变量(即你声明为对象的变量) 可以保存任何类的对象。使用 Object 类型的变量时, 您可能需要根据类别采取不同的行动 目的;例如,某些对象可能不支持特定的 属性或方法。 Visual Basic 提供了两种方法来确定 哪种类型的对象存储在对象变量中:TypeName 函数和 TypeOf...Is 运算符。
TypeName 和 TypeOf...Is 这 TypeName 函数返回一个字符串,是当你 需要存储或显示一个对象的类名,如图 以下代码片段:
Dim Ctrl As Control = New TextBox MsgBox(TypeName(Ctrl))
TypeOf...Is 运算符是测试对象的最佳选择 类型,因为它比等效的字符串比较快得多 使用类型名称。以下代码片段使用 TypeOf...Is 在 If...Then...Else 语句:
If TypeOf Ctrl Is Button Then MsgBox("The control is a button.") End If
【讨论】:
在 Access VBA 中找不到对 TypeOf 关键字的任何引用。怀疑这只是.NET。 Here 是 MSDN 对 Access VBA 中 TypeName 函数的引用。顺便说一句,这可能很方便:list of all Access VBA functions by category。 @simon,它是一个运算符并且存在于 - 我猜 - 所有版本的 VBA .. msdn.microsoft.com/en-us/library/0ec5kw18%28v=VS.80%29.aspx @Gaby:我认为您提供的参考是针对 VB.NET,而不是 VBA。当我寻找对 TypeOf 的引用时,我只能找到 VB.NET 的文章,找不到任何关于 VBA 的文章。 也许这个链接也有用:mrexcel.com/forum/excel-questions/… 确实,在帮助中提到 TypeOf“操作符”没有自己的部分可能会有所帮助。相反,Access VBA 帮助将其称为“If TypeOf”结构,位于与 If...Then...Else 语句相同的部分。【参考方案2】:确定 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 对象类型和控件类型。以上是关于确定对象类型的主要内容,如果未能解决你的问题,请参考以下文章