2017-09-06 195 views
0

我想在Word文檔的seartain BOOkmark中插入Excel文件而不打開Excel,當Word文檔打開時自動插入。如何複製和粘貼excel word到單詞vba

1.我打算首先打開一個打開的文件對話框,彈出一個窗口。而我的代碼如下:(但只在Excel VBA使用Word不起作用VBA我應該怎麼更改代碼,這樣我可以在Word中做到這一點???)

Sub openfile() 
Dim intChoice As Integer 
Dim strPath As String 
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False 
intChoice = Application.FileDialog(msoFileDialogOpen).Show 
If intChoice <> 0 Then 
strPath = Application.FileDialog(_ 
msoFileDialogOpen).SelectedItems(1) 
End If 
End Sub 
  • 然後我做了一個複製和粘貼底部的代碼如下:(它也只工作當升在Excel中的代碼是如何改變字VBA?)

    Sub CopyWorksheetsToWord() 
    Dim wdApp As Word.Application, wdDoc As Word.Document, ws As Worksheet 
    Application.ScreenUpdating = False 
    Application.StatusBar = "Creating new document..." 
    Set wdApp = New Word.Application 
    Set wdDoc = wdApp.Documents.Add 
    For Each ws In ActiveWorkbook.Worksheets 
    
    ws.UsedRange.Copy 
    wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter 
    wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.Paste 
    Application.CutCopyMode = False 
    wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter 
    If Not ws.Name = Worksheets(Worksheets.Count).Name Then 
        With wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range 
         .InsertParagraphBefore 
         .Collapse Direction:=wdCollapseEnd 
         .InsertBreak Type:=wdPageBreak 
        End With 
        End If 
        Next ws 
        Set ws = Nothing 
        Application.StatusBar = "Cleaning up..." 
        With wdApp.ActiveWindow 
        If .View.SplitSpecial = wdPaneNone Then 
        .ActivePane.View.Type = wdNormalView 
        Else 
        .View.Type = wdNormalView 
        End If 
        End With 
        Set wdDoc = Nothing 
        wdApp.Visible = True 
        Set wdApp = Nothing 
        Application.StatusBar = False 
        End Sub 
    
  • +2

    您的代碼缺乏基本邏輯。首先,VBA只能在打開MS Office文檔的情況下運行。哪一個?在運行代碼之前,您無法打開對話框來選擇文檔。接下來,如果你想從Word打開Excel,你必須先運行Word,然後創建一個Excel應用程序。最後,如果你想從對話框中選擇Excel工作簿,你可以從Word中完成。在您將其提交給其他人審查之前,您應該將這些順序納入您的代碼。至少,你的意圖將會/應該清楚。 – Variatus

    +1

    @ Variatus - 我想你可能會過度複雜化。 OP聲明「Word打開時」。這告訴我他們想要在打開的事件'Document_Open()'中彈出一個文件選擇框,用不可見的Excel抓取Excel數據並將其插入到打開的Word文檔中。他們甚至給他們的代碼位,並表示它在Excel中工作,但不是Word。 –

    +1

    @Variatus我認爲Leila在這裏需要的僅僅是一段代碼片段,它可以完成同樣的事情,但是可以在word文件中工作:它可以打開給定的excel文件(打開但用戶不可見),並從excel文件複製內容到當前的單詞文件。上面的代碼已經做到了,但它運行在excel文件中,並從excel文件中讀取內容,將其複製到給定的文件中。 – Manuela

    回答

    4

    這應該得到y你開始了。將下面的代碼放在'ThisDocument'模塊中的Word文檔中。

    enter image description here


    添加Excel引用到您的Word VBA。在VBA編輯器中,轉到工具然後參考。選中Microsoft Excel 14.0對象庫旁邊的複選框。

    enter image description here


    Private Sub Document_Open() 
        Dim intChoice As Integer 
        Dim strPath As String 
    
        Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False 
        intChoice = Application.FileDialog(msoFileDialogOpen).Show 
    
        If intChoice <> 0 Then 
         strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1) 
        End If 
    
        CopyWorksheetsToWord (strPath) 
    End Sub 
    
    
    Function CopyWorksheetsToWord(filePath As String) 
        Dim exApp As Excel.Application 
        Dim exWbk As Excel.Workbook 
        Dim exWks As Excel.Worksheet 
        Dim wdDoc As Word.Document 
    
        Application.ScreenUpdating = False 
        Application.StatusBar = "Creating new document..." 
    
        Set wdDoc = ActiveDocument 
        Set exApp = New Excel.Application 
        exApp.Visible = False 
    
        Set exWbk = exApp.Workbooks.Open(filePath) 
    
        For Each exWks In exWbk.Worksheets 
         exWks.UsedRange.Copy 
         wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter 
         wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.Paste 
         exApp.CutCopyMode = False 
         wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter 
         If Not exWks.Name = exWbk.Worksheets(exWbk.Worksheets.Count).Name Then 
          With wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range 
           .InsertParagraphBefore 
           .Collapse Direction:=wdCollapseEnd 
           .InsertBreak Type:=wdPageBreak 
          End With 
         End If 
        Next exWks 
    
        Application.StatusBar = "Cleaning up..." 
    
        Set exWks = Nothing 
        exWbk.Close 
        Set exWbk = Nothing 
        Set exApp = Nothing 
    
        Application.StatusBar = False 
        Application.ScreenUpdating = True 
    End Function 
    

    1. 文件另​​存爲啓用宏的文件(.DOCM)
    2. 關閉Word文件
    3. 打開Word文件和代碼運行。首先你會看到一個文件打開框來選擇Excel文件。

    測試過的代碼,但沒有錯誤檢查。根據註釋


    更新

    書籤可以通過名稱使用以下語法位於:wdDoc.Bookmarks("Bookmark2").Range

    在這種情況下,我插入書籤,並標爲Bookmark2

    更新功能代碼:

    Function CopyWorksheetsToWord(filePath As String) 
        Dim exApp As Excel.Application 
        Dim exWbk As Excel.Workbook 
        Dim exWks As Excel.Worksheet 
        Dim wdDoc As Word.Document 
        Dim bmRange As Range 
    
        Application.ScreenUpdating = False 
        Application.StatusBar = "Creating new document..." 
    
        Set wdDoc = ActiveDocument 
        Set exApp = New Excel.Application 
        exApp.Visible = False 
    
        Set exWbk = exApp.Workbooks.Open(filePath) 
    
        For Each exWks In exWbk.Worksheets 
         exWks.UsedRange.Copy 
    
         Set bmRange = wdDoc.Bookmarks("Bookmark2").Range 
         bmRange.Paste 
    
         exApp.CutCopyMode = False 
         wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter 
         If Not exWks.Name = exWbk.Worksheets(exWbk.Worksheets.Count).Name Then 
          With wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range 
           .InsertParagraphBefore 
           .Collapse Direction:=wdCollapseEnd 
           .InsertBreak Type:=wdPageBreak 
          End With 
         End If 
        Next exWks 
    
        Application.StatusBar = "Cleaning up..." 
    
        Set exWks = Nothing 
        exWbk.Close 
        Set exWbk = Nothing 
        Set exApp = Nothing 
    
        Application.StatusBar = False 
        Application.ScreenUpdating = True 
    End Function 
    

    由於您循環瀏覽工作表,您可能需要使用格式化以及如何堆疊文檔中的每個部分,但這應該讓您繼續。

    +0

    謝謝你的幫助!我可以再問一件事嗎?根據書籤的名稱如何將表粘貼到書籤中? –

    +0

    @LeilaDai - 見編輯:-) –

    +0

    非常感謝您的幫助! –