AW: Excel in Word - Zeilen trennen
21.10.2014 17:28:45
fcs
Hallo Studyy,
nachfolgend ein Makro mit entsprechenden Einfüge-/Kopier-Aktionen.
Ich hoffe du kannst es in dein vorhandenes Makro integrieren.
Gruß
Franz
'Erstellt unter Excel 2010
Sub Daten_nach_Word()
Dim wks As Worksheet
Dim Zeile As Long, Zeile1 As Long, Zeile2 As Long
Dim wdPasteOption As Long
Dim rngData As Range
Dim strUeberschrift As String
Dim wdApp As Object 'Word.Application
Dim wdDoc As Object 'Word.Document
Set wks = ActiveSheet
'Word-Anwendung kreieren
Set wdApp = VBA.CreateObject("Word.Application")
wdApp.Visible = True
'neues Dokument anlegen
Set wdDoc = wdApp.Documents.Add(Template:="D:\Test\TestDoc.docx")
'Einfügeposition selektieren
wdDoc.Range(wdDoc.Characters.Count - 1, wdDoc.Characters.Count - 1).Select
wdPasteOption = 1 'DataType für PasteSpecial-Aktion in Word _
9 = wdPasteEnhancedMetafile (Grafik) _
0 = wdPasteOLEObject (Excel-Tabellenobject) _
1 = wdPasteRTF (Rich-Text-Format) _
10 = wdPasteHTML (HTML-Format)
Zeile1 = 1: Zeile2 = 0 'Zeilenzähler für Datensätze zurücksetzen
With wks
'Zeilen in Exeltabelle abarbeiten
For Zeile = 1 To .UsedRange.Row + .UsedRange.Rows.Count
If .Cells(Zeile, 1).Text "" And .Cells(Zeile, 2).Text = "" Then
'Hauptüberschrift
strUeberschrift = .Cells(Zeile, 1).Text
If Zeile2 > 0 Then
Set rngData = .Range(.Cells(Zeile1, 1), .Cells(Zeile2, 8))
rngData.Copy
wdApp.Selection.PasteSpecial Link:=False, DataType:=wdPasteOption, _
Placement:=0, DisplayAsIcon:=False 'Placement: 0 =wdInLine
wdApp.Selection.TypeParagraph
End If
'Hauptüberschrfit einfügen
wdApp.Selection.TypeParagraph
wdApp.Selection.TypeText Text:=strUeberschrift
wdApp.Selection.TypeParagraph
Zeile1 = Zeile + 1: Zeile2 = 0 'Zeilenzähler für Datensätze neu setzen
ElseIf .Cells(Zeile, 1).Text = "" And .Cells(Zeile, 2).Text = "" Then
'Zeile nach letzten Daten
If Zeile2 > 0 Then
'Zellbereich mit Datensätzen setzen und kopieren
Set rngData = .Range(.Cells(Zeile1, 1), .Cells(Zeile2, 8))
rngData.Copy
wdApp.Selection.PasteSpecial Link:=False, DataType:=wdPasteOption, _
Placement:=0, DisplayAsIcon:=False ' Placement: 0 =wdInLine
wdApp.Selection.TypeParagraph
End If
Else
'Prüfen, ob Unterüberschrift oder Datensatz
Select Case .Cells(Zeile, 2) 'Text in Spalte B
Case "Adresse", "Ort", "Name", "Nummer"
'Unterüberschrift
strUeberschrift = .Cells(Zeile, 2).Text
If Zeile2 > 0 Then
'Zellbereich mit Datensätzen setzen und kopieren
Set rngData = .Range(.Cells(Zeile1, 1), .Cells(Zeile2, 8))
rngData.Copy
wdApp.Selection.PasteSpecial Link:=False, DataType:=wdPasteOption, _
Placement:=0, DisplayAsIcon:=False 'Placement: 0 =wdInLine
wdApp.Selection.TypeParagraph
End If
'Unterüberschrfit einfügen
wdApp.Selection.TypeText Text:=strUeberschrift
wdApp.Selection.TypeParagraph
Zeile1 = Zeile + 1: Zeile2 = 0 'Zeilenzähler für Datensätze neu setzen
Case Else
'Datensatzzeile
Zeile2 = Zeile
End Select
End If
Next
End With
wdApp.Activate
Set wdApp = Nothing: Set wdDoc = Nothing: Set wks = Nothing: Set rngData = Nothing
Application.CutCopyMode = False
End Sub