3

我有一个带有递归函数的代码,它检查文件夹的文件夹并将文件夹的名称、ID 和深度写入我的数据库中。重复该过程,直到所有文件夹都在数据库中(通常每个项目有 200 个文件夹)。

当我在代码窗口打开的情况下运行代码时,我可以看到代码在做什么debug.print,但由于用户从未打开代码窗口,所以他们看不到发生了什么。我想到了2个解决方案。

  1. 在我的表单上打开“即时窗口”作为弹出窗口。
  2. 创建一个带有文本框的表单。

我搜索了谷歌,但没有找到一个可行的解决方案来立即弹出窗口。

至于第二个想法,有没有办法将其发送.print到文本框,或者在 vba 中是否有类似控制台对象的东西?

我正在使用

Form_PrintWindow.PrintWindow.Text = xmlNode3.Attributes.getNamedItem("id").Text & " " & xmlNode3.Attributes.getNamedItem("name").Text & vbNewLine & Form_PrintWindow.PrintWindow.Text

但是字符串在这个过程中会变满。

4

2 回答 2

1
  1. 创建一个带有适当大小的空列表框控件的表单。(我命名了我的表单DebugOutput和列表框OutputList
  2. 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
    
  3. 在您现有的代码中,创建一个新实例Form_DebugOutput(或任何您命名的表单。请注意,访问会自动在表单前面加上Form_.)

  4. 而不是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在全局范围内声明变量。有关这方面的更多信息,您可能想阅读我的进度条

于 2014-11-10T21:10:15.330 回答
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() 相同。状态栏让用户知道正在发生某些事情,因此他们不会认为程序冻结了。

于 2014-11-10T20:03:35.127 回答