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

Aus Excel nach Word (Textmarken / Tabellebblätter)

Forumthread: Aus Excel nach Word (Textmarken / Tabellebblätter)

Aus Excel nach Word (Textmarken / Tabellebblätter)
11.04.2017 08:13:24
Florian
Einen schönen guten Morgen,
nach Tagen des Versuchens bin ich nun an dem Punkt mich an die Profis im Forum zu wenden.
Ich stehe vor folgender Aufgabe:
Ich habe eine Exceltabelle mit mehreren Tabellenblättern. Aus diesen unterschiedlichen Tabellenblättern möchte ich eine Wordvorlage befüllen. Innerhalb der Exceltabelle gibt es Bereichsnamen, die ich an die in Word befindlichen Textmarken übergeben möchte.
Ich habe in einem anderen Forum ein schon sehr hilfreichen Code gefunden und angepasst. Das Kopieren von Bereichen als Bild, Tabellen und einfachem Text funktioniert auch gut. Nur leider schaffe ich es nicht den Code so umzuschreiben, dass ich aus mindestens drei Tabellenblättern die Daten letztlich in das Word übertragen kann.
Das hier ist meine Ausgangsbasis: http://vbanet.blogspot.de/2012/10/excel-word-in-textmarken-bookmarks.html
Pro Tabellenblatt habe ich ca. 12 Inhalte, die ich in die entsprechenden Textmarken füllen muss. Es handelt sich inhaltlich um einen SLA-Bericht. Da ich die Variablen kundenspezifisch benannt habe, verzichte ich zunächst auf das Posten des Codings.
Mein Problem: Bereichsnamen aus unterschiedlichen Tabellenblättern an in Word befindliche Textmarken kopieren.
Es wäre super, wenn mir jemand bei diesem Problem weiterhelfen könnte.
Mit bestem Dank im Voraus
Flo
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Bsp-Datei
11.04.2017 08:26:41
Fennek
Hallo,
es gibt so viele Varianten, dass es ohne eine - verkürzte und anonmisierte - Bsp-Datei nicht gehen wird. Es sollte deutlich werden, ob der xl-Bereich als Tabelle oder als Text in wd ergefügt werden soll.
mfg
(mit den Codes von Case habe ich auch öfter mal Verständnisprobleme)
Anzeige
AW: Bsp-Datei
11.04.2017 08:33:02
Florian
Hi, danke für die schnelle Antwort! Das Coding unten funktioniert nun nicht mehr... zu viel "herumgespielt".
Inhaltlich habe ich gestern noch mal neu angefangen und bin nicht fertig, da eben das Einfügen aus verschiedenen Tabellenblättern nicht funktioniert.
Ich möchte:
- auf allen drei aufgeführten Tabellenblättern sowohl
-- Text einer bestimmten Zelle einfügen
-- einen Bereich als Bild einfügen
-- und eine Tabelle einfügen. Je nach Kunde variiert die Größe der Tabelle. Dies fange ich durch indirekt ab sodass der Namensbereich immer der Tabelle entspricht und eingefügt werden soll. Es sind Pivottabellen aus meist zwei Spalten und einer unterschiedlichen Anzahl an Zeilen.
Mit bestem Dank im Voraus
Viele grüße
Flo
Option Explicit
' Namen der Textmarken im Worddokument
Const strBookmark1 As String = "Kundenadresse"
Const strBookmark2 As String = "Berichtszeitraum_Monat"
Const strBookmark3 As String = "Empfaenger"
Const strBookmark4 As String = "Service_Kunde"
Const strBookmark5 As String = "Betreff"
Const strBookmark6 As String = "Wertetabelle"
Const strBookmark7 As String = "Wertetabelle1"
' Konstante für den Speichern-Unter Dialog in Word
Const wdDialogFileSaveAs = 84
' Wenn Word nicht offen ist wird diese Variable auf True
' gesetzt und Word am Ende wieder geschlossen
' War Word schon offen, belibt es das auch
Dim blnTMP As Boolean
Public Sub Main()
Dim objWordRange As Object
Dim objDocument As Object
Dim objDialog As Object
Dim objApp As Object
Dim strDoc As String
Dim WordObj As Object
On Error GoTo Fin
' Das Worddokument mit Pfad und Name
strDoc = ThisWorkbook.Path & _
Application.PathSeparator & "SLA-Bericht.doc"
' Die Wordapplikation wird mit der Funktion "OffApp" gesucht
' ODER bei Bedarf gestartet
Set objApp = OffApp("Word")
'folgende Codezeile für Word nicht sichtbar
'Set objApp = OffApp("Word", False)
' Wenn die Word der Objektvariablen zugewiesen werden konnte dann...
If Not objApp Is Nothing Then
' Öffne das Worddokument, zugewiesen an die Objektvariable objDocument
Set objDocument = objApp.Documents.Open(Filename:=strDoc)
' With für Schreibfaule :-) Alle Bezüge auf Tabelle1 müssen
' mit einem Punkt beginnen
With ThisWorkbook.Worksheets("Empfaenger Bericht_Anschrift")
' Prüfe, ob die Textmarke vorhanden ist
If objDocument.Bookmarks.Exists(strBookmark1) = True Then
.Range("Kundenadresse").Copy
Set objWordRange = objDocument.Bookmarks(strBookmark1).Range
objWordRange.Paste
End If
' With ThisWorkbook.Worksheets("SLA")
'       If objDocument.Bookmarks.Exists(strBookmark2) = True Then
'            objDocument.Bookmarks(strBookmark2).Range = .Range("Berichtszeitraum").Text
'        End If
'        If objDocument.Bookmarks.Exists(strBookmark3) = True Then
'            objDocument.Bookmarks(strBookmark3).Range = .Range("Empfaenger").Text
'        End If
'        End With
With ThisWorkbook.Worksheets("Kunden")
If objDocument.Bookmarks.Exists(strBookmark4) = True Then
objDocument.Bookmarks(strBookmark4).Range = .Range("Service_Kunden").Value
End If
End With
'        If objDocument.Bookmarks.Exists(strBookmark5) = True Then
'            objDocument.Bookmarks(strBookmark5).Range = .Range("F2").Text
'        End If
' Kopiere einen Bereich als Bild an die Textmarke Wertetabelle
' Objektvariable objWordRange leeren
If objDocument.Bookmarks.Exists(strBookmark6) = True Then
.Range("H1:J4").CopyPicture 1, 2
Set objWordRange = objDocument.Bookmarks(strBookmark6).Range
objWordRange.Paste
Set objWordRange = Nothing
End If
' Ameisenrennen um den kopierten Bereich beenden
' und Zwischenspeicher leeren
Application.CutCopyMode = True
' Objektvariable objWordRange leeren
Set objWordRange = Nothing
' Word Speicherdialog aufrufen
Set objDialog = objApp.Dialogs(wdDialogFileSaveAs)
With objDialog
' Pfad vorgeben
.Name = "C:\Temp\"
' Wenn auf Speichern geklickt wurde...
If .Display = -1 Then
objDocument.SaveAs Filename:=.Name
End If
' Dokument schliessen
'    objDocument.Close
End With
End With
Else
' Ausgabe, wenn die Objektvariable objApp Nothing ist...
MsgBox "Applikation nicht installiert!"
End If
Fin:
If Not objApp Is Nothing Then
' Word war nicht offen, also...
If blnTMP = True Then
' ... Word schliessen
'   objApp.Quit
blnTMP = False
End If
End If
' Objektvariablen leeren
Set objWordRange = Nothing
Set objDocument = Nothing
Set objApp = Nothing
Application.CutCopyMode = True
' Wenn die Fehlernummer NICHT 0 ist, dann gib die Fehlernummer
' und die Fehlerbeschreibung aus
If Err.Number  0 Then MsgBox "Fehler: " & _
Err.Number & " " & Err.Description
End Sub

