2016-11-10 46 views
1

我對MS-Access & VBA編程有點陌生。我在MS-Access 2016和VBA中開發了一個多用戶應用程序,並轉換爲accdb。訪問已卸載的MS-Access表單的Tag屬性

我需要獲取存儲在創建的每個表單的Tag屬性中的值。表單未加載,但我需要從應用程序的超級用戶授予/刪除用戶對任何特定表單的訪問權的模塊中獲取值。現在我正在使用表單的名稱,但表單的名稱不能提供與a可以存儲在Tag屬性中相同的詳細級別。

有沒有一種方法可以訪問/獲取卸載窗體的標籤屬性值?

+0

你對「加載」和「顯示」感到困惑嗎? –

+0

如果一個Access表單有一個代碼模塊,你可以像這樣讀取它的屬性:'Form_yourFormName.Tag'。如果沒有,你必須打開它。但即使所有表單都有一個模塊,但我不確定這是多麼有用,因爲我沒有看到如何動態訪問這些類對象。 - 這可能是有趣的:http://stackoverflow.com/questions/1892039/iterating-through-the-object-browser-in-vba – Andre

回答

2

聲明:我不熟悉MS-Access。

表單本質上是一種類模塊和類模塊只不過是一個「藍圖」的對象 - 這是一個。一個對象 -

當你與一個形式互動,你實際上有實例形式的交互。即使你自己沒有創建實例(使用關鍵字New),也是如此,因爲表單有一個特殊的屬性(你可以看到是否導出模塊並在你喜歡的文本編輯器中查看它),VB_PredeclaredId,它是設置爲True - 這會使VBA爲您創建一個全局/默認實例,對象類型命名。

所以,當你分配MyAwesomeForm.Tag,你與默認實例工作 - 一個對象,不是。這可能會讓人困惑,因爲VBA完全像類型一樣命名對象。

因爲實例是全球性的,並通過VBA管理,你可以這樣做:

MyAwesomeForm.Tag = "ABC" 
Unload MyAwesomeForm 
Debug.Print MyAwesomeForm.Tag 'should print nothing, but won't crash either 

僅僅訪問一個卸載全局實例的Tag屬性將加載的對象!

而這需要我們對您的問題:

有沒有一種方法我可以訪問/獲取空載形式的標籤屬性值?

絕對不是。因爲只需訪問Tag屬性即可加載表單的實例。並且它將是空的,因爲無論您之前設置的任何值是在上設置的另一個對象類型

Tag實例屬性:它屬於一個實例,不以形式類型。這意味着你可以有這樣的:

MyAwesomeForm.Tag = "123" 

Dim form1 As MyAwesomeForm 
Set form1 = New MyAwesomeForm 
form1.Tag = "ABC" 

Dim form2 As MyAwesomeForm 
Set form2 = New MyAwesomeForm 
form2.Tag = "XYZ" 

Debug.Print MyAwesomeForm.Tag 'prints 123 
Debug.Print form1.Tag 'prints ABC 
Debug.Print form2.Tag 'prints XYZ 

的對象是「裝」時,它的「內存」。一個不在內存中的對象,甚至不存在;所以不,你不能讀取或寫入屬性值爲「未加載」的形式。

一個表格很可能是加載但不是顯示雖然。如果這就是你的意思,那麼答案是「是的,絕對!」。