【问题标题】:Word for Mac - Error while calling Excel.Application.Workbooks.Open runtime error -2146959355 (80080005)Word for Mac - 调用 Excel.Application.Workbooks.Open 运行时错误时出错 -2146959355 (80080005)
【发布时间】:2021-05-14 14:46:16
【问题描述】:

我正在尝试在 Word 中打开一个 Excel 文件以读取某些单元格的值并对 word 中的新文件做一些魔术。

我使用 Microsoft Windows 多次做过的事情。现在我无法使用 Windows 并且必须使用我的私人计算机,我在使用我在 Mac 上编写的文件时遇到了一些问题。

我在两个操作系统上使用相同的版本:Office Word 2016,但在我的 Mac 中运行宏时出现错误。

我得到了一个

运行时错误,代码为 -2146959355 (80080005)。

代码很大,但我尝试剥离以找到错误。不用说,我已经达到了剥离更多等于删除宏的地步。所以,这是给我错误的代码。而且我无法理解原因。

Sub AutoOpen()

    Dim objExcel As New Excel.Application
    Dim exWb As Excel.Workbook
    Dim excelFile As String
    excelFile = ActiveDocument.Path & Application.PathSeparator & "file.xlsx"

    If (Dir(excelFile) <> "") Then
        Set exWb = objExcel.Workbooks.Open(excelFile)
        exWb.Close
    Else
        MsgBox ("File not found")
    End If
End Sub

错误是指exWbSet

同样的代码在 Windows 中运行

【问题讨论】:

  • Debug.Print excelFile 返回什么?不确定,但possibly helpful
  • 该变量包含正确的路径:/Volumes/USB/file.xlsx(我曾经检查过MsgBox
  • 那么如果你完全删除Dir,文件会打开吗?
  • 不。我也尝试过删除 If-Else 块...(在此之前更改文件名并且正确调用了 Else 部分)
  • VBA 可访问的位置是 ~/Library/Group Containers/UBF8T346G9.Office/。 (请参阅macadmins.software/docs/UserContentIn2016.pdf)这只是您将面临的许多问题之一,因为 Word for Mac 缺少某些功能,例如建筑模块。您在 Windows 中可能依赖的其他库将丢失,例如XML,脚本。您可能还会发现此链接有帮助:docs.microsoft.com/en-us/office/vba/api/overview/office-mac

标签: excel vba macos ms-word


【解决方案1】:

问题在于,在 Mac 上,通过 New 或 CreateObject 创建新的 COM 对象目前被破坏了。或者至少,对于一些全新安装 Mac OS 和 Office 的用户而言,它已被破坏。

如果你能把你的代码再固定一点,我想你会看到这个错误发生在“Dim objExcel As New Excel.Application”之后的第一个可执行行中。

多年来,此问题已多次向 Microsoft 报告,但均未得到明显回应。我的猜测是他们的开发人员。团队对他们的 Mac OS 配置进行了历史性的更改,他们已经忘记了这意味着他们没有遇到这个问题,或者在 Mac 上使用 COM 具有专业知识的人已经离开,微软正在拖延,直到他们能够恢复一些相关的专业知识。

似乎并没有任何明显的 Microsoft 文档。


更新。

在 Mac Word 的 16.34 版中,情况似乎发生了一些变化。

GetObject 还是没用。

如果你这样做了

Dim app as Object
Set app = CreateObject("Excel.Application")

app 不再是 Nothing。不幸的是,如果你这样做了

类型名称(应用程序)

您得到“WorkBook”,这意味着代码仍未返回正确类型的对象。

但是在这里,我至少现在可以做类似的事情

If UCase(Typename(app)) = "WORKBOOK" Then
  Set app = App.Application
End If

【讨论】:

  • 我同意 COM 自动化已被破坏(至少在某些情况下)。但是我也遇到了沙盒的问题(如 cmets 中所述)。由于 OP 没有对这两个建议做出回应,因此很难知道主要问题是什么。这种贡献可以独立存在,作为一个答案,即使它可能不是“答案”;但是我编辑的评论不属于该网站。
  • 我不认为是这种情况,是的,它可以被破坏,但问题不在于创建新对象,因为如果我在没有打开文件的情况下使用“Dim”检查警告框正确,即使在初始化新对象之后也是如此。问题在于打开文件。作为对我的问题的最后评论之一说
  • @Gianmarco:我之前无法发表评论,但您可能是对的。最近的更新可能改变了一些事情 - 请参阅我更新的文本。
【解决方案2】:

不是 Mac 用户,因此无法直接测试。根据微软的说法,您需要授予要打开的文件的权限,因为这些文件对于在沙箱中运行的 Office 应用程序是“外部的”。见这里:https://docs.microsoft.com/en-us/office/vba/office-mac/grantaccesstomultiplefiles

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2020-11-01
    • 2023-01-03
    • 1970-01-01
    相关资源
    最近更新 更多