Private Function OffApp(ByVal strApp As String, _
Optional blnVisible As Boolean = True) As Object
Dim objApp As Object
On Error Resume Next
Set objApp = GetObject(, strApp & ".Application")
Select Case Err.Number
Case 429
Err.Clear
Set objApp = CreateObject(strApp & ".Application")
blnTMP = True
If blnVisible = True Then
On Error Resume Next
objApp.Visible = True
Err.Clear
End If
End Select
On Error GoTo 0
Set OffApp = objApp
Set objApp = Nothing
End Function

Anzeige
AW: Bsp-Datei
11.04.2017 13:26:49
Florian
https://www.herber.de/bbs/user/112809.xlsx
Hier liegt eine "Beispiel-Datei". Man kann ein wenig erkennen. Er holt sich Daten aus Benannten Bereichen aus zwei Tabellenblättern. Im Bsp ist dies nur unter SLA benannt.
Hoffe es hilft weiter. Die Datenverarbeitung im Hintergrund ist nicht hübsch. Die Tabellen für den Reiter SLA kommen aus einer anderen Date und werden nur auf diesem Tabellenblatt in Form von Pivot-Tabellen angezeigt. Wenn man Pivots auch direkt an eine Textmarke bringen kann wäre es auch OK und es muss nicht über den Namen geschehen.
Anzeige
AW: mein Bsp
11.04.2017 17:16:51
Fennek
Hallo,
hier ein Muster für die Übertragung einer Zelle und eines benannten Bereichs (Book2).
Da hier kein Upload einer docx-Datei möglich ist, nur eine Beschreibung: In der wd-Datei wurden 2 bookmarks angelegt (Book1, Book2). Das xl-Makro fügt die Daten an diesen Stellen ein.
https://www.herber.de/bbs/user/112816.xlsm
mfg
(Dein Datei habe ich nicht geöffnet)
Anzeige
AW: mein Bsp
11.04.2017 20:29:50
Florian
Moin,
schon mal Danke. Die Funktionalität aus einem Tabellenblatt ist bekannt. Ich muss von verschiedenen Tabellenblättern Inhalte einfügen. Darin liegt das Problem. Hieran scheitere ich....
Excel zwei Tabellenblätter an Word Textmarke
12.04.2017 07:51:53
Florian
Würde mich freuen, wenn mir jemand sagen kann, wie ich hintereinander verschiedene Tabellenblätter ansprechen kann, um von dort via VBA die Daten (sowohl Zellbezüge als auch Bereichsnamen) an Textmarken in Word einfügen kann. Der Code hinter dem Link in Eintrag 1 funktioniert so, wie ich es mir vorstelle, nur hat er eben nur den Bezug zu einem Tabellenblatt.
Viele Grüße
Anzeige
AW: sheets(1).cells(1,1).copy (owt)
12.04.2017 08:46:15
Fennek
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Aus Excel nach Word: Textmarken füllen und Daten übertragen


