2010-01-19 61 views
8

當傳遞對函數的引用時,是否有方法確定對象類型?MS Access:確定對象類型

我正在使用安全權限函數,它確定用戶是否有權查看/編輯通過引用傳遞給它的窗體。我想擴大這個以包括報告。

爲了保持功能一般,我想傳遞一個裁判爲任何一個形式或作爲對象的報表,如: function gfSecurity_Permission(obj as Object)

不過,我需要確定對象的type在功能範圍內。

有沒有人知道一種方法來做到這一點?

MTIA

回答

11

看看

typeOf and typeName

通用對象變量(即變量聲明爲對象) 可以從任何類持有對象。當使用Object類型的變量 時,您可能需要根據 對象的類別採取不同的操作;例如,某些對象可能不支持特定的屬性或方法。 Visual Basic提供了兩種確定 哪種類型的對象存儲在對象變量中的方法:TypeName 函數和TypeOf ... Is運算符。

的TypeName和TypeOf運算...是
的 TypeName函數返回一個字符串,是最好的選擇,當你 需要存儲或顯示類名稱的對象的,如圖所示 下面的代碼片段:

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

將typeof ...是運營商對測試對象的 類型的最佳選擇,因爲它比使用類型名等價的字符串比較 快得多。下面的代碼片段使用TypeOf運算......是一個 如果內... Then ... Else語句:確定接入的接入類型

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

非常感謝! – maxhugen

+2

在Access VBA中找不到對TypeOf關鍵字的任何引用。懷疑這只是.NET。 [Here](http://office.microsoft.com/en-us/access-help/typename-function-HA001228928.aspx?CTT=5&origin=HA010131676)是MSDN對Access VBA中TypeName函數的引用。順便說一下,這可能很方便:[按類別列出所有Access VBA函數](http://office.microsoft.com/zh-cn/access-help/access-functions-by-category-HA010131676.aspx )。 –

+1

@simon,它是一個運算符,並存在於 - 我猜 - 所有版本的VBA .. http://msdn.microsoft.com/en-us/library/0ec5kw18%28v=VS.80%29.aspx –

6

最簡單的方法是做內的對象查找訪問'系統表。

這裏將是查找:

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

strObject是對象的訪問

結果低於號或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」的報告 希望幫助

+0

此方法只適用於Access對象,它不會返回控件類型。 TypeName返回Access對象類型和控件類型。 – DataWriter