Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Excel to Word Bookmarks

Forumthread: VBA Excel to Word Bookmarks

VBA Excel to Word Bookmarks
06.12.2019 11:01:25
Dome
Hallo Leute,
Ich benötige Eure Hilfe zum folgenden Code:

Private Sub CommandButton1_Click()
'vba_xlsm-to-dotx-bookmarks_test_DE.dotx
'vba_xlsm-to-dotx-bookmarks_test_FR.dotx
'vba_xlsm-to-dotx-bookmarks_test_IT.dotx
Dim z&, TM$ ' & = as long, $ = as String
Dim wdApp As Object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
wdApp.Visible = True
wdApp.Documents.Add "...\vba_xlsm-to-dotx-bookmarks_test_DE.dotx"
For z = 2 To 7
' Textmarke wird nur dann aus Spalte E übernommen, wenn nicht leer
' und dann so lange verwendet, bis die nächste vorhanden ist.
If Tabelle12.Range("E" & z).Value  "" Then TM = Tabelle12.Range("E" & z).Value
If Tabelle12.Range("G" & z).Value = "x" Then
If TM  "" Then
Tabelle12.Range("K" & z).Copy
wdApp.ActiveDocument.Bookmarks(TM).Range.PasteExcelTable False, False, False
Else
MsgBox "Textmarke = leer; Fehler in Zeile " & z
End If
End If
Next
Set wdApp = Nothing
End Sub
Meine Frage lautet nun:
Wie bekomme ich es hin, dass mir drei DOTX-Vorlagen geöffnet werden (heute wird nur die DE-Vorlage geöffnet) und mir bei jeweils derselben Textmarke der Text in DE, FR und IT eingefügt wird?
Die Texte in FR und IT befinden sich dabei in den Spalten L und M.
Besten Dank für Eure Inputs.
https://www.herber.de/bbs/user/133640.xlsm
LG
Dome
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Excel to Word Bookmarks
06.12.2019 11:28:22
ede
Hallo,
dann ruf doch den relevanten Teil einfach dreimal auf innerhalb deiner Procedure:

Private Sub CommandButton1_Click()
'vba_xlsm-to-dotx-bookmarks_test_DE.dotx
'vba_xlsm-to-dotx-bookmarks_test_FR.dotx
'vba_xlsm-to-dotx-bookmarks_test_IT.dotx
Dim z&, TM$ ' & = as long, $ = as String
Dim wdApp As Object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
'----------------------------für DE
wdApp.Visible = True
wdApp.Documents.Add "...\vba_xlsm-to-dotx-bookmarks_test_DE.dotx"
For z = 2 To 7
' Textmarke wird nur dann aus Spalte E übernommen, wenn nicht leer
' und dann so lange verwendet, bis die nächste vorhanden ist.
If Tabelle12.Range("E" & z).Value  "" Then TM = Tabelle12.Range("E" & z).Value
If Tabelle12.Range("G" & z).Value = "x" Then
If TM  "" Then
Tabelle12.Range("K" & z).Copy
wdApp.ActiveDocument.Bookmarks(TM).Range.PasteExcelTable False, False, False
Else
MsgBox "Textmarke = leer; Fehler in Zeile " & z
End If
End If
Next
wdApp.ActiveDocument.Close savechanges:=True    'Dokument schliessen
'----------------------------für FR
wdApp.Visible = True
wdApp.Documents.Add "...\vba_xlsm-to-dotx-bookmarks_test_FR.dotx"
For z = 2 To 7
' Textmarke wird nur dann aus Spalte E übernommen, wenn nicht leer
' und dann so lange verwendet, bis die nächste vorhanden ist.
If Tabelle12.Range("E" & z).Value  "" Then TM = Tabelle12.Range("E" & z).Value
If Tabelle12.Range("G" & z).Value = "x" Then
If TM  "" Then
Tabelle12.Range("L" & z).Copy
wdApp.ActiveDocument.Bookmarks(TM).Range.PasteExcelTable False, False, False
Else
MsgBox "Textmarke = leer; Fehler in Zeile " & z
End If
End If
Next
wdApp.ActiveDocument.Close savechanges:=True    'Dokument schliessen
'----------------------------für IT
' hier selber einfügen.....
Set wdApp = Nothing
End Sub
ist zwar nicht elegant, aber sollte funktionieren.
Gruss
ede
Anzeige
AW: VBA Excel to Word Bookmarks
06.12.2019 11:33:13
Dome
Hallo ede,
Danke für Deinen INput. Ich war gerade am schreiben einer Ergänzung, dass ich es mittlerweile gelöst habe, und zwar genau so wie Du es vorgeschlagen hast. ;)
Gibt es keinen Weg, der etwas sexier ist?
LG
Dominik
AW: VBA Excel to Word Bookmarks
06.12.2019 11:40:51
ede
Danke für die Rückmneldung,
Natürlich gibt es eine elegantere Variante. Den relevanten Code packt man in eine eigene SUB() mit Parameterübergabe (z.B.: für dotx-Vorlage und Spaltenindex) und ruft diese dann dreimal auf.
Schönes 2. Adventswochenende
gruss
ede
Anzeige
AW: VBA Excel to Word Bookmarks
06.12.2019 14:02:29
Dome
Na dann klemm' ich mich mal dahinter. ;)
Danke für den Tipp.
LG
Dome
Gelöst
06.12.2019 15:10:03
Dome
Habs hinbekommen...
In ein Modul kopieren:

