2017-09-06 2 views
0

Word 문서가 열릴 때 Excel이 열리지 않고 Word 문서의 seartain BOOkmark에 Excel 파일을 삽입하고 싶습니다.단어 vba로 단어를 Excel로 복사하여 붙여 넣는 방법

1. 열린 파일 대화 상자가 맨 아래에있는 팝업 창을 만들려고합니다. 을 (그러나 나는 단어에 그것을 할 수 있도록 만 ??? 내가 코드를 변경하는 방법 단어 VBA 작동하지 않습니다 엑셀 VBA에서 작동)

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 
  • 다음

    나는 코드는 다음과 같다 복사 및 붙여 넣기 아래 제작 : 은 (또한 엑셀에서 L 코드가 어떻게 워드 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가 열릴 때"를 나타냅니다. 즉, 파일 선택 상자를 팝업하고, 보이지 않는 Excel로 Excel 데이터를 잡고, 열려있는 Word 문서에 삽입하는 코드 인 Open_event (Document_Open())의 코드를 원합니다. 심지어 코드 비트를 제공하고 Excel에서는 작동하지만 Word에서는 작동하지 않는다고 명시했습니다. –

    +1

    @Variatus Leila가 필요로하는 것은 똑같은 일을하지만 단어 파일에서 작동하는 코드 조각입니다. 주어진 Excel 파일 (사용자에게는 보이지 않지만 열려 있음)을 열고 Excel 파일의 내용을 복사 할 수 있습니다 현재 단어 파일에. 위의 코드는 이미 수행하지만 Excel 파일에서 실행되고 Excel 파일의 내용을 읽어 지정된 단어 파일에 복사합니다. – Manuela

    답변

    4

    그러면 y ou가 시작되었습니다. 아래 코드를 Word 문서의 'ThisDocument'모듈에 삽입하십시오.

    enter image description here


    은 당신의 말씀을 VBA로 엑셀에 대한 참조를 추가합니다. VBA 편집기에서 도구 및 참조로 이동하십시오. 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 
    

    매크로 사용 파일 (.docm)
  • 닫기 워드 파일
  • 열기 워드 파일을 실행합니다 코드와
    1. 저장 파일

      enter image description here

      . 먼저 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

    도움 주셔서 감사합니다. –