在表单上创建即时窗口样式日志

时间:2014-03-14 10:19:11

标签: ms-access access-vba

是否可以在表单上创建类似即时窗口的内容?

我已尝试向文本框发送各种更新,但文本框上的更新速率似乎比使用Debug.Print到即时窗口的速度慢得多。

最好告诉用户当他们等待处理某些内容时正在执行哪些操作(并且不会跳过某些操作,因为它们的处理速度比更新速率似乎允许的更快)。

3 个答案:

答案 0 :(得分:2)

您可以设置文本框(或标签)文本,然后调用DoEvents方法。 最后一次调用很重要,因为你正在执行一个很长的进程,屏幕只会在空闲时重绘。

或者,您可以使用状态栏通知您的进度:

SysCmd acSysCmdSetStatus, "Doing some long task, please wait..."
'Do your work
SysCmd acSysCmdSetStatus, ""

如果您可以衡量进度,则可以包含进度条。即处理记录集:

   bk = rs.Bookmark
   rs.MoveLast
   r = SysCmd(acSysCmdInitMeter, caption, rs.RecordCount)
   rs.Bookmark = bk

   Do Until rs.EOF
    'Do something
    i = i + 1
    If i Mod 10 = 0 Then     'Do not update the meter for every processed record
        SysCmd acSysCmdUpdateMeter, i
    End If
    rs.MoveNext
   Next
   SysCmd acSysCmdRemoveMeter

答案 1 :(得分:1)

在过去,我曾尝试使用单个多行文本框作为滚动状态窗口,但在文本选择状态(.SelText.SelLength时,它似乎非常挑剔, .SelLength)。最后,我只使用了五(5)个单行文本框控件和#34;滚动"他们自己。

在以下屏幕截图中,文本框控件名为txtStatus4txtStatus3,... txtStatus0(从上到下)

myForm.png

以及更新该状态的代码" window" (实际上是一个Frame控件)

Private Sub UpdateStatus(StatusText As String)
    Dim i As Long
    For i = 4 To 1 Step -1
        Me.Controls("txtStatus" & i).Value = Me.Controls("txtStatus" & i - 1).Value
    Next
    Me.txtStatus0.Value = StatusText
    Me.Repaint
End Sub

答案 2 :(得分:1)

万一有人再次寻找这个,有一种方法可以做OP所要求的,没有多个文本框。

Screenshot of solution

在表单上添加文本框。常规文本框可以。给它一个名字,比如txtLog。将其大小设置为足以显示一堆文本。

这是一个处理更新的子:

Private Sub WriteToLogText(strText As String, Optional blnClear As Boolean = False)
     txtLog.SetFocus
     If blnClear = True Then
         txtLog = strText
     Else
         txtLog = txtLog.Text & Chr(13) & Chr(10) & strText
     End If
End Sub

然后调用sub来写你的文字:

strMsg = "Warning: Commodity '" & Trim(drs("RawCommodity")) & "' is not mapped."
WriteToLogText strMsg