Sub test(Sprache As String, Spalte As String)
Dim z&, TM$ ' & = as long, $ = as String
Dim wdApp As Object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
On Error GoTo 0
wdApp.Visible = True
wdApp.Documents.Add "...\vba_xlsm-to-dotx-bookmarks_test_" & Sprache & ".dotx"
For z = 2 To 7
' Textmarke wird nur dann aus Spalte E übernommen, wenn nicht leer
' und dann so lange verwendet, bis die nächste vorhanden ist.
If Tabelle12.Range("E" & z).Value  "" Then TM = Tabelle12.Range("E" & z).Value
If Tabelle12.Range("G" & z).Value = "x" Then
If TM  "" Then
Tabelle12.Range(Spalte & z).Copy
wdApp.ActiveDocument.Bookmarks(TM).Range.PasteExcelTable False, False, False
Else
MsgBox "Textmarke = leer; Fehler in Zeile " & z
End If
End If
Next
Set wdApp = Nothing
End Sub
In Mappe kopieren:

Private Sub CommandButton1_Click()
'Dim Produkt As String
Dim Sprache As String
Dim Spalte As String
'Produkt = "Tabelle12"
Sprache = "DE"
Spalte = "K"
Call test(Sprache, Spalte)
'Produkt = "Tabelle13"
Sprache = "FR"
Spalte = "L"
Call test(Sprache, Spalte)
'Produkt = "Tabelle14"
Sprache = "IT"
Spalte = "M"
Call test(Sprache, Spalte)
End Sub
Vielen Dank für die Hilfe.
LG
Dome
Anzeige
AW: Gelöst
09.12.2019 11:12:44
Dome
Hallo Leute,
Der Code bricht mir beim Erstellen immer an derselben Stelle (innerhalb des Codes, siehe unten) ab, dabei aber immer bei unterschiedlichen Textmarken in unterschiedlichen Dokumenten:
Beispiel: Bei einem Durchlauf bricht er im FR-Dokument bei der Textmarke24 ab. Beim nächsten Durchlauf bricht er im IT-Dokument bei der Textmarke27 ab. Beim nächsten im DE-Dokument bei der Textmarke3, etc.

wdApp.ActiveDocument.Bookmarks(TM).Range.PasteExcelTable False, False, False
Ich kann mir nicht erklären warum das passiert?
Vielen Dank für Eure Hilfe.
LG
Dome
Anzeige
Auch Gelöst
09.12.2019 14:22:04
Dome
Hi,
Hat sich ebenso von alleine erledigt. ;)
Habe vergessen den einen Baustein einer Textmarke zuzuweisen..
LG
Dome
;
Anzeige

Infobox / Tutorial

VBA Excel zu Word Bookmarks: Schritt-für-Schritt-Anleitung


Schritt-für-Schritt-Anleitung

Um Daten aus Excel in Word über Bookmarks zu übertragen, kannst Du folgendes VBA-Skript verwenden. Das Skript ermöglicht es, mehrere Vorlagen (DOTX-Dateien) zu öffnen und die entsprechenden Werte in die definierten Textmarken einzufügen.

