【问题标题】:Opening Word from Excel using VBA – Several errors使用 VBA 从 Excel 打开 Word – 几个错误
【发布时间】:2020-08-28 05:56:11
【问题描述】:

我目前正在尝试使用 VBA 从 Microsoft Excel 打开 Microsoft Word。我在网上找到了这些资源:

基于它们,我想出了以下代码:


代码 1

Dim wordApp As Word.Application
Set wordApp = CreateObject("Word.Application")

在 Word 已打开的情况下运行代码

Excel 停止响应。

关闭 Word 运行代码

Word 打开,但 Excel 给我错误 Out of memoryAutomation errorwordApp 未定义。


代码 2

Dim wordApp As Word.Application
Set wordApp = GetObject(,"Word.Application")

在 Word 已打开的情况下运行代码

Excel 抛出错误 Out of memorywordApp 未定义。

关闭 Word 运行代码

Excel 抛出错误 ActiveX component can't create object or return reference to this objectwordApp 未定义。


系统信息

操作系统:macOS Mojave (10.14.6)

Excel 和 Word 版本:16.36

Excel 中的引用:

Visual Basic For Applications, Microsoft Excel 16.0 Object Library, Microsoft Forms 2.0 Object Library, Microsoft Office 16.0 Object Library, Microsoft Word 16.0 Object Library, OLE Automation

结论

这些错误非常令人困惑,我无法通过阅读 Microsoft 的错误页面来修复它们。例如,我不断收到错误Out of memory(见上文),尽管我有大约 10 GB 的可用 RAM 空间。我怎样才能让它在我的机器(见上文)以及任何其他机器上可靠地工作?

【问题讨论】:

    标签: excel vba automation ms-word


    【解决方案1】:

    将您的两种方法组合在一个中看起来像这样,并且它不应该返回任何错误。

    如果错误仍然存​​在,则它没有连接到代码本身... 只需要引用Microsoft Word 16.0 Object Library

    Sub openWordApp()
      Dim wordApp As Word.Application
    
      On Error Resume Next
       Set wordApp = GetObject(, "Word.Application")
       If Err.Number <> 0 Then
          Err.Clear: On Error GoTo 0
          Set wordApp = CreateObject("Word.Application")
       End If
       On Error GoTo 0
       wordApp.Visible = True
       Debug.Print wordApp.Documents.count
    End Sub
    

    请同时检查是否没有打开多个 Word 会话...也许您使用 Word 会话Visible = False 多次检查了代码,但仍然有很多这样的会话打开。只是可能,但最好检查一下。

    【讨论】:

    • 我在Set wordApp = CreateObject("Word.Application") 行仍然收到错误消息。无论 Word 之前是否打开,它都显示为 Runtime error: Out of memory。如果此错误与您所说的代码无关,那么它与什么有关?
    • @Paul:在您尝试代码的那一刻,您是否还检查了打开了多少 Word 会话?我的意思是,不可见的会话。我不在 MAC 上工作,但我想它是一种Task Manager 能够向您展示所有打开的进程。 Activity Monitor我觉得……
    • 当我运行您的代码时,Word 实际上会打开并获得焦点,但 wordApp 对象仍未定义以供进一步使用。顺便说一句,我再次尝试了您的代码,现在我在同一行得到了Automation Error...
    • @Paul:你为什么说“它没有定义”? Debug.Print wordApp.Documents.count 是否返回错误?如果不是,它是很好定义的(当它工作时......),即使它为新创建的会话返回零。你需要在这段代码工作后使用对象吗?如果是,您必须在模块级别声明变量(在模块代码之上 - 声明部分)。一个 Sub 变量 life 是作为 sub 工作的。它不能在另一个子中使用。但是您仍然没有提及您的 Word 开放会话...您检查过这方面吗?
    • 我会努力的!感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多