Vba 如何为工作宏输出消息?

Vba 如何为工作宏输出消息?,vba,ms-word,Vba,Ms Word,如何在Word宏中显示一条表示等待一小段时间的消息。该字段应该只包含“请稍等片刻”的内容,脚本应该在后台加载。(我的脚本通过一个序列号将每个文档单独保存为PDF)。消息应在开始保存之前显示,并在保存完成后自动关闭 我以前使用过MsgBox,但我听说它不会在后台加载脚本(只有在关闭MsgBox之后) Sub-SerienbriefOneDoc() ' “SerienbriefOneDoc Makro ' ' Dim Dateiname作为字符串 暗淡的光线和长的一样 Application.Scr

如何在Word宏中显示一条表示等待一小段时间的消息。该字段应该只包含“请稍等片刻”的内容,脚本应该在后台加载。(我的脚本通过一个序列号将每个文档单独保存为PDF)。消息应在开始保存之前显示,并在保存完成后自动关闭

我以前使用过MsgBox,但我听说它不会在后台加载脚本(只有在关闭MsgBox之后)

Sub-SerienbriefOneDoc()
'
“SerienbriefOneDoc Makro
'
'
Dim Dateiname作为字符串
暗淡的光线和长的一样
Application.ScreenUpdating=False
Application.Visible=False
'变量声明
将文件夹名称设置为字符串
Dim SDESKTOPATH作为字符串,sFolderPath作为字符串
'查找桌面路径位置
sDesktopPath=Environ(“USERPROFILE”)和“\Desktop\”
'定义要在桌面上创建的文件夹名称
sFolderName=“Serienbrief”
'文件夹路径
sFolderPath=sdesktopath&sFolderName
'创建FSO对象
Set of so=CreateObject(“Scripting.FileSystemObject”)
'检查指定的文件夹是否存在
如果oFSO.FolderExists(sFolderPath),则
'如果桌面上有可用的文件夹
MsgBox“Der Angebene Ordner existiert bereits auf dem Desktop!”,vbInformation,“VBAF1”
转到PDFsave
其他的
'创建文件夹
MkDir文件夹路径
“在屏幕上显示messafe
MsgBox“Ordner erstellt:&vbCrLf&vbCrLf&S文件夹路径,vbInformation,“VBAF1”
如果结束
PDFsave:
“Const path As String=sFolderPath”Speicherpfad des Resultates N:\Lehre\Basislehrjahr\Auftraege\Projektarbeit\WordMakro\Serienbrief\save\
ActiveDocument.MailMerge.DataSource.ActiveRecord=wdLastRecord
LetzterRec=Word.ActiveDocument.MailMerge.DataSource.ActiveRecord
ActiveDocument.MailMerge.DataSource.ActiveRecord=wdFirstRecord
MsgBox“请稍等”
使用ActiveDocument.MailMerge“Waehlt das aktuelle Dokument des Serienbriefs”
.DataSource.ActiveRecord=wdFirstRecord
做
如果.DataSource.ActiveRecord>0,则“Prueft ob”将被视为一个完整的文件
如果.DataSource.DataFields(“Name”).Value为“0”,则“Name”中的“zaehlt die Anzahl Datensaetz”
.Destination=wdSendToNewDocument
.suppress blanklines=True
如果Dir(sFolderPath,vbDirectory)“,则“prueft ob”是一个gibt。
其他的
MsgBox“Verzeichnis existiert nicht”中的Fehlermeldung falls das Verzeichnis nicht existiert nicht
如果结束
使用.DataSource
.FirstRecord=.ActiveRecord
.LastRecord=.ActiveRecord
dname=sFolderPath&“\”和.DataFields(“Name”).Value&“\”和.DataFields(“Vorname”).Value&“.pdf”erstell变量mit dem Pfad和dem Namen
以
.执行暂停:=False
ActiveDocument.SaveAs2文件名:=dname,文件格式:=wdFormatPDF'benennt die Datei and aendert das Dateiformat auf PDF
ActiveDocument.Close False“schliesst das Fenster”
如果结束
如果结束
如果.DataSource.ActiveRecord

图中显示了它应该是什么样子(根本没有MsgBox)

标准VBA库中的每个函数都是同步的:您调用它,它完成它的工作,返回,执行继续执行下一条语句

无法在显示时显示
MsgBox
并运行任何代码,因为执行等待用户关闭消息框:函数在知道返回什么之前不会返回,因此,在该
MsgBox
调用的返回值已知之前,您的程序无法恢复-您最终丢弃该返回值并不重要


我想请您阅读(中级/高级)有关用户表单的想法(忘记
MsgBox
),最简单的方法是让一个非模式用户表单运行该节目(本文演示了如何制作一个可取消的进度指示器,该指示器是模式的,不运行该节目).

您可以在状态栏上提供进度报告。例如:

在代码顶部插入:

Dim i As Long, j As Long, sBar As Boolean
SBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
之后:

With ActiveDocument.MailMerge
Do
Application.Visible = True
插入:

j = .DataSource.RecordCount
i = i + 1
Application.StatusBar = "Processing " & Int(i / j * 100) & "%"
Application.StatusBar = False
Application.DisplayStatusBar = SBar
之后:

With ActiveDocument.MailMerge
Do
Application.Visible = True
插入:

j = .DataSource.RecordCount
i = i + 1
Application.StatusBar = "Processing " & Int(i / j * 100) & "%"
Application.StatusBar = False
Application.DisplayStatusBar = SBar
之后:

With ActiveDocument.MailMerge
Do
Application.Visible = True
插入:

j = .DataSource.RecordCount
i = i + 1
Application.StatusBar = "Processing " & Int(i / j * 100) & "%"
Application.StatusBar = False
Application.DisplayStatusBar = SBar

msgbox需要一个响应,所以我认为您最好创建一个表单,围绕代码打开和关闭它。。。。并显示非模态形式。