我有一个带递归函数的代码,它检查文件夹中的文件夹,并在我的数据库中写入文件夹的名称,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
但是在这个过程中,字符串会中途填满。
答案 0 :(得分:1)
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_
预先填写表单。)
而不是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
变量。有关详细信息,您可能需要阅读my progress bar。
答案 1 :(得分:0)
我的建议是使用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()相同。状态栏让用户知道发生了什么事情,因此他们不会认为程序冻结。