首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Mac上使用Excel保存Word文档?

如何在Mac上使用Excel保存Word文档?
EN

Stack Overflow用户
提问于 2020-09-25 21:57:59
回答 4查看 1.2K关注 0票数 0

我正在尝试运行Excel子程序来保存Word文档。

语言版本: Word/Excel版本16.41

操作系统: Mac 10.14.6

我试过:(文件/文件)

(https://answers.microsoft.com/en-us/msoffice/forum/all/excel-vba-macro-to-save-as-basic-word-document/df78bf58-ec21-4502-abfe-bc3df1fca7ae)

我从零开始在不同的计算机和操作系统上工作。我现在使用Majave 10.14.6和Word/Excel版本16.41。我能够打开工具--引用--并选择单词库,但是现在引用没有高亮显示,也是不可点击的。(在此之前也是短暂的)

我遇到:

运行时错误-2146959355 (80080005)自动化错误。

需要调试的行:

代码语言:javascript
运行
复制
Set wdApp = New Word.Application
代码语言:javascript
运行
复制
Option Explicit

Sub CreateBasicWordReportEarlyBinding()

    Dim wdApp As Word.Application

    Set wdApp = New Word.Application
    With wdApp

        .Visible = True
        .Activate
        .Documents.Add
       
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphCenter
            .BoldRun
            .Font.Size = 18
            .TypeText "Best Movies Ever"
            .BoldRun
            .Font.Size = 12
            .TypeText vbNewLine
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
            .TypeParagraph

        End With

        Range("A2", Range("A2").End(xlDown).End(xlToRight)).Copy

        .Selection.Paste

        .ActiveDocument.SaveAs2 Environ("UserProfile") & "\Desktop\MovieReport.docx"

        .ActiveDocument.Close

        .Quit

    End With

   Set wdApp = Nothing
End Sub
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-09-27 16:11:53

几年来,在Mac版本的Office上使用COM自动化(这就是New Word.Application“、CreateObject等正在做的事情)一直存在问题。你可能在其他地方也看到过类似的问题。

问题在于,并不是每个人都会遇到这些问题,这意味着这些问题可能是由配置问题造成的。通常的嫌疑应该是“与Mac沙箱有关”。但是,我从未见过包括Microsoft在内的任何一个支持文档,它告诉您如何解决这个问题。我已经在Mac的干净安装上完成了Office的干净安装,并遇到并报告了这些问题,我认为软件作者应该真正地调查这个问题,并提供修复或解决办法。

这里,(相同的Office版本,但Mac 10.15.6)我发现.

问题有一点不同,取决于您正在运行或试图自动化的应用程序。

在Excel中,尝试使用Word.Application类型的早期绑定对象总是失败的.所以你不能用

代码语言:javascript
运行
复制
Dim wdApp As New Word.Document

代码语言:javascript
运行
复制
Dim myApp As Word.Document
Set myApp = New Word.Document

(不管您是否在VBE工具中定义了正确的引用->引用。否则,您将看到编译时错误,并且VBA实际上不会运行代码)。

所以你需要

代码语言:javascript
运行
复制
Dim wdApp As Object

并使用CreateObject (如果Word尚未运行或需要Word的新实例(至少在Windows上)或GetObject (当您想连接到Word的一个/现有实例时)。

然而,在这里,我发现CreateObject有时只起作用,而且我还没有弄清楚原因。如果还没有启动,它总是会启动Word,但有时它会等待Word开始,并返回对单词对象的引用,有时则不会。测试并不是完全确定的,但实际上它似乎最大限度地“每隔一次在Excel会话中调用它”,在我看来,它似乎保留了一些它不应该使用的状态信息,并且认为它“知道”WOrd已经启动,而实际上它还没有启动。

相反,GetObject似乎工作正常。通常,如果Word尚未启动,则返回错误,但如果已启动,则返回对Word对象的引用。所以我试着用这样的方法

代码语言:javascript
运行
复制
Dim wdApp As Object
On Error Resume Next
Set wdApp = CreateObject("Word.Application")
Err.Clear
If wdApp Is Nothing Then
  Set wdApp = GetObject(,"Word.Application")
End If

但是,有时我仍然会遇到错误,429 ActiveX组件无法在GetObject行中创建对象--在这些情况下,CreateObject似乎没有等待Word启动。

因此,我研究了不使用COM开始单词的可能性。有几种方法可以尝试在Mac上这样做,但最简单的方法是使用MacScript函数来运行一些AppleScript。这是最简单的,因为所有的代码都可以放在VBA /函数中--您不需要任何外部文件。

实际上,由于Mac沙箱的问题,MacScript是不受欢迎的。您实际上应该使用AppleScriptTask来代替。但是MacScript目前似乎在做这个工作,只是它总是会引发一个VBA错误(而IMO不应该这样),所以我们不得不处理VBA错误捕获。

在这里,下面的代码总是有效的。就目前而言。

代码语言:javascript
运行
复制
Dim theApp As Object
On Error Resume Next
MacScript "tell application id ""com.microsoft.Word"" to activate"
Err.Clear
'On Error Goto problem ' you need to set this up
Set theApp = GetObject(,"Word.Application")
' just be careful
If theApp Is Nothing Then
  Debug.Print "theApp Is Nothing"
Else
  Debug.Print TypeName(theApp)
  ' get on with what you need to do
End If

另外一件我非常努力的事情是,看看我是否可以利用早期绑定(对于Intellisense等等)。通过在适当的点添加此代码:

代码语言:javascript
运行
复制
Dim myApp As Word.Application

Set myApp = theApp
'or
Set myApp = theApp.Application

但那没起作用。所以我似乎被后期绑定缠住了。

如果发现不能使用MacScript,则可以使用AppleScriptTask。最简单的是,您将一个名为myStartWordScript.scpt的文本文件放在用户的“库”中的一个文件夹中。

代码语言:javascript
运行
复制
~/Library/Application Scripts/com.microsoft.Excel

我用了这样的剧本:

代码语言:javascript
运行
复制
on myStartWord(dummy as text)
    tell application id "com.microsoft.Word"
        activate
    end tell
    return "Word has started"
end myStartWord

然后,您可以丢弃一些错误读取器,并使用如下的VBA代码:

代码语言:javascript
运行
复制
Dim theApp As Object
Debug.Print AppleScriptTask("myStartWordScript","myStartWord","")
'On Error Goto problem ' you need to set this up
Set theApp = GetObject(,"Word.Application")
' just be careful
If theApp Is Nothing Then
  Debug.Print "theApp Is Nothing"
Else
  Debug.Print TypeName(theApp)
  ' get on with what you need to do
End If
票数 0
EN

Stack Overflow用户

发布于 2020-09-26 16:23:48

请参阅自由流的评论,它应该作为答案发布。在VBE中,选择工具>引用> Microsoft 16.0对象库。

票数 0
EN

Stack Overflow用户

发布于 2020-09-26 16:42:25

有两种方法可以从Excel中自动生成word:

  1. 早期绑定:添加对microsoft对象库的引用。
  2. 延迟绑定:将变量声明为对象。

在您的例子中,我将使用早期绑定来访问intellisense.在这里输入图像描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64071777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档