从 Excel 调用 Word VBA MsgBox 函数
Posted
技术标签:
【中文标题】从 Excel 调用 Word VBA MsgBox 函数【英文标题】:Call Word VBA MsgBox function from Excel 【发布时间】:2014-05-06 14:36:41 【问题描述】:是否可以从 Excel VBA 调用 Word 的 MsgBox 函数?由于 MsgBox 不是 Word.Application 的一种方法,因此我无法执行此操作。
我试过这个:
Dim objWord As Word.Application
Set objWord = New Word.Application
Dim objDoc As Word.Document
Set objDoc = objWord.Documents.Add
objWord.Visible = True
objWord.Activate
Call objWord.Run("MsgBox", "Hello World") ' Or:
Call objDoc.Run("MsgBox", "Hello World")
但无论我包含哪个“调用”行,我都会收到错误消息“对象不支持此属性或方法”。
我正在尝试这样做,以便在打开的 Word 文档前显示一个消息框,说明文档呈现已完成。如果我只是调用 Excel 的 MsgBox,那么我必须单击 Windows 任务栏中的闪烁按钮才能看到消息框。
word 文档完全由我的 Excel 宏生成。
这可能吗?
【问题讨论】:
您是否尝试过MsgBox "Hello World"
在使 Word 应用程序可见并处于活动状态?
感谢您的建议,但我希望 Word 文档在生成时显示在屏幕上。
MsgBox
是 VBA.Interaction
类的一个方法 - 它不是 Word/Excel 对象库的一部分。
【参考方案1】:
我有一些功能可以导出模块并重新导入它们。它现在是为 PPT 配置的,但被我发现的 Excel 函数一起破解了。还有一种方法是使用 VBA 来编写 VBA。两者都相当先进。可能这两组功能都在这里可用:
http://www.cpearson.com/excel/vbe.aspx
但是,这可能是矫枉过正。这可能是您最好的选择,使用弹出窗口而不是 VBA msgBox。
Sub Test()
Dim wdApp As Object
Dim shl As Object
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True
wdApp.Activate
Set shl = CreateObject("wscript.shell")
shl.Popup ("Hello, world!")
Set shl = Nothing
Set wdApp = Nothing
End Sub
有关如何控制超时/等的更多详细信息,另请参阅此处。
Whats the best way to display a message box with a timeout value from VBA?
【讨论】:
谢谢大卫,这比我希望的还要好:弹出窗口似乎出现在焦点所在的任何窗口。【参考方案2】:是的!您这样做的问题在于,单词应用程序的运行函数会查找具有该名称的宏并运行它们。我能够做到这一点的方法是在 word doc 中创建一个创建消息框的子例程。
Public Sub Testing()
Dim objWord As Word.Application
Set objWord = New Word.Application
Dim objDoc As Word.Document
Set objDoc = objWord.Documents.Open("C:\whatnot\Stuff.docm")
objWord.Visible = True
objWord.Activate
objWord.Run ("Testing")
End Sub
然后在Word文档中:
Public Sub Testing()
MsgBox ("Hello World")
End Sub
【讨论】:
非常感谢 Telestia。然而,Word 文档完全由 Excel 宏生成。我可以创建一个包含您的“测试”宏的启用宏的空白模板,然后使用它生成我的文档,但如果我能够分发 Excel 电子表格而不必包含单词模板,那就太好了。 是的,我认为在我发布答案后可能就是这种情况。所以我开始查看 Word 文档,唉,我找不到任何可以让你导入模块的东西。或者甚至是我觉得更有趣的事情,写写代码的代码。我会在有空闲时间的时候继续寻找,尽管作为一个新问题可能会更好。 感谢 Telestia。下面的“弹出”想法对我有用,但感谢您的帮助! 您可以使用 Excel VBA 在 Word 文档中编写代码,但您需要在 Excel VB 项目中引用 Microsoft Visual Basic for Applications Extensibility 库,并且您需要信任对 VBE 对象模型的访问在 Word 的信任中心中在运行 Excel 代码的计算机上(默认情况下它不受信任是有充分理由的,并且不能使用 VBA 来信任它)。以上是关于从 Excel 调用 Word VBA MsgBox 函数的主要内容,如果未能解决你的问题,请参考以下文章