Microsoft Excel

Herbers Excel/VBA-Archiv

textformatierung in word durch Excel vba

Betrifft: textformatierung in word durch Excel vba von: Knoof
Geschrieben am: 12.08.2014 11:24:29

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

  

Betrifft: AW: textformatierung in word durch Excel vba von: fcs
Geschrieben am: 12.08.2014 16:32:57

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


  

Betrifft: AW: textformatierung in word durch Excel vba von: Knoof
Geschrieben am: 13.08.2014 09:28:16

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


  

Betrifft: AW: textformatierung in word durch Excel vba von: fcs
Geschrieben am: 13.08.2014 12:53:23

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


  

Betrifft: AW: textformatierung in word durch Excel vba von: Knoof
Geschrieben am: 13.08.2014 14:21:29

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


  

Betrifft: AW: textformatierung in word durch Excel vba von: fcs
Geschrieben am: 13.08.2014 15:36:47

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


  

Betrifft: AW: textformatierung in word durch Excel vba von: Knoof
Geschrieben am: 14.08.2014 08:30:24

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


  

Betrifft: AW: textformatierung in word durch Excel vba von: fcs
Geschrieben am: 14.08.2014 12:26:04

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