Hier ist ein Beispielcode, der drei verschiedene Vorlagen (Deutsch, Französisch, Italienisch) verarbeitet:

Sub test(Sprache As String, Spalte As String)
    Dim z&, TM$ ' & = as long, $ = as String
    Dim wdApp As Object
    On Error Resume Next
    Set wdApp = GetObject(, "Word.Application")
    If wdApp Is Nothing Then Set wdApp = CreateObject("Word.Application")
    On Error GoTo 0
    wdApp.Visible = True
    wdApp.Documents.Add "...\vba_xlsm-to-dotx-bookmarks_test_" & Sprache & ".dotx"

    For z = 2 To 7
        ' Textmarke wird nur dann aus Spalte E übernommen, wenn nicht leer
        If Tabelle12.Range("E" & z).Value <> "" Then TM = Tabelle12.Range("E" & z).Value
        If Tabelle12.Range("G" & z).Value = "x" Then
            If TM <> "" Then
                Tabelle12.Range(Spalte & z).Copy
                wdApp.ActiveDocument.Bookmarks(TM).Range.PasteExcelTable False, False, False
            Else
                MsgBox "Textmarke = leer; Fehler in Zeile " & z
            End If
        End If
    Next
    Set wdApp = Nothing
End Sub

Private Sub CommandButton1_Click()
    Call test("DE", "K")
    Call test("FR", "L")
    Call test("IT", "M")
End Sub

Häufige Fehler und Lösungen

  1. Fehler: Textmarke nicht gefunden

    • Lösung: Überprüfe, ob die Textmarken in der Word-Vorlage korrekt benannt sind. Achte darauf, dass der Name der Textmarke exakt mit dem in Excel verwendeten Namen übereinstimmt.
  2. Fehler: Abbruch beim Einfügen von Daten

    • Lösung: Stelle sicher, dass die Spalte, aus der Du die Daten kopierst, nicht leer ist. Wenn eine Textmarke nicht zugeordnet ist, könnte dies ebenfalls den Fehler verursachen.
  3. Fehler: Fehler bei der PasteExcelTable-Methode

    • Lösung: Überprüfe, ob die Excel-Daten korrekt formatiert sind. Manchmal kann ein ungültiges Format das Einfügen in Word verhindern.

Alternative Methoden

Eine alternative Methode besteht darin, die Daten in eine Word-Tabelle zu übertragen. Statt die PasteExcelTable-Methode zu verwenden, kannst Du die Daten in eine Textmarke als Text einfügen:

wdApp.ActiveDocument.Bookmarks(TM).Range.Text = Tabelle12.Range(Spalte & z).Value

Dies kann hilfreich sein, wenn Du nur einfachen Text ohne Formatierung benötigst.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die Funktion test aufrufst, um Daten für verschiedene Sprachen zu verarbeiten:

Private Sub CommandButton1_Click()
    Call test("DE", "K") ' Deutsch
    Call test("FR", "L") ' Französisch
    Call test("IT", "M") ' Italienisch
End Sub

Mit diesen Aufrufen wird für jede Sprache das entsprechende Excel-Datenfeld in die Word-Textmarke eingefügt.


Tipps für Profis

  • Nutze die On Error-Anweisung, um Fehler abzufangen und besser zu diagnostizieren.
  • Erstelle eine separate Subroutine für das Einfügen der Daten, um den Code übersichtlicher zu gestalten.
  • Verwende word vba bookmarks, um die Buchstaben- und Zahlenkombinationen in Word zu organisieren und zu verwalten.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Textmarken in Word gleichzeitig aktualisieren? Du kannst eine Schleife verwenden, um alle gewünschten Textmarken nacheinander zu aktualisieren, indem Du die PasteExcelTable-Methode für jede Textmarke aufrufst.

2. Was sind die Vorteile von VBA beim Arbeiten mit Word und Excel? VBA ermöglicht die Automatisierung von Prozessen, die ansonsten manuell durchgeführt werden müssten. Mit VBA kannst Du Daten effizient zwischen Excel und Word austauschen, was Zeit spart und menschliche Fehler reduziert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige