我正在使用Access 2010,並希望用戶單擊Form1中稱爲「另存爲」的一個按鈕來啓動VBA代碼,並且在代碼運行完畢之前,讓它暫停,打開Form2(用戶輸入「另存爲」標題,然後單擊保存),然後讓代碼繼續在Form1中使用在Form2中輸入的字符串作爲變量運行。暫停代碼傳遞用戶輸入值
我只是不知道如何在Form1中「暫停」我的代碼,因爲它等待用戶輸入。任何想法如何解決這個問題?
我正在使用Access 2010,並希望用戶單擊Form1中稱爲「另存爲」的一個按鈕來啓動VBA代碼,並且在代碼運行完畢之前,讓它暫停,打開Form2(用戶輸入「另存爲」標題,然後單擊保存),然後讓代碼繼續在Form1中使用在Form2中輸入的字符串作爲變量運行。暫停代碼傳遞用戶輸入值
我只是不知道如何在Form1中「暫停」我的代碼,因爲它等待用戶輸入。任何想法如何解決這個問題?
從Form1
開始,在對話模式下打開Form2
。 Form1
代碼將在Form2
上等待。
添加「完成」按鈕Form2
,並添加一個程序,這
重新打開
其Form2
隱藏
.Visible
屬性設置爲False隱藏窗體的單擊事件。將它隱藏起來可以將它從對話模式中解放出來因此,在用戶輸入她的值後,她可以點擊「完成」,流量控制將在Form1
中恢復,並且可以從現在隱藏的Form2
上的控件讀取輸入值。
通過這種方法,Form2
不需要知道關於Form1
的任何信息。因此,Form2
可用於收集任意形式的輸入...或其他代碼。
因此,假設Form1
有一個名爲cmdSaveAs
的命令按鈕,請使用類似於此的命令按鈕作爲其單擊事件過程。
Private Sub cmdSaveAs_Click()
DoCmd.OpenForm "Form2", acNormal, WindowMode:=acDialog
' the next line is not executed while Form2 is modal (open in dialog mode);
' but after Form2 is hidden, we can read the value of the text
' box named txtInput
MsgBox "User input was: " & Forms!Form2!txtInput
End Sub
您將需要使用Docmd.OpenForm打開Form2並將WindowMode參數設置爲acDialog。這會導致調用窗體(Form1)上的代碼停止並等待被調用窗體(Form2)關閉。在Form 2上,當您單擊保存按鈕時,可以將另存爲標題寫入Form 1上的隱藏文本框控件,或將Form 1上的屬性設置爲所需的值。如果用戶在返回到Form1時沒有爲「另存爲」標題輸入值,請確保您計劃要發生的情況。
你能解釋爲什麼我想重新打開Form2爲「隱藏」嗎?不會重新打開導致文本框值被清空? 此外,在什麼時候認爲我需要Form1中的代碼來「讀取」Form2中的值? –
重新打開Form2隱藏將其從對話框模式中刪除......然後允許Form1代碼繼續。文本框的值不會被丟棄,除非您有意做些事情來擺脫它。嘗試一個快速和骯髒的樣本表格,看看它的行爲。 – HansUp
只需在Form2中設置「Me.Visible = false」就可以得到相同的結果......這似乎不太令人困惑。重新打開表單有沒有其他好處? –