2017-12-06 5 views
0

Ich verwende ein Makro in VBA für den Export von Daten aus Excel in Word.VBA-Makro - Exportieren Sie Tabellendaten aus Excel-Datei nach Word und erstellen Sie einen Abschnitt für jedes Arbeitsblatt

Sub ExportToWord() 
    Set obj = CreateObject("Word.Application") 
    obj.Visible = True 
    Set newobj = obj.Documents.Add 

    For Each ws In ActiveWorkbook.Sheets 
     ws.UsedRange.Copy 
     newobj.ActiveWindow.Selection.PasteExcelTable False, False, False 
     newobj.ActiveWindow.Selection.InsertBreak Type:=7 
    Next 
     newobj.ActiveWindow.Selection.TypeBackspace 
     newobj.ActiveWindow.Selection.TypeBackspace 

    obj.Activate 
    newobj.SaveAs Filename:=Application.ActiveWorkbook.Path & "\OLD\" & Split(ActiveWorkbook.Name, ".")(0) 
End Sub 

Alle Daten und Tabellen-Layout werden in Word abgerufen werden. Die Prozedur kopiert usedRange jedes Worksheets in Word und Seitenumbrüche nach jedem Arbeitsblatt.

Ich möchte dieses Skript aktualisieren, indem Sie den Namen des Arbeitsblatts kurz vor dem Kopieren/Einfügen von Daten für jedes Arbeitsblatt setzen.

Können Sie mir sagen, wie das geht?


Nach dem Code aktualisiert:

Sub export_workbook_to_word() 
    Dim sheetName As String 
    Set obj = CreateObject("Word.Application") 
    obj.Visible = True 
    Set newobj = obj.Documents.Add 

    For Each ws In ActiveWorkbook.Sheets 
     sheetName = ws.Name 
     ws.UsedRange.Copy 
     newobj.ActiveWindow.TypeText ws.Name 
     newobj.ActiveWindow.Selection.PasteExcelTable False, False, False 
     newobj.ActiveWindow.Selection.InsertBreak Type:=7 

    Next 
     newobj.ActiveWindow.Selection.TypeBackspace 
     newobj.ActiveWindow.Selection.TypeBackspace 

    obj.Activate 
    newobj.SaveAs Filename:=Application.ActiveWorkbook.Path & "\" & Split(ActiveWorkbook.Name, ".")(0) 

End Sub 

I erhalten, um den Fehler Object doesn't support this property or method auf der Linie newobj.ActiveWindow.TypeText ws.Name

Könnten Sie mir bitte helfen?

Antwort

0

In der Tat Die Linie

newobj.ActiveWindow.Selection.InsertBreak Type:=7 

fügt einen Seitenumbruch: 7 entspricht wdPageBreak. Ich habe einen Breakout der nächsten Seite eingefügt, indem ich 7 zu 2 änderte (entspricht wdSectionBreakNextPage).

Abschnitte in Word haben keine Namen. Ich füge den Namen des Arbeitsblattes über der Tabelle ein:

newobj.ActiveWindow.Selection.TypeText sheetName 
    newobj.ActiveWindow.Selection.Style = ActiveDocument.Styles(-2) 
    newobj.ActiveWindow.Selection.TypeParagraph 
0

Versuchen, diese zu Erklärungen:

Dim sheetName as String 

Und dies unter der For Each-Anweisung

sheetName = ws.Name 
    newobj.ActiveWindow.TypeText (sheetName) 
+0

Hallo, Danke für die Antwort, aber es funktioniert nicht. Ich habe den Fehler "ungültiger Qualifier". – coeurdange57

+0

Wenn 'sheetName' eine' Zeichenkette' ist, müssen Sie 'sheetName = ws.Name' anstelle von' sheetName.Text = ws.Name' verwenden. (Oder benutzen Sie einfach 'newobj.ActiveWindow.TypeText ws.Name'.) – YowE3K

+0

Ich weiß nicht, wo ich das hinstellen muss. Wenn ich das vor dem nächsten setze, erhalte ich einen Fehler. Kannst du mir bitte Helfen? – coeurdange57

Verwandte Themen