2009-11-09 91 views
1

我的訪問項目中有一個表單模塊。在模塊的頂部,我聲明一個變量,像這樣:訪問表單模塊中的變量的公共和私人修改器

option explicit 

private id_foo as long 

我想明確地指出,我通過使用它的private訪問修飾符需要在我的窗體模塊中的變量。

現在,同樣的窗體模塊中進一步下跌,我有需要知道和/或修改的id_foo值的函數:

function bar() as long 
    call do_something(me.id_foo) 
end function 

然而,這不起作用。但是,當我更改專用修改器修改器公像

public id_foo as long 

它的工作。

這種行爲讓我感到奇怪或者不直觀,事實上,我無法看到public和private的含義,如果我必須將該變量聲明爲public,才能在同一個表單模塊中使用它。

那麼,我是否忽略了一些顯而易見的東西,或者這是應該如何處理的?在id_foo前

感謝/劉若英

+0

它以什麼方式不起作用?錯誤訊息?它是否編譯,因爲我看不到它可以與我在那裏? – Fionnuala 2009-11-09 14:15:29

回答

0

一個表單及其模塊實際上代表一個類對象。您還可以創建(實例化)該類對象的多個實例。

因此,您聲明爲public的任何變量都將成爲該類對象的公共屬性。請注意,聲明爲public的表單代碼模塊中的任何函數都會成爲該類對象的公共方法。當你輸入「我」時,所有這些屬性和方法都會顯示在intel的意義上。關鍵詞。

如果將該變量聲明爲private,則該變量(或函數)將不會作爲窗體的公共屬性(變量)或公共方法(函數)公開。

因此,您的案例的簡單解決方案是放棄在您的代碼中使用me關鍵字,並且您的代碼將運行得很好。

所以聲明爲公共或私人在這裏有效果。事實上,「私人」是默認的。因此,公開會將變量和/或函數公開爲作爲類對象的那種形式的屬性和方法(請注意,您可以同時加載同一表單的多個實例)。

如果您將事物解密爲私有(默認,所以您不必爲變量或函數做任何事情),那麼您仍然可以在該表單代碼模塊中的任何代碼例程中使用該值,但它不會作爲財產/方法公開暴露,因此你不能使用我。

因此,如果您刪除了我的使用,您的代碼將正常工作。,只是去:

function bar() as long 
    call do_something(id_foo) 
end function 
+0

謝謝你的解釋。因此,'me'與其他語言中的'self'或'this'不完全相同。 – 2009-11-09 21:22:32

2

嘗試沒有「我」:

function bar() as long 
    call do_something(id_foo) 
end function 
1

如果您使用我的關鍵字,你只能看到公共成員,屬性(也構成和VBA )。

+0

好答案。並不總是完美的,但intellisense不會顯示Me.id_foo,除非它是公開的。 – JeffO 2009-11-09 15:20:55

+0

這是類模塊的標準行爲。一個可能不會意識到它,直到使用獨立的類模塊,但ME引用CLASS MODULE,而不是它附加的表單/報告。 – 2009-11-09 21:06:45