[英]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.