Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

textformatierung in word durch Excel vba

Forumthread: textformatierung in word durch Excel vba

textformatierung in word durch Excel vba
12.08.2014 11:24:29
Knoof
Hallo,
Ich habe ein Programm(UserForm) welches durch einen Button Texte aus einer anderen Exceldatei, in ein Word dokument schreibt.
Das Problem ist nur das diese Texte nicht wirklich schön formatiert sind in Word.
Wie zum Beispiel bei einer Aufzählung mit bindestrichen wird der Text einfach untereinanders geklatscht ohne schöne abstände zum gedankenstrich.
Nun wollte ich euch Fragen ob es da möglichkeiten gibt dies von Excel aus zu steuern wie die Texte letztendlich in das Word dokument eingefügt werden.
Das Programm soll nämlich automatisiert Dokumente schreiben welche schon eine gewisse Textformatierung erfordern.
Für jede Antwort Dankbar :)
Gruß,
Knoof

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: textformatierung in word durch Excel vba
12.08.2014 16:32:57
fcs
Hallo Knoof,
man kann sehr viele Aktionen in Word per Makro steuern - auch von Excel aus - allerdings ist die Programmierung noch etwas schwieriger wegen der Komplexität der verschiedenen Objekte in Word.
Um sich das Leben etwas zu erleichtern sollten in dem Worddokument/der Wordvorlage, die von Excel aus mit Inhalten gefüllt wird, alle beötigten Absatzformate schon als Formatvorlagen angelegt werden.
Das vereinfacht dir Programmierung, weil dann im Code diese "Styles" zugewiesen werden können.
Des weiteren hängt sehr viel davon ab, wie die Inhalte von Excel ins Dokument eingetragen werden.
Wenn du hier im Forum so richtig tief in die RECHERCHE abtauchst, dann findest du wahrscheinlich auch ein paar brauchbare Ansätze.
Gruß
Franz

Anzeige
AW: textformatierung in word durch Excel vba
13.08.2014 09:28:16
Knoof
Alles klar danke!
Eigentlich geht es nur darum das bestimmte zeilen einen Stichpunkt bekommen...
Da ich das vorher in der in Excel nicht machen kann, also dort wo die Texte hergenommen werden, muss ich das irgendwie über vba oder word regeln...
Wenn ich so ein AUfzählungspunkt vorher in WOrd in meine Textmarke einfüge sind alle neuen Zeilen mit solch einem Punkt versehen.
Also muss ich es irgendwie schaffen bestimmten Zeilen einen Aufzählungspunkt zuzuweisen :|
Gruß,
Knoof

Anzeige
AW: textformatierung in word durch Excel vba
13.08.2014 12:53:23
fcs
Hallo Knoof,
wenn du mit Textmarken als Einfügepositionen im Worddokument arbeitetst, dann ist es wahrscheinlich am "einfachsten" wenn du die Textinhalte aus Excel in einer Variablen sammelst, wobei zwischen den Textteilen Zeilenschaltungen eingebaut werden. Den Variableninhalt schreibst du dann ein Textmarke, die vorformatiert ist.
Gruß
Franz

Anzeige
AW: textformatierung in word durch Excel vba
13.08.2014 14:21:29
Knoof
Ohman das hört sich echt kompliziert an, kann mir darunter noch nicht wirklich was vorstellen.
JEdenfalls ist das der Code mit dem der Text in die Textmarke eingefügt wird.
Allerdings soll genau in dem Text ab einer bestimmten Stelle eine Auflistung(Punkte) beginnen.
If Me.checkdummy2 = True Then
With Sheets("Auswertungen").Cells(zeile, 19)
If strText = "" Then strText = .Text Else strText = .Text & Chr(13) & Chr(13) & strText
End With
End If

Anzeige
AW: textformatierung in word durch Excel vba
13.08.2014 15:36:47
fcs
Hallo Knoof,
wie wird denn die Stelle ermittelt, ab der in Word die Auflistung beginnen soll?
Ideal wäre es, wenn der Inhalt von strText auf 2 Variablen aufgeteilt würde.
Teil 1: Dieser Text wird an einer Textmarke mit "normaler" Formatierung eingefügt.
Teil 2: Dieser Text wird an einer Textmarke mit "Auflistungsformatierung" eingefügt.
Gruß
Franz

