Word VBA:静态状态对话框 window
Word VBA: Static Status dialog window
我在后台创建了一个与宏 运行 配合使用的表单以验证数据,然后将文档打印到网络上的特定打印机。
此过程的关键要素是生产编号值,我想保留 运行 日志并显示在静态状态对话框 window 中。换句话说,一个类似于 MsgBox 的弹出窗口 window 不会干扰表单上的其他操作,而是浮动在文档的顶部。
这个的视觉概念是...
如果需要,用户可以将 window 从他们的工作中移开。如果需要,请关闭 window,但实际上我想在每次后台宏完成时 re-pop/refresh window 中的数据。
我不能使用 MsgBox,因为它会在用户继续处理文档之前强制关闭 window。我只想让用户看到它,以便他们知道上次处理的内容以及之前的一些内容。
知道我可以使用什么控件,或者切换到允许用户继续工作的 MsgBox 吗?
肯...
PS:我找到了这个并且正在尝试找到一种方法来使它对我有用。到目前为止,我已经设法按照我想要的方式运行,但挥之不去的问题是如何调用这个 PS 脚本并包含我需要显示的信息。
Alternatives to MsgBox in VBScript - Whosebug
PPS:我选择了稍微不同的路线,并使用在宏末尾显示的 MsgBox 释放表单。我在下面提到的解决方案中对此进行了描述。
经过大量研究后,我重新修改我的宏以合并静态变量和末尾的 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
请考虑使用 VBA 用户窗体,而不是使用 MsgBox。它们的使用并不比 MegBox 复杂多少,但您可以将它们设置为 无模型。当您处理 Word 文档时,无模式对话框在屏幕上保持打开状态。这是 Microsoft 关于将对话框设置为模式或无模式的页面:Show method
如果您在 VBA 无模式对话框 上搜索,您会发现许多关于该主题的其他有用页面。
我在后台创建了一个与宏 运行 配合使用的表单以验证数据,然后将文档打印到网络上的特定打印机。
此过程的关键要素是生产编号值,我想保留 运行 日志并显示在静态状态对话框 window 中。换句话说,一个类似于 MsgBox 的弹出窗口 window 不会干扰表单上的其他操作,而是浮动在文档的顶部。
这个的视觉概念是...
如果需要,用户可以将 window 从他们的工作中移开。如果需要,请关闭 window,但实际上我想在每次后台宏完成时 re-pop/refresh window 中的数据。
我不能使用 MsgBox,因为它会在用户继续处理文档之前强制关闭 window。我只想让用户看到它,以便他们知道上次处理的内容以及之前的一些内容。
知道我可以使用什么控件,或者切换到允许用户继续工作的 MsgBox 吗?
肯...
PS:我找到了这个并且正在尝试找到一种方法来使它对我有用。到目前为止,我已经设法按照我想要的方式运行,但挥之不去的问题是如何调用这个 PS 脚本并包含我需要显示的信息。 Alternatives to MsgBox in VBScript - Whosebug
PPS:我选择了稍微不同的路线,并使用在宏末尾显示的 MsgBox 释放表单。我在下面提到的解决方案中对此进行了描述。
经过大量研究后,我重新修改我的宏以合并静态变量和末尾的 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
请考虑使用 VBA 用户窗体,而不是使用 MsgBox。它们的使用并不比 MegBox 复杂多少,但您可以将它们设置为 无模型。当您处理 Word 文档时,无模式对话框在屏幕上保持打开状态。这是 Microsoft 关于将对话框设置为模式或无模式的页面:Show method
如果您在 VBA 无模式对话框 上搜索,您会发现许多关于该主题的其他有用页面。