Schritt-für-Schritt-Anleitung

Um Daten aus Excel in Word an Textmarken zu übergeben, kannst Du folgende Schritte befolgen:

  1. Vorbereitung der Excel-Datei:

    • Stelle sicher, dass Deine Excel-Datei mehrere Tabellenblätter enthält, aus denen Du Daten übertragen möchtest. Benenne die Bereiche, die Du in Word einfügen möchtest, z. B. „Kundenadresse“ oder „Berichtszeitraum“.
  2. Vorbereitung der Word-Vorlage:

    • Erstelle eine Word-Vorlage mit den benötigten Textmarken. Du kannst Textmarken in Word über „Einfügen“ > „Textmarke“ hinzufügen. Vergiss nicht, die Textmarken entsprechend der Excel-Bereichsnamen zu benennen.
  3. VBA-Code anpassen:

    • Verwende den folgenden VBA-Code, um Daten aus Excel an die Textmarken in Word zu übergeben. Ändere die Namen der Textmarken und Tabellenblätter entsprechend Deiner Daten.
    Public Sub Main()
       Dim objWordRange As Object
       Dim objDocument As Object
       Dim objApp As Object
       Dim strDoc As String
    
       ' Pfad zur Word-Dokumentvorlage
       strDoc = ThisWorkbook.Path & Application.PathSeparator & "SLA-Bericht.doc"
       Set objApp = CreateObject("Word.Application")
       Set objDocument = objApp.Documents.Open(Filename:=strDoc)
    
       ' Daten aus Tabellenblättern in Word einfügen
       With ThisWorkbook.Worksheets("Empfaenger Bericht_Anschrift")
           If objDocument.Bookmarks.Exists("Kundenadresse") Then
               .Range("Kundenadresse").Copy
               Set objWordRange = objDocument.Bookmarks("Kundenadresse").Range
               objWordRange.Paste
           End If
       End With
    
       ' Hier kannst Du zusätzliche Tabellenblätter und Textmarken hinzufügen
    
       ' Speichere das Word-Dokument
       objDocument.Save
       objDocument.Close
       objApp.Quit
    End Sub
  4. Code ausführen:

    • Führe den VBA-Code in Excel aus, um die Daten an die Word-Textmarken zu übertragen.

