VBA - 将Excel表复制到Word - 在PC上运行,在Mac上运行失败

时间:2013-03-11 22:10:25

标签: macos excel vba ms-word copy

我编写了一些代码VBA,当单击Excel单元格时,它会将数据从Excel复制到Word。过程如下:

1. Opens an already created word document, duplicates the word document, and then closes the original document; leaving open the copy (duplicate) for further modification.

2. The code then finds and replaces some placeholder values within the word document with values from the Excel document.

3. The code then deletes 2 different tables (1 at a time), row by row, and replaces each table (1 at a time) with a table copied from Excel.

4. The code then displays a message to the user that all has been completed and exits.

所有代码在我的电脑上完美运行,但在同事MAC上失败,说明"错误:4605 - 命令不可用"并且wrdApp.Selection.PasteExcelTable False, False, True代码行失败。

以下是代码:

Sub Copy2Word()

    Dim wrdApp As Object
    Dim tempDoc As Word.Document
    Dim mrgDoc As Word.Document
    Dim NumPay As Integer
    Dim cll As Excel.Range

    'GET NUMBER OF PAYMENTS SELECTED FOR USE BELOW
    NumPay = Notated.Cells(Data.Range("DV2").Value, Data.Range("DV3").Value).Value

    'GET LOCATION OF WORD FILE FROM USER
    FName = Application.GetOpenFilename
    If FName = False Then
        usrErr = 1
        GoTo ErrHnd
    End If

    'RECORD THE WORD FILE LOCATION ON HIDDEN SHEET FOR USE BY OTHER MACROS
    MergeData.Range("B2").Value = FName

    'CREATE WORD OBJECT
    On Error Resume Next
    Set wrdApp = GetObject(, "Word.Application")
    On Error GoTo 0
    If wrdApp Is Nothing Then
        Set wrdApp = CreateObject("Word.Application")
    End If

    'DISPLAY WORD APPLICATION
    On Error Resume Next
    wrdApp.Visible = True
    wrdApp.Activate
    On Error GoTo 0

    'OPEN THE (TEMPLATE) FILE
    wrdApp.Documents.Open Filename:=FName

    'SET A VARIABLE TO REFERENCE ACTIVE DOCUMENT (TEMPLATE)
    Set tempDoc = wrdApp.ActiveDocument

    'DUPLICATE THE DOCUMENT
    wrdApp.Documents.Add wrdApp.ActiveDocument.FullName

    'SET A VARIABLE TO REFERENCE THE NEW VERSION OF DOCUMENT
    Set mrgDoc = wrdApp.ActiveDocument

    'CLOSE THE ORIGINAL (TEMPLATE) VERSION OF DOCUMENT
    tempDoc.Close SaveChanges:=False

    'ACTIVATE THE NEW DOCUMENT
    mrgDoc.Activate

    'REPLACE PLACEHOLDER TEXT ITEMS WITH ACTUAL
    For Each cll In MergeData.Range(MergeData.Cells(1, 3).Address & ":" & MergeData.Cells(1, MergeData.Range("A1").End(xlToRight).Column).Address)
        If cll.Offset(1, 0).Value = "" Then
            repTx = cll.Value
       Else
            repTx = cll.Offset(1, 0).Value
        End If
        With mrgDoc.Content.Find
            .Text = cll.Value
            .Replacement.Text = repTx
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceAll
        End With
    Next cll

    'REPLACE TABLE 2 ON WORD DOC
    mrgDoc.Tables(2).Select
    For ii = 30 To 2 Step -1
        mrgDoc.Tables(2).Rows(ii).Delete
    Next ii
    wrdApp.Selection.TypeParagraph

    'COPY AND PASTE TABLE 1 FROM EXCEL TO WORD
    Application.CutCopyMode = False
    EO_DOC.Range("EO_TBL_INSCOPE_1").Copy
    wrdApp.Selection.PasteExcelTable False, False, True 

    ''''REMAINDER OF CODE AND COMPLETION CONFIRMATION TO USER''''

End Sub

我尝试了很多不同的东西,例如添加DoEvents等,看看它是否可以解决这个问题,但还没有找到解决方案。

那里有MAC专家的VBA吗?任何人吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题似乎是wrdApp.Activate的位置,它阻止Excel执行复制和Word执行粘贴。在这里,在代码的简化版本中,我能够通过移动语句使其复制/粘贴工作,使其紧接在PasteExcelTable行之前。如果您必须保留该行的副本,则问题是(例如)在设置CutCopyMode之前立即激活Excel工作簿似乎不足以让Excel正确执行复制。 (顺便说一下,我不是Mac VBA大师!)