christian295
Goto Top

Word Vorlage mit Daten aus Excel

Guten Morgen Zusammen,

wir haben eine Word Vorlage (.dotm) mit Textformularfeldern die mit Werten (nur Text) aus einer Software befüllt werden.
Die Zeichen die von der Software übergeben werden sind leider begrenzt und wir müssen "den Rest" manuell ergänzen.

Nun ist die Frage ob es eine funktionierende Möglichkeit gibt in der World Vorlage ein Makro / VBA einzubauen, dass den Inhalt
des Textformularfelds ausliest und dann mit dem Wert aus der Excelliste (oder auch Textdatei das wäre egal) ersetzt wenn
z.B. Wert1 enthalten ist, ersetzt wird mit Max Mustermann und das dann vor allem auch so bleibt.

Ich habe schon mit VBA experimentiert, allerdings sind die Werte im Code enthalten (besser wäre in einer externen Datei).
Das größere Problem ist, dass die die Werte im generierten Word Dokument zwar ersetzt werden, nur wenn ich das dann
speichere und wieder öffne ist das Textformularfeld leer.... Vermutlich weil dem Code der Wert aus der Textmarke fehlt.

Was ich habe in der .dotm aktuell habe:

Private Sub Document_New()

Dim dd1 As Document: Set dd1 = ActiveDocument
Dim tM As Bookmark, strBefrResult As String
Dim fldFT As Field, strPEBEFRISTEXT As String
 
 Set tM = dd1.Bookmarks("PEBEFRISTEXT")   
 Set fldFT = tM.Range.Fields(1) 
 
 strPEBEFRISTEXT = fldFT.Result.Text
 
  Select Case True
    Case InStr(strPEBEFRISTEXT, "Grund1")  
        strBefrResult = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam"  
       
    Case InStr(strPEBEFRISTEXT, "Grund2")  
        strBefrResult = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam"  
           
    'Case Else  
        'strBefrResult = "kein Grund"  
       
        End Select
        
fldFT.Result.Text = strBefrResult

End Sub

und

Private Sub Document_Open()

Dim dd1 As Document: Set dd1 = ActiveDocument
Dim tM As Bookmark, strBefrResult As String
Dim fldFT As Field, strPEBEFRISTEXT As String
 
 Set tM = dd1.Bookmarks("PEBEFRISTEXT")   
 Set fldFT = tM.Range.Fields(1) 
 
 strPEBEFRISTEXT = fldFT.Result.Text
 
  Select Case True
    Case InStr(strPEBEFRISTEXT, "Grund1")  
        strBefrResult = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam"  
       
    Case InStr(strPEBEFRISTEXT, "Grund2")  
        strBefrResult = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam"  
           
    'Case Else  
        'strBefrResult = "kein Grund"  
       
        End Select
        
fldFT.Result.Text = strBefrResult

End Sub

Wahrscheinlich wäre es besser, wenn das Textformularfeld einfach entfernt wird und der Text direkt in das erzeugte Word Dokument geschrieben wird.

Bin für jede Hilfe dankbar, aber ich hab kaum Ahnung was VBA angeht und mir das schon zusammen gegoogelt...

VG Christian

Content-ID: 3471131434

Url: https://administrator.de/contentid/3471131434

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

3479126418
3479126418 29.07.2022 aktualisiert um 00:10:50 Uhr
Goto Top
Klassische Serienbrief Funktion. Geht also von Haus aus. Datenquelle kann beliebig gewählt werden, ob Excel, Access, SQL Server ist wurst. Done.
christian295
christian295 01.08.2022 um 10:46:19 Uhr
Goto Top
Das ist leider nicht so einfach damit denke ich - die Textmarke bekommt von einem anderem Programm einen Wert und auf Grundlage dieses Werts soll aus Excel, Textdatei etc. ein bestimmter Text eingetragen werden.
3479126418
3479126418 01.08.2022 aktualisiert um 13:01:05 Uhr
Goto Top
Zitat von @christian295:

Das ist leider nicht so einfach damit denke ich - die Textmarke bekommt von einem anderem Programm einen Wert und auf Grundlage dieses Werts soll aus Excel, Textdatei etc. ein bestimmter Text eingetragen werden.

Na das ist ja dann Kindergarten, hier mit nem Excel Sheet bei dem die Bookmark-Namen übereinander in Tabelle 1 in Spalte A stehen und deren Daten in Spalte B:
Sub BookmarksErsetzen()
    Dim strDataPath As String, bm As Bookmark, x As Object
    strDataPath = ThisDocument.Path & "\Daten.xlsx"  
    With GetObject(strDataPath)
        For Each bm In ThisDocument.Bookmarks
            Set x = .Sheets(1).Range("A:A").Find(bm.Name, LookIn:=-4163, LookAt:=1)  
            If Not x Is Nothing Then
                bm.Range.Text = x.Offset(0, 1).Value
            End If
        Next
        .Close False
    End With
End Sub
Done.
christian295
christian295 01.08.2022 um 13:24:36 Uhr
Goto Top
Danke! Frage: Prüft der Code alle Textmarken in der World Vorlage oder muss ich noch einstellen, dass nur eine Bestimmte TM angesprochen wird? Bleibt der Text dann auch nach dem speichern erhalten oder ist der dann beim öffnen wieder weg? Den Pfand zur Daten.xlsx dann wahrscheinlich den ganzen Pfad oder? Weil das generierte Dokument ja dann nicht im gleichen Pfad ist wie die Vorlagen.
3479126418
3479126418 01.08.2022 aktualisiert um 13:27:08 Uhr
Goto Top
Zitat von @christian295:

Danke! Frage: Prüft der Code alle Textmarken in der World Vorlage
Ja, geht alle durch und sucht deren Namen in der Excel-Datenvorlage, sieht man doch...
Bleibt der Text dann auch nach dem speichern erhalten
Klar wenn du die Mappe abschließend noch mit .Save speicherst.
Den Pfand zur Daten.xlsx dann wahrscheinlich den ganzen Pfad oder?
Joa sicher, war ja nur ein Beispiel.
christian295
christian295 01.08.2022 um 13:34:13 Uhr
Goto Top
Okay, wollte nur sicher gehen. Habe es jetzt so drinnen wie auf dem Screenshot; allerdings wird das Worddokument so erstellt, als wäre kein Code da...
screen
3479126418
3479126418 01.08.2022 aktualisiert um 13:35:36 Uhr
Goto Top
Oh män, copy n paste Opfer ..... Koppschüttel ...

Tschö.
christian295
christian295 01.08.2022 um 14:32:33 Uhr
Goto Top
Danke sehr nett!

Wenn ich wüsste wie es geht, würde ich wohl kaum fragen und mit so kurzen und knappen "neunmalklugen" Antworten komme ich sicherlich weiter...

Kindergarten...

Alles Gute für Dich!