Häufige Fehler und Lösungen

  • Word-Textmarke existiert nicht: Stelle sicher, dass die Textmarke in Word korrekt benannt ist. Du kannst die Textmarken in Word über „Einfügen“ > „Textmarke“ anzeigen.

  • Datenübertragung funktioniert nicht: Überprüfe den VBA-Code auf Syntaxfehler oder falsche Bereichsbezüge. Achte darauf, dass die Excel-Bereichsnamen exakt mit den Word-Textmarken übereinstimmen.

  • Word öffnet sich nicht: Dies könnte daran liegen, dass Word nicht installiert oder nicht richtig registriert ist. Überprüfe Deine Word-Installation.


Alternative Methoden

  • Verwendung von Mail-Merge: Du kannst auch die Seriendruckfunktion von Word verwenden, um Daten aus Excel zu importieren. Dies eignet sich besonders, wenn Du viele Daten in ein Word-Dokument einfügen möchtest.

  • Zellen direkt kopieren: Statt über Textmarken kannst Du auch Zellen direkt kopieren und in Word einfügen. Dies könnte in einfacheren Szenarien eine schnellere Lösung sein.


Praktische Beispiele

  • Beispiel für das Einfügen einer Tabelle:

    If objDocument.Bookmarks.Exists("Wertetabelle") Then
       .Range("A1:D10").Copy
       Set objWordRange = objDocument.Bookmarks("Wertetabelle").Range
       objWordRange.Paste
    End If
  • Beispiel für das Einfügen von Bildern:

    If objDocument.Bookmarks.Exists("Bildmarke") Then
       .Range("Bilder/Bild1.jpg").CopyPicture
       Set objWordRange = objDocument.Bookmarks("Bildmarke").Range
       objWordRange.Paste
    End If

Tipps für Profis

  • Verwende benannte Bereiche: Dies erleichtert das Auffinden und Übertragen von Werten in Word. Du kannst benannte Bereiche in Excel über „Formeln“ > „Namens-Manager“ erstellen.

  • Automatisiere mit Schleifen: Wenn Du viele Textmarken hast, kannst Du eine Schleife verwenden, um den Code effizienter zu gestalten.

  • Fehlerbehandlung hinzufügen: Implementiere Fehlerbehandlung im VBA-Code, um Probleme bei der Ausführung besser zu diagnostizieren.


FAQ: Häufige Fragen

1. Wie füge ich mehrere Tabellenblätter in Word ein?
Du kannst für jedes Tabellenblatt einen eigenen Abschnitt im VBA-Code erstellen, wie im Schritt-für-Schritt-Abschnitt beschrieben.

2. Was mache ich, wenn die Textmarke nicht gefunden wird?
Überprüfe, ob die Textmarke in Word korrekt benannt ist und ob sie genau mit dem Namen im VBA-Code übereinstimmt.

3. Kann ich Pivot-Tabellen an Word-Textmarken übergeben?
Ja, Du kannst die Daten einer Pivot-Tabelle kopieren und in eine Word-Textmarke einfügen, indem Du den entsprechenden Bereich im VBA-Code anpasst.

4. Warum zeigt Word die Textmarken nicht an?
Stelle sicher, dass Du im Word-Dokument die Textmarken über „Einfügen“ > „Textmarke“ angezeigt hast. Sie sollten im Dokument sichtbar sein, um sie anzusprechen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige