Mac Office 2011 VBA Word 引用已打开 Excel 工作簿

Mac Office 2011 VBA Word refer to already opened Excel Workbook

我真的需要一些帮助。近一个月来我一直在寻找解决方案(并非一直如此),但我找不到使它起作用的方法。

首先,这是我必须打开工作簿的代码,它运行良好:

Private Sub OpenExcelDatabase()

    Dim oxl As Object
    Set oxl = CreateObject("Excel.Application")

    Dim xlPath As String
    xlPath = "OSX:Users:" & GetUserName.GetUserName & ":Documents:Rechnungen:"

    Dim xlFile As String
    xlFile = "Database_Rechnungen.xlsm"

    oxl.Workbooks.Open (xlPath & xlFile)
    Application.ActiveWindow = ActiveDocument

    Dim xlWB As Object
    Set xlWB = oxl.Workbooks.Open(xlPath & xlFile)

    xlWB.Application.Run "connectSQL"

End Sub

现在我需要从该工作簿中获取位于新 word 文档中的 2 个不同用户表单的一些数据。在 VBA 菜单中,我已经为 Excel 激活了对象库,但问题是即使它似乎知道这些功能(它显示了我需要的所有选项),它也可以't 运行 他们。问题是,只要按下 Word 中用户窗体的命令按钮,我就需要 运行 位于工作簿中的宏。

也许是为了澄清事情:

我有一个用来写发票的word模板。有 2 个(重要的)用户表单 - SearchCompany 和 SearchPerson。在这两个用户窗体中,用户可以输入一个字符串,该字符串将在 excel-database-cells 中搜索。如果该字符串存在于其中一个搜索到的单元格中,它将 return 该公司的所有信息返回到用户窗体。人也一样。在我的工作簿中,我有一份关于公司的 sheet 和一份关于在公司工作的人的 sheet。

这些是我已经尝试引用打开的工作簿或 运行 该工作簿中的 macro 的代码:

1. xlWB.Application.Run "SearchFirma"

2. Excel.Application.ActiveWorkbook.Application.Run "SearchFirma"

3. Excel.Workbooks("Database_Rechnungen.xlsm").Application.Run "SearchFirma"

4. Set xlWB = GetObject("Database_Rechnungen.xlsm")

5. Set xlWB = oxl.Workbooks("Database_Rechnungen.xlsm")

6. Set xlWB = Excel.Workbooks(1)
  1. 运行-时间错误“424”:需要对象
  2. 运行-time error '91': 对象变量或 With 块变量未设置
  3. 运行-时间错误“51”:内部错误
  4. 运行-时间错误“424”:需要对象
  5. 运行-时间错误“424”:需要对象“可能是“51”
  6. 运行-时间错误“424”:需要对象“可能是“51”

如果我再次使用 workbooks.Open-方法,我会收到错误消息,该工作簿已经打开...问题是要将信息恢复为 word,我还需要引用打开但未命名或保存的 word 文档 ("document1")。

无论我尝试什么都没有用。我已经搜索了一半 google 的解决方案,但从来没有人遇到过这样的问题......只要大多数人激活了对象库,一切都会起作用。为什么它对我不起作用?还有什么我需要检查的吗? (对象库已存在) 函数 getObject 无法在 mac 上运行,但也许有人知道解决方法? 我将非常感谢所有试图帮助我解决这个问题的人,因为我开始非常渴望找到解决这个问题的方法。

在 Words VBA- 编辑器中添加对 "Microsoft Excel 14.0 Object library" 的引用。这将使您能够访问 excel 对象模型。

然后您可以像这样引用应用程序和工作簿:

Sub test()

    Dim ex  As New Excel.Application
    Dim wb  As Workbook

    Set wb = ex.Workbooks.Open("C:\TestVAs\TestBook.xlsx")

End Sub

然后您可以从 excel 应用程序调用您的宏。

ex.Run "YourWorkbookNameAndPath!YourMacroToCall"

"workbbok" 对象没有过程 "Run"。

  1. xlWB.Application.Run "SearchFirma" <- 这可能是错误的,因为 workbbok 对象没有 属性 "Application"

  2. Excel.Application.ActiveWorkbook.Application.Run "SearchFirma" <- 这可能是错误的,因为 "Workbook" 对象没有 属性 "Application".

  3. Excel.Workbooks("Database_Rechnungen.xlsm").Application.Run "SearchFirma" <- 这可能是错误的,因为 "Workbbok" 对象没有 属性申请.

  4. Set xlWB = GetObject("Database_Rechnungen.xlsm") <- 这是错误的,但我不知道为什么。

  5. Set xlWB = oxl.Workbooks("Database_Rechnungen.xlsm") <- 这是错误的。

  6. 设置 xlWB = Excel.Workbooks(1)

你的电话应该是这样的:

Sub Test()
    Dim Ex as New Excel.Application
    Dim WB as Workbbok
    Dim Sh as Worksheet
    Dim Data as variant

    ' to a open workbook and read, write or delete data.
    ' Now you could manipulate the data with the "WB" variable.
    Set WB = Ex.Workbboks.Open("YourWorkbbokPathAndName")
    Set Sh = WB.Sheets("YourSheetName")
    ' recieve the data
    Data = Sh.cells.value

    ' do your stuff with Data

    ' write back data
    Sh.cells.value = data

    ' run a macro inside a workbbok
    ' This is the Application object. NOT a Workbook!
    Ex.Run "YourWorkbookPathAndName!YourMacroToCall"
End Sub

我找到了一种方法:

Private Sub Document_New()
    xlPath = "OSX:Users:" & GetUserName.GetUserName & ":Documents:Rechnungen:"
    xlFile = "Database_Rechnungen.xlsm"

    Call OpenExcFileWithApp(xlPath, xlFile, "connectSQL")
    UFFirmaSearch.Show

End Sub

这是函数:

Public oxl As Object
Public xlWB As Object

Public xlPath As String
Public xlFile As String

Public FSearchText As String
Public FResult As ListBox

Function OpenExcFileWithApp(Path As String, File As String, RunMacro As String)

    Dim FileFullName As String
    FileFullName = Path & File

    Set oxl = CreateObject("Excel.Application")
    Set xlWB = oxl.Workbooks.Open(FileFullName)

    If RunMacro <> "" Then
        xlWB.Application.Run RunMacro
    End If
End Function

每次我在 word-Modules 中使用 xlWB 时,它都会引用打开的工作簿。 :)

谢谢 Kiroshiro,是你让我想到了 :)