2011-11-03 153 views
3

我有一個主窗體包含兩個其他子窗體。當子窗體(A)上的文本框值發生更改時,我希望將子窗體(B)上的文本框的值設置爲等於子窗體(A)上已更改的文本框。MS Access如何從一個子窗體獲取另一個子窗體的值?

所以對於Access來說是全新的我做了一些Google搜索,看起來這可以用一些VBA來實現。所以在子窗體(A)的文本框'更新後'事件中,我添加了這個VBA。

Private Sub ID_AfterUpdate() 
    Me.Parent.Forms.formA.textboxDestination.Value = Me.textboxSource.Value 
End Sub 

我正在使用代碼生成器來執行此操作。然後我保存並運行表單。什麼都沒發生。沒有錯誤..沒什麼,我甚至不知道這段代碼正在運行。我甚至不確定在Access中如何調試VBA。有人可以幫我嗎?

謝謝!

回答

2

控件的after update事件在用戶更改其值時觸發。如果ID綁定到自動編號字段,則在添加新記錄時,數據庫引擎將提供其值。但是,由於用戶未做出更改,因此更新後事件不會觸發。

對於一般調試目的,您可以添加一個Debug.Print或一個MsgBox語句。

Debug.Print "my event fired" 
MsgBox "my event fired" 

在VB編輯器的立即窗口中查看Debug.Print的輸出。您可以使用Ctrl + g鍵盤快捷鍵從您的主Access窗口訪問該窗口。

另一種技巧是在代碼的一行上設置斷點。右鍵單擊代碼行,然後從上下文菜單中選擇Toggle-> Breakpoint。或者單擊左邊距,以便出現紅點以標記斷點。或者按F9鍵。或者從VB編輯器的主菜單中選擇Debug-> Toggle Breakpoint。

您也可以在線上鍵入Stop來觸發中斷模式。但是,您需要稍後刪除它。我提到的其他斷點是臨時的,不會保存在代碼模塊中。

但是,如果您進入中斷模式,您可以使用F8鍵逐行執行一行代碼。這會告訴你哪些行被執行。您也可以通過輸入一個問號,那麼變量名檢查在中斷模式下的任何時間變量的值,然後輸入在立即窗口鍵:

? MyVariable 

探索VB編輯器的主菜單中找到額外的調試選項。例如,監視窗口將允許您在逐步執行代碼時監視所選變量的值。

+0

我看。我怎麼可以檢測在這種情況下在自動遞增領域的變化? – Nick

+0

我正在嘗試!謝謝.. – Nick

1

在你改變文本框的更新屬性,把下面的:

[Forms]![frmContainingValueYouWantToChange]![txtTextboxYouWantToChange] = "newValueHere" 

讓我們知道你是怎麼得到的?

1

您不必指定父窗體的名稱。

Me.Parent.CONTROLNAME.Value是一種工作代碼。

問候

+0

他沒有指定父窗體的名稱,而是另一個子窗體的名稱「formA」: 'Me.Parent.Forms.formA.textboxDestination.Value' –

0

我知道這是6年前,但我覺得在這裏的錯誤是你更新從formA值相同formA

Me.Parent.Forms.formA實際上igual到Me因爲你美其名曰:

子窗體(A)的文本框 '更新後' 事件

應該formB和單詞 「表」 應放在(和「價值」字不是強制性的)之後:

Private Sub textboxSource_AfterUpdate() 
    Me.Parent.formB.Form.textboxDestination.Value = Me.textboxSource.Value 
End Sub 

你可以在這裏學習一些更多信息如何Refer to Form and Subform properties and controls

問候

相關問題