Anzeige
AW: textformatierung in word durch Excel vba
14.08.2014 08:30:24
Knoof
Hallo Franz,
Ja momentan wird da noch garnichts ermittelt.
Aber es werden immer Textblöcke eingefügt(zB. Dummy2 siehe oben) welche einen einleitenden Satz enthalten.
Und im gleichen textbaustein folgen einige Sätze die Als Aufzählung geschrieben werden sollen.
Also kann ich mir vorstellen dass EInleitender Satz und Aufzählungstext getrennt in variablen gespeichert werden könnten.
Nur bräuchte ich wohl etwas Hilfe bei dem Code.
Gruß,
Knoof

Anzeige
AW: textformatierung in word durch Excel vba
14.08.2014 12:26:04
fcs
Hallo Knoof,
hier ein Code-Beispiel, wie man so etwas lösen könnte. Die konkrete Lösung muss dann natürlich an die vorliegenden Daten angepasst werden.
Das Word-Musterdokument hat entsprechende Textmarken, wobei die Absatz mit den Textmarken für die einleitenden Zeile und die Absätze mit den Textmarken für die Auflistungen unterschiedlich formatiert sind.
Ale weitere Unterstützung ist dann nur noch mit Beispieldateien möglich.
Gruß
Franz
Sub Worddateiausfuellen()
'Excel-Objekte
Dim wkb As Workbook
Dim wks As Worksheet
'Word-Objekte
Dim wdApp As Object 'Word.Application
Dim wdDoc As Object 'Word.Document
'allgemeine Variablen
Dim Zeile As Long
Dim strText As String, strText1 As String, strText2 As String
Set wkb = ActiveWorkbook
Set wks = wkb.Worksheets("Tabelle1")
Set wdApp = VBA.CreateObject("Word.Application")
wdApp.Visible = True
'Musterdokument mit den Textmarken schreibgeschützt öffnen
Set wdDoc = wdApp.Documents.Open(Filename:="D:\Test\Test.doc", ReadOnly:=True)
With wks
For Zeile = 2 To 10
If .Cells(Zeile, 3) = "x" Then
'nach Word zu übertragender Text
strText = .Cells(Zeile, 2).Text
'Text an der 1. Zeilenschaltung teilen
strText1 = fncTeilen(strText, bolTeil1:=True) 'Zeilen-text
strText2 = fncTeilen(strText, bolTeil1:=False) 'Listentext
'Texte gemäß Bedingungen an Textmarken einfügen
Select Case Zeile
Case 3 To 5 '1. Textblock
wdDoc.Bookmarks("Textmarke01_Z").Range.Text = strText1
wdDoc.Bookmarks("Textmarke01_Liste").Range.Text = strText2
Case 7 To 8 '2. Textblock
wdDoc.Bookmarks("Textmarke02_Z").Range.Text = strText1
wdDoc.Bookmarks("Textmarke02_Liste").Range.Text = strText2
End Select
End If
Next
End With
wdApp.Activate
End Sub
Function fncTeilen(strText As String, bolTeil1 As Boolean, _
Optional strSep As String = vbLf)
'Text aufteilen am Trennzeichen/Trenntext
'strText  = aufzuteilender text
'bolTeil1 = True  -- Text links vom Trennzeichen wird zurückgegeben _
False -- Text rechts vom Trennzeichen wird zurückgegeben
'strSep   = Trennzeichen/Trenntext zwischen den Textteilen - Vorgabe = Zeilenschaltung
If strText = "" Then
fncTeilen = ""
Else
If InStr(1, strText, strSep) > 0 Then
If bolTeil1 = True Then
fncTeilen = Left(strText, InStr(1, strText, strSep) - 1)
Else
fncTeilen = Mid(strText, InStr(1, strText, strSep) + Len(strSep))
End If
Else
If bolTeil1 = True Then
fncTeilen = strText
Else
fncTeilen = ""
End If
End If
End If
End Function

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Textformatierung in Word durch Excel VBA


Schritt-für-Schritt-Anleitung

  1. Excel-Daten vorbereiten: Stelle sicher, dass deine Excel-Datei die notwendigen Daten enthält. Markiere die Zeilen, die in Word übertragen werden sollen.

  2. Word-Dokument erstellen: Erstelle ein Word-Dokument mit den passenden Textmarken, an denen die Inhalte eingefügt werden sollen. Achte darauf, dass die Absatzformate bereits als Formatvorlagen vorhanden sind.

  3. VBA-Editor öffnen: In Excel, drücke Alt + F11, um den VBA-Editor zu öffnen.

  4. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle Einfügen > Modul.

  5. VBA-Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub Worddateiausfuellen()
       Dim wkb As Workbook
       Dim wks As Worksheet
       Dim wdApp As Object 'Word.Application
       Dim wdDoc As Object 'Word.Document
       Dim Zeile As Long
       Dim strText As String, strText1 As String, strText2 As String
    
       Set wkb = ActiveWorkbook
       Set wks = wkb.Worksheets("Tabelle1")
       Set wdApp = CreateObject("Word.Application")
       wdApp.Visible = True
       Set wdDoc = wdApp.Documents.Open(Filename:="D:\Test\Test.doc", ReadOnly:=True)
    
       With wks
           For Zeile = 2 To 10
               If .Cells(Zeile, 3) = "x" Then
                   strText = .Cells(Zeile, 2).Text
                   strText1 = fncTeilen(strText, True)
                   strText2 = fncTeilen(strText, False)
                   wdDoc.Bookmarks("Textmarke01_Z").Range.Text = strText1
                   wdDoc.Bookmarks("Textmarke01_Liste").Range.Text = strText2
               End If
           Next
       End With
       wdApp.Activate
    End Sub
    
    Function fncTeilen(strText As String, bolTeil1 As Boolean, Optional strSep As String = vbLf)
       If strText = "" Then
           fncTeilen = ""
       Else
           If InStr(1, strText, strSep) > 0 Then
               If bolTeil1 Then
                   fncTeilen = Left(strText, InStr(1, strText, strSep) - 1)
               Else
                   fncTeilen = Mid(strText, InStr(1, strText, strSep) + Len(strSep))
               End If
           Else
               If bolTeil1 Then
                   fncTeilen = strText
               Else
                   fncTeilen = ""
               End If
           End If
       End If
    End Function
  6. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros > Worddateiausfuellen aus.


Häufige Fehler und Lösungen

  • Fehler: Word-Dokument wird nicht gefunden
    Lösung: Überprüfe den Dateipfad in der Codezeile Set wdDoc = wdApp.Documents.Open(Filename:="D:\Test\Test.doc", ReadOnly:=True) und stelle sicher, dass die Datei existiert.

  • Fehler: Text wird nicht an der Textmarke eingefügt
    Lösung: Achte darauf, dass die Textmarken in Word korrekt benannt sind. Die Namen im Code müssen mit denen im Word-Dokument übereinstimmen.


Alternative Methoden

  • Direktes Einfügen von Excel in Word: Anstatt VBA zu verwenden, kannst du auch die Funktion „Einfügen“ in Word nutzen, um Excel-Tabellen direkt einzufügen. Dies kann jedoch die Formatierung beeinträchtigen.

  • Verwendung von Vorlagen: Erstelle Word-Vorlagen mit festgelegten Absatzformaten und füge die Daten über VBA ein.


Praktische Beispiele

  • Aufzählungen erstellen: Wenn du Text in Word mit Aufzählungspunkten formatieren möchtest, kannst du in deinem VBA-Code eine Formatierung für Aufzählungen hinzufügen:

    wdDoc.Bookmarks("Textmarke01_Liste").Range.ListFormat.ApplyBulletDefault
  • Formatierung mit Gedankenstrichen: Um Gedankenstriche in den Text einzufügen, nutze den Chr(150) für den Gedankenstrich:

    strText = Replace(strText, "-", Chr(150))

Tipps für Profis

  • Nutze Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme elegant zu lösen. Beispiel:

    On Error Resume Next
  • Experimentiere mit Formatvorlagen in Word, um das Layout deiner Dokumente zu verbessern und ein einheitliches Design zu gewährleisten.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Absatzformate in Word über VBA anwenden?
Du kannst unterschiedliche Textmarken für unterschiedliche Absatzformate erstellen und im VBA-Code gezielt ansteuern.

2. Kann ich Excel-Daten direkt in ein vorhandenes Word-Dokument einfügen?
Ja, du kannst den VBA-Code anpassen, um Daten in ein bestehendes Word-Dokument einzufügen, solange die Textmarken vorhanden sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige