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

时间:2016-01-11 13:37:20

标签: vba osx-yosemite excel-vba-mac word-vba-mac

我真的需要一些帮助。我一直在寻找解决方案近一个月(不是经常),但我找不到办法让它发挥作用。

首先,这是我必须打开工作簿的代码,它非常有效:

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个不同Userform的数据。在VBA菜单中,我已经激活了Excel的Object-Library,但问题在于即使它似乎知道函数(它显示了我需要的所有选项),它也无法运行它们。问题是,只要按下Word中的Userform的命令按钮,我就需要运行一个位于工作簿中的宏。

也许澄清事情:

我有一个用于编写发票的单词模板。有2个(重要的)Userforms - SearchCompany和SearchPerson。在这两个UserForms中,用户可以输入一个字符串,并在excel-database-cells中搜索该字符串。如果此字符串存在于其中一个搜索单元格中,则应将该公司的所有信息返回给UserForm。与人一样。在我的工作簿中,我有一张公司的表格和一张在公司工作的人员的表格。

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

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. 运行时错误' 91' :对象变量或未设置块变量
  3. 运行时错误' 51' :内部错误
  4. 运行时错误' 424' :需要对象
  5. 运行时错误' 424' :需要对象'可能是' 51'
  6. 运行时错误' 424' :需要对象'可能是' 51'
  7. 如果我再次使用了workbooks.Open-Method,我收到错误消息,该工作簿已经打开...问题是要将信息恢复为单词我还需要引用一个打开的,但没有命名或保存word文档(" document1")。

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

3 个答案:

答案 0 :(得分:0)

在Words VBA-editor中添加对“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"

答案 1 :(得分:0)

“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”对象没有属性Application。

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

  5. 设置xlWB = oxl.Workbooks(“Database_Rechnungen.xlsm”)< - 这是错误的。

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

  7. 您的电话应如下所示:

    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
    

答案 2 :(得分:0)

我找到了办法:

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

每当我在我的单词模块中使用xlWB时,它指的是打开的工作簿。 :)

谢谢Kiroshiro,因为你带我了解这个想法:)