【问题标题】:How to refer to workbooks opened before from within word vba?如何在 word vba 中引用之前打开的工作簿?
【发布时间】:2016-09-06 18:05:56
【问题描述】:

我在 MS Word 上使用 VBA 时遇到了一个微妙的问题。我尝试参考一些 word 启动之前打开的工作簿。

从一个简单的单词中的简短测试宏

MsgBox Workbooks.Count

尽管打开了 3 个(空)工作簿,但仍提供 0 值。 Word 启动后打开 3 个工作簿时,我得到正确的值 3。

如何解决这个问题?

jm2p 泽夫

【问题讨论】:

  • 您说的是 Excel 而不是 Word,对吧?我不认为 Workbooks.Count 在 Word 宏中可用。
  • 无论如何,非常感谢大家,它现在可以工作了! :)

标签: excel vba ms-word


【解决方案1】:

这是因为您必须获取正在运行的 Excel 实例,而不是创建一个新实例

以下代码设置一个 Excel 应用程序对象,首先尝试获取任何正在运行的实例,然后,如果没有 excel 会话已经在运行,则打开一个新的:

Option Explicit

Sub LateBindingExcel()
    Dim xlApp As Object

    Set xlApp = GetExcelObject

    MsgBox xlApp.Workbooks.count
End Sub

Function GetExcelObject() As Object
    Dim excelApp As Object

    On Error Resume Next
    Set excelApp = GetObject(, "Excel.Application") '<--| try getting a running Excel application
    On Error GoTo 0
    If excelApp Is Nothing Then Set excelApp = CreateObject("Excel.Application") '<--| if no running instance of Excel has been found then open a new one

    Set GetExcelObject = excelApp '<--| return the set Excel application
End Function

【讨论】:

    【解决方案2】:

    看看这个:

    'Option Explicit
    

    '选项显式

    Sub check()
    
        Set objExcel = GetObject(, "Excel.Application")
        Set wbs = objExcel.Workbooks
    
        Debug.Print wbs.Count
    
        Set objExcel = Nothing
        Set wbs = Nothing
    
    End Sub
    

    【讨论】:

    • 您必须注释“选项显式”。
    • 好的,我找到了我的 3 个工作簿。但是我现在有另一个问题:可以打开多个 Excel 实例吗?以及如何枚举它们/找到合适的?
    • 查看这里,或许你会发现一些有用的东西:stackoverflow.com/questions/30363748/…
    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多