2009-09-22 53 views
9

那麼,如何將值從一種表單傳遞到另一種表單?例如:用戶從列表中選擇一個組織,這將打開一個旅程表單,該表單允許用戶輸入有關旅行的各種信息。在一個地方,我想添加另一個小彈出式窗體,他們可以輸入他們正在訪問的組織的聯繫信息(只是POC的姓名和電話)。MSAccess 2003 - 用於將值從一個表單傳遞到另一個表單的VBA

因此,當從選擇屏幕打開初始表單時,它有兩個簡單地隱藏在文本框中的ID(一個是tripID,另一個是OrgID),那麼如何將這些ID傳遞給第二個小流行以便聯繫信息具有相關的ID。

謝謝。

+0

它已經有一段時間,因爲我已經與訪問工作,但你可以調用其他的形式,設置模塊級/表單級的變量,然後關閉其他的形式? – 2009-09-22 22:33:43

回答

16

最好的辦法在這種情況下是不是要試圖通過一組變量。代碼太多,而且不靈活。例如,如果您需要傳遞兩個值,那麼多年來該需求增長到5個值時會發生什麼?試圖保持和傳遞一整套價值觀是過多的編碼工作。

請記住,ms-access中的每個表單實際上都是一個可以在代碼中操作的類對象。因此,在這裏使用對象方法,你會發現你不僅可以編寫更少的代碼,而且你的代碼會更乾淨,更模塊化,不需要全局變量,而且你編寫的代碼通常可以在不同的表單之間重複使用。

方法如下:

一般來說,當一種形式推出另一種形式的第二形式的開放活動的形式(事實上,你甚至可以用遲至載事件),您可以拿起對前一個表單對象的引用。換句話說,你可以在這裏使用對象方法。

在表格模塊級別,形式我宣佈一個表單對象爲:

Option Compare Database 
Option Explicit 
dim frmPrevious  as form 

然後,在表格上載事件,我們去:

Set frmPrevious = Screen.ActiveForm 

現在,任何代碼在我們的表單中,可以自由地使用代碼,事件,甚至是從代碼中的先前表單公開的變量。

所以,如果你想強制先前形式的磁盤寫入,並重新裝載數據。

frmPrevious.Refresh 

如果你想設置的ID值,然後去:

frmPrevious!ID = some value 

而且,請注意,你甚至可以聲明的形式以前作爲該形式的公共變量,因此,如果您有兩種形式深,你可以去:

frmPrevious.frmPrevious!ID = some value 

所以,簡單地聲明的形式分別形成代碼模塊中的對象(或免得你需要在代碼中使用值的)。上面的意思是任何代碼都有一個對以前的表單對象的引用。

frmPrevious.MyCustomRefresh 

,甚至東西像一些選項來強制前面的表格,生成並設置一個發票號:聲明爲恥骨的形式將成爲形式的方法和功能可以像運行

frmPrevous.SetInvoice 

或 frmPrevious.SetProjectStatusOn

所以不僅可以洗牌值和數據來回,但你可以輕鬆執行您在代碼打造爲prevous形式的特點和功能。

其實作爲一個編碼標準,我的大多數形式都稱爲MyRefresh恥骨功能。

注意,這種方法的好處是,你可以這樣讀+使用+設定值從先前的形式。這使您的代碼不僅可以接收值,還可以以前一種形式設置值。所以這種方法是雙向的。您可以在表單之間來回拖放數據和值。這裏的另一個優點是,你不再僅僅限於變量,但可以使用領域,控制值(事件,屬性)等

這種方法意味着現在好多以前的表格是在您的指尖。

所以,不要試圖通過變量的整體失衡。通過對錶單的引用,你有一個很好的現成物體在你的指尖,它使這種類型的編碼問題輕而易舉。

+1

非常感謝!我特別感謝解釋;幫助我學習!謝謝阿爾伯特! – Justin 2009-09-23 09:55:42

+0

該方法非常有趣。我個人使用一些非常相似的東西(至少在精神上)與一個特定的對象相關,該對象持有所有打開的窗口的集合,並且窗口被聲明爲表單的實例。除了標準的表單方法和屬性之外,這允許我有一系列特定的「窗口」方法和屬性。 – 2009-09-23 12:22:33

+1

這很棒,但只有一個音符。我認爲這不適用於獲取對活動子表單的引用。參考將始終是主要形式。 – HK1 2012-05-23 14:57:14

6

通常的方法是從彈出形式引用文本框在初始形式中,這樣的:

Forms!frmInitialForm!tripID 
Forms!frmInitialForm!OrgID 

然而,這種緊密結合的彈出形式爲初始形式,使得它不能在應用程序的其他地方使用。

一個更好的辦法是使用OpenArgs:

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID 

這是你的兩個值放入一個字符串,它傳遞給彈出的形式。然後,您可以使用Split功能將兩個值從OpenArgs中解析出來。

有關將使用OpenArgs參數的詳細信息,請參閱: http://www.fmsinc.com/free/NewTips/Access/accesstip13.asp

+0

謝謝!感謝您的資源! – Justin 2009-09-23 09:53:32

相關問題