[英]MS Access VBA Create a immediate window popup or simulate one
我有一個帶遞歸函數的代碼,它檢查文件夾中的文件夾,並在我的數據庫中寫入文件夾的名稱,ID和深度。 重復該過程,直到所有文件夾都在數據庫中(每個項目通常為200個文件夾)。
當我打開代碼窗口運行代碼時,由於debug.print
,我可以看到代碼正在做什么,但由於用戶從未打開代碼窗口,因此他們看不到正在發生的事情。 我想到了2個解決方案。
我搜索谷歌,但沒有找到一個有效的解決方案來立即彈出窗口。
至於第二個想法是有一種方法可以將.print
發送到文本框,還是像vba中的控制台對象?
我在用
Form_PrintWindow.PrintWindow.Text = xmlNode3.Attributes.getNamedItem("id").Text & " " & xmlNode3.Attributes.getNamedItem("name").Text & vbNewLine & Form_PrintWindow.PrintWindow.Text
但是在這個過程中,字符串會被填滿。
DebugOutput
和列表框OutputList
) 將UpdateProgress
子添加到該表單。 它會將您的其他流程的輸出作為新項目添加到列表框中,並選擇最近添加的項目。
Public Sub UpdateProgress(text As String) 'add item and select it With Me.OutputList .AddItem text .Selected(.ListCount - 1) = True 'zero based index End With DoEvents 'this frees up the OS to repaint the screen End Sub
在現有代碼中,創建一個Form_DebugOutput
的新實例(或者您為表單命名的任何內容。請注意,訪問會自動使用Form_
Form_DebugOutput
填寫表單。)
而不是Debug.Print
調用我們創建的表單實例的UpdateProgress
方法。
Public Sub testit() Dim output As New Form_DebugOutput output.Visible = True Dim i As Long For i = 1 To 1000 output.UpdateProgress "I've said hello " & i & " times." Next Stop End Sub
它看起來像這樣。
像這樣實時輸出結果會降低代碼速度,因此請仔細考慮是否確實需要顯示此信息。 此外,如果您希望表單保留在屏幕上,則需要在全局范圍內聲明Form
變量。 有關這方面的更多信息,您可能需要了解我的進度條 。
我的建議是使用SysCmd()來更新狀態欄。
這樣做的原因是因為每當我嘗試在代碼運行時輸出到表單時,它就會被擊中並錯過向用戶顯示的內容。 我從來沒有遇到過這種狀況的問題。
Function FolderImport()
Dim statBAR as variant
Dim fldName as string
statBAR = SysCmd(acSysCmdInitMeter, "Processing Import of Folders", 200)
For i = 1 to 200
statBAR=SysCmd(acSysCmdUpdateMeter, i)
DoCmd.RunSQL "INSERT INTO tblFOLDERS VALUES ('" & fldName & "');"
Next i
Forms.frm_NAV.lstFOLDERS.requery()
End Function
此代碼不是100%完整,但您可以了解正在發生的事情。 在代碼運行時,用戶無論如何都無法執行任何操作,因此代碼運行時在列表框中顯示文件夾與在代碼運行后運行requery()相同。 狀態欄讓用戶知道發生了什么事情,因此他們認為程序沒有凍結。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.