如何从MS Word VBA打开Excel工作簿

如何从MS Word VBA打开Excel工作簿,excel,vba,macos,ms-word,Excel,Vba,Macos,Ms Word,关于StackOverflow,这个问题还有其他的变体,但它们都是几年前的问题,它们的答案似乎引用了VBA的旧版本。。。或者至少他们给了我一些我无法解决的错误。这是我的代码,通过MS Visual Basic编辑器7.1版编写,运行在Mac OS Mojave 10.14.5上。Word和Excel都是16.26版。下面的每个子项都是不同的尝试。我是VBA新手,所以尝试了很多我不太理解的东西。每个子组件都会给出不同的错误: Sub OpenExcelFile1() Dim oExcel

关于StackOverflow,这个问题还有其他的变体,但它们都是几年前的问题,它们的答案似乎引用了VBA的旧版本。。。或者至少他们给了我一些我无法解决的错误。这是我的代码,通过MS Visual Basic编辑器7.1版编写,运行在Mac OS Mojave 10.14.5上。Word和Excel都是16.26版。下面的每个子项都是不同的尝试。我是VBA新手,所以尝试了很多我不太理解的东西。每个子组件都会给出不同的错误:

Sub OpenExcelFile1()
    Dim oExcel As Excel.Application
    Dim oWB As Excel.Workbook
    Dim granted as Boolean
    Debug.Print "a"

    Set oExcel = New Excel.Application
    granted = GrantAccessToMultipleFiles(Array("/users/sarah/workspace/report-writer/"))
    Debug.Print "b"
    Set oWB = oExcel.Workbooks.Open("/Users/sarah/workspace/report-writer/test.xlsx", ReadOnly:=True)
    Debug.Print "c"
End Sub
上面的OpenExcelFile1在“a”和“b”之间挂起约一分钟,然后给出
运行时错误-2146959355(80080005)':自动错误

Sub OpenExcelFile2()
    Dim oWB As Excel.Workbook
    Dim granted As Boolean
    granted = GrantAccessToMultipleFiles(Array("/Users/sarah/workspace/report-writer/"))
    Debug.Print "d"

    Set oWB = Excel.Workbooks.Open("/Users/sarah/workspace/report-writer/test.xlsx", ReadOnly:=True)
    Debug.Print "e"
End Sub
上面的OpenExcelFile2到达“d”,然后给出运行时错误“430”:类不支持自动化或不支持预期的接口。

Sub OpenExcelFile3()
    Dim oWB As Excel.Workbook
    Dim granted As Boolean
    granted = GrantAccessToMultipleFiles(Array("/Users/sarah/workspace/report-writer/"))
    Debug.Print "f"

    Set oWB = Excel.Application.Workbooks.Open("/Users/sarah/workspace/report-writer/test.xlsx", ReadOnly:=True)
    Debug.Print "g"
End Sub
OpenExcelFile3到达“f”,然后打印与OpenExcelFile2相同的错误

Sub OpenExcelFile4()
    Dim oWB As Excel.Workbook
    Dim granted As Boolean
    granted = GrantAccessToMultipleFiles(Array("/Users/sarah/workspace/report-writer/"))
    Debug.Print "h"
    Set oWB = Excel.Application.WorkbookOpen("/Users/sarah/workspace/report-writer/test.xlsx", ReadOnly:=True)
    Debug.Print "i"
End Sub
OpenExcelFile4到达“h”,然后打印与OpenExcelFile2和OpenExcelFile3相同的错误

引用的test.xlsx位于指定位置,具有777权限

我已安装(选中?使用?引用?)以下六个引用: *Visual Basic For Applications *Microsoft Word 16.0对象库 *Microsoft Forms 2.0对象库 *Microsoft Office 16.0对象库 *Microsoft Excel 16.0对象库 *Microsoft Visual Basic for Applications Extensibility 5.3

我错过了什么?
多谢各位

您可能缺少对支持从Word自动化Excel的DLL的引用。尝试通过进入VBA编辑器添加引用,然后单击
Tools>References
,然后向下滚动列表到
Microsoft Excel 16.0对象库
。您的版本可能会有所不同;我(显然)在Office v16上。

找到了一个我不喜欢的解决方案:

  • 使用Windows,而不是Mac
  • 删除
    GrantAccessToMultipleFiles
    行,因为此功能仅在Mac版本的VBA中存在
  • 删除对“Microsoft Forms 2.0对象库”的引用(我在Windows上找不到它。如果它在其他人的机器上,可能是无害的。)
  • 我将此作为“解决方案”发布,因为这些修改允许我对方法OpenExcelFile1、OpenExcelFile2和OpenExcelFile3执行基本的打开excel文件操作。最后一个,OpenExcelFile4不起作用。Windows中似乎也不存在应用程序.WorkbookOpen()。这已在Windows 10 Pro v 1903 build 18362.175(MS VBA版本7.1和Office版本16)上进行了测试,并可正常工作


    我不喜欢这个解决方案,因为我正在研究的具体项目是Mac primary。如果其他人有一个Mac友好的解决方案,我很想看看。

    哪个版本的Office?FWIW在Mac最新版本的Office应用程序之间的“自动化”似乎存在重大问题。见Word和Excel均为16.26版;我想那也是办公室版的。我看到了一些关于回滚到早期版本Office的注释,以及其中一个最新版本中的bug,但我看到的一切都是一年前的事情。。。当然,微软更经常地修补他们的主要缺陷。。。。正确的?拜托?有些东西会被修复,其他的不会…哈哈“微软肯定会更频繁地修补他们的主要错误…对吗?拜托?”FWIW,我也尝试过用Excel VBA中的类似代码来打开Word文档。错误是不同的,但最终结果(失败)是相同的:SNAFU。我检查了Excel 16 Obj库、VB应用程序扩展性、VB应用程序、Word 16 Obj库、Forms 2 Obj库和Office 16 Obj库。将添加对question.Application.Workbooks.Open的引用列表是正确的语法。Excel没有Application.WorkbookOpen方法。安装了Office VBA的每台计算机上都应提供Microsoft Forms 2.0库。但是如果您没有使用UserForms,那么引用是否被激活并不重要。