【问题标题】:Word VBA: Static Status dialog windowWord VBA:静态状态对话框窗口
【发布时间】:2019-11-30 12:17:57
【问题描述】:

我创建了一个表单,它可以很好地与在后台运行的宏配合使用,以验证数据,然后将文档打印到网络上的特定打印机。

这个过程的关键元素是一个生产编号值,我想保留一个运行日志并显示在一个静态状态对话框窗口中。换句话说,一个类似于 MsgBox 的弹出窗口,不会干扰表单上的其他操作,而是浮动在文档顶部。

这个的视觉概念是......

如果需要,用户可以将窗口从他们的工作中移开。如果需要,请关闭窗口,但实际上我想在每次后台宏完成时重新弹出/刷新窗口中的数据。

我不能使用 MsgBox,因为它会在用户继续处理文档之前强制关闭窗口。我只是希望用户可以看到它,以便他们知道上次工作的内容以及之前的工作。

知道我可以使用什么控件,或者切换到允许用户继续工作的 MsgBox 吗?

肯...

PS:我发现了这一点,并试图找到一种方法来使这项工作对我有用。到目前为止,我已经设法以我想要的方式运行,但挥之不去的问题是如何调用这个 PS 脚本并包含我需要显示的信息。 Alternatives to MsgBox in VBScript - StackOverflow

PPS:我选择了一条稍微不同的路线,并使用显示在宏末尾的 MsgBox 释放表单。我在下面提到的解决方案中对此进行了描述。

【问题讨论】:

    标签: vba ms-word dialog msgbox


    【解决方案1】:

    请考虑使用 VBA 用户窗体,而不是使用 MsgBox。它们的使用并不比 MegBox 复杂多少,但您可以将它们设置为 无模式。在您处理 Word 文档时,无模式对话框在屏幕上保持打开状态。这是微软关于将对话框设置为模态或无模式的页面:Show method

    如果您搜索 VBA 无模式对话框,您会发现许多其他有关该主题的有用页面。

    【讨论】:

      【解决方案2】:

      在做了大量研究之后,我回来修改我的宏以合并静态变量和最后的 MsgBox 来报告已打印的最后 5 个生产编号。

      为了提供一种方法来显示此 MsgBox 以供参考,在打印运行之间,我创建了一个 OnlyNum 变量作为字符串,并替换了我拥有的 MsgBox,让用户知道他们只能在该字段中使用该消息中的数字。该陷阱的结束将流程转移到宏的底部(已放置显示最后五个打印作业的 MsgBox)。

      因此,当状态 MsgBox 作为打印结果显示时,它仅显示最后五个事件。如果陷阱捕捉到它,它会显示消息让用户知道只能使用数字,然后显示最后五个事件。

      代码参考:

      Private Sub CommandButton1_Click()
      
      Dim Prod As String
      Dim Temp As String
      Dim OnlyNum As String
      
      Static ProdNum1 As String
      Static ProdNum2 As String
      Static ProdNum3 As String
      Static ProdNum4 As String
      Static ProdNum5 As String
      
      'Check for only numeric value of TextBox1.Text
          If Not IsNumeric(TextBox1.Value) Then
          OnlyNum = "only numbers allowed" & vbCrLf & vbCrLf
          Cancel = True
          GoTo NotToday
      End If
      
      'Remove any spaces from TextBox1.Text 
      Prod = Replace(TextBox1.Text, " ", "")
      
      'If the resulting lenght is equal to 7 Print it.
          If Len(Prod) = 7 Then
              ActiveDocument.PrintOut
      
      'Update recent production numbers (5 in total)      
          ProdNum5 = ProdNum4
          ProdNum4 = ProdNum3
          ProdNum3 = ProdNum2
          ProdNum2 = ProdNum1
      
          ProdNum1 = Prod & " - " & Now()  ' Insert a new production number with timestamp
      
          TextBox1.Text = ""    'Clear the value of TextBox1.Text to prepare for the next Production number
      
        Else
          MsgBox ("Production Numbers must be 7 digits and contain only numerials.")
      End If
      
      NotToday:
          Application.ActivePrinter = Temp
          MsgBox (OnlyNum & ProdNum1 & vbCrLf & ProdNum2 & vbCrLf & ProdNum3 & vbCrLf & ProdNum4 & vbCrLf & ProdNum5)
          OnlyNum = ""  'Reset value of OnlyNum 
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-28
        • 2012-09-14
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多