简体   繁体   English

如何将excel复制并粘贴到带有单词vba的单词

[英]how to copy and paste excel to word with word vba

I want to insert the Excel file at the seartain BOOkmark in the Word doc without opening Excel, automatically inserted when the Word doc opens. 我想在不打开Excel的情况下将Word文件插入到Word doc中的seaotain BOOkmark,而在打开Excel doc时会自动插入Excel。

1.I'm thinking to make a pop up window with a open file dialog bottom firstly. 1.我正在考虑首先使弹出窗口底部带有一个打开的文件对话框。 And my code is following: (but it only work in excel VBA doesn't work in word VBA how should I change the code so that I can do it in word??? ) 我的代码如下:( 但是它仅在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
  1. Then I made a copy and paste bottom the code is as follows: (It also only work when l code it in excel how to change to word vba?) 然后我进行了复制并粘贴到底部,代码如下:( 它仅在l在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 

This should get you started. 这应该使您入门。 Place the code below in your Word document in the 'ThisDocument' module. 将下面的代码放在Word文档的“ ThisDocument”模块中。

在此处输入图片说明


Add Excel reference to your Word VBA. 将Excel引用添加到您的Word VBA。 In the VBA editor go to Tools and then References. 在VBA编辑器中,转到“工具”,然后转到“引用”。 Check the box next to Microsoft Excel 14.0 Object Library. 选中Microsoft Excel 14.0对象库旁边的框。

在此处输入图片说明


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. Save file as macro-enabled file (.docm) 将文件另存为启用宏的文件(.docm)
  2. Close word file 关闭word文件
  3. Open word file and the code will run. 打开Word文件,代码将运行。 First thing you'll see is a file open box to select the Excel file. 您会看到的第一件事是一个用于选择Excel文件的文件打开框。

Tested code but there is no error checking. 经过测试的代码,但没有错误检查。


Update per comment 每条评论更新

Bookmarks can be located by name using the following syntax: wdDoc.Bookmarks("Bookmark2").Range 可以使用以下语法按名称wdDoc.Bookmarks("Bookmark2").RangewdDoc.Bookmarks("Bookmark2").Range

In this case I inserted a bookmark and labeled it Bookmark2 在这种情况下,我插入了一个书签并将其标记为Bookmark2

Updated Function Code: 更新的功能代码:

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

Since your looping through sheets you'll probably need to play with formatting and how your stacking each section in the document but this should get you going. 由于遍历工作表,您可能需要使用格式设置以及如何堆叠文档中的每个部分,但这应该可以助您一臂之力。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM