【问题标题】:How to make Microsoft Word visible after opening an Excel file in Word VBA在 Word VBA 中打开 Excel 文件后如何使 Microsoft Word 可见
【发布时间】:2019-04-04 00:31:11
【问题描述】:

我有一个 VBA Word 宏,它打开一个 Word 文档,然后打开一个 Excel 文件,选择一个单元格引用,最后使用 Msgbox 显示一条消息。打开 Excel 文件后,我无法找到使 Word 可见的代码,以便用户可以查看 Msgbox 消息,而无需使用任务栏从 Excel 切换到 Word。我试过oWord.Visible = True 但VBA 给了我一个错误。 任何提示表示赞赏。

请看下面的代码:

Sub Module_Test()
Dim oExcel As Object
Dim oWord_Doc as object
Dim wb_open as workbook
Set oExcel = New Excel.Application
str_Excel_Filename = "C:\Test\Excel_Template.xlsx"
Documents.Open ("C:\Test\Doc_to_process.docx")
Set oWord_Doc = activedocument
oExcel.Visible = True
oExcel.ScreenUpdating = True
oExcel.Workbooks.Open str_Excel_Filename
Set wb_open = activeworkbook
wb_open.ActiveSheet.range("a6").Select
' At this point Excel is visible.  But the Msgbox statement below is not visible except when one switches to Word using the task bar.  What statement do I put here to make Word visible?
Msgbox "Here is a message that should be visible when viewing the window containing the Doc_to_process.docx"
End Sub

【问题讨论】:

  • 您可以尝试在wb_open 行下方添加oWord_Doc.Activate
  • 试试AppActivate "Microsoft Word"AppActivate Application.Caption
  • 正如Tim Williams 建议的那样:在'wb_open ...'和'MsgBox ...'行之间插入'AppActivate "Microsoft Word"'行,然后MsgBox将显示,当点击OK时, Word 将处于活动状态(可见),Excel 在后台。
  • 我尝试了以上所有三个选项。结果是oWord_Doc.Activate 编译得很好,但不会将活动应用程序切换到 Word(但如果您在 VBA 编辑器中停止该行,它会这样做)。 AppActivate "Microsoft Word"AppActivate Application.Caption 都导致 Invalid procedure call or argument 的执行错误。感谢 Brotato 和 @tim-williams 的建议。

标签: vba ms-word


【解决方案1】:

可见位于应用程序级别。您的 oExcel 变量为您提供了线索。您没有名为 oWord 的变量。

编辑添加以下代码

Option Explicit

Sub Module_Test()

Const MY_WB_PATH                As String = "C:\Test\Excel_Template.xlsx"
Const MY_DOC_PATH               As String = "C:\Test\Doc_to_process.docx"

Dim my_xl_app                   As Excel.Application
Dim my_doc                      As Word.Document
Dim my_wb                       As Excel.Workbook

    Set my_xl_app = New Excel.Application

    With my_xl_app
        .Visible = True
        .ScreenUpdating = True
        Set my_wb = .Workbooks.Open(MY_WB_PATH)

    End With

    my_wb.Activate
    my_wb.activeworksheet.Range("a6").Select

    ' At this point Excel is visible.  But the Msgbox statement
    ' below is not visible except when one switches to Word using
    ' the task bar.  What statement do I put here to make Word visible?
    Set my_doc = Documents.Open(MY_DOC_PATH)
    my_doc.Activate
    ' If required
    my_doc.Application.Visible = True

    MsgBox "Here is a message that should be visible when viewing the window containing the Doc_to_process.docx"
End Sub

如果您是 VBA 新手,则应始终使用以下内容。

  1. 在 VBA IDE 中确保每个模块都以 'Option explicit' 开头

  2. 在 VBA IDE 中确保 Tools.Option.Code Settings 中的所有复选框都被勾选

【讨论】:

  • 即使将“activeworksheet”更改为“ActiveSheet”,它也不起作用。你必须使用蒂姆·威廉姆斯的建议。
  • @Freeflow 我不会选中Auto Syntax Check,它的干扰大于帮助,并且(通常)会突出显示错误的语法。
  • 一旦您了解了智能感知的工作原理以及如何使用它,我会同意。对于完全的新手,我会保留它。
  • 感谢@Freeflow 提供您建议的代码。我通过将activeworksheet 更改为ActiveSheet 来实现您的代码,并且在my_wb.activeworksheet.Range("a6").Select 代码行之后仍然没有出现Word。还有其他建议吗?
  • 你会相信 Application.Activate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
相关资源
最近更新 更多