2013-03-11 59 views
0

我已經編寫了一些VBA代碼,用於在單擊Excel單元格時將數據從Excel複製到Word。過程如下:VBA - 將Excel表複製到Word - 在PC上工作,在Mac上失敗

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都在那裏?任何人?

在此先感謝。

+0

您使用的是哪種Office版本的Mac版本? – aqua 2013-03-12 21:04:46

+0

我目前正在使用Windows 7和Office 2007,我相信我的同事正在使用Office 2011 for MAC – IIIOXIII 2013-03-12 22:52:48

回答

1

問題似乎是wrdApp.Activate的位置,它阻止Excel執行復制和Word執行粘貼。在這裏,在您的代碼的減少版本中,我可以通過移動語句以使其位於PasteExcelTable行之前,進行復制/粘貼工作。如果您不得不保留行的副本,問題在於(例如)在設置CutCopyMode之前立即激活Excel工作簿似乎不足以讓Excel正確執行Copy。 (順便說一下,我不是Mac VBA Guru!)

+0

謝謝您的回答。如果將來遇到類似的情況,這將會很有幫助,但是,我已經實施了一種解決方法,可以將複製/粘貼例程全部移除。 – IIIOXIII 2013-04-20 16:43:33

相關問題