AW: Zwischenablage bei Bookmark einfügen VBA
07.07.2021 16:20:14
Lars
Hallo und danke für die Antwort,
ich versuche das Problem noch einmal besser zu erläutern und füge den Code so wie ich ihn bisher habe anschließend ein.
Der Code funktioniert soweit wie folgend: Aus Excel heraus wird ein Word-Dokument geöffnet und eine Word Vorlage eingefügt. Es wird ein Name für die Word Datei festgelegt. Es werden die Daten in der Exceltabelle in die Bookmarks der Word Datei in den - bisher einzigen - "Einfügebereich" eingefügt. Nun möchte ich, dass aber für alle Daten in Excel (es ist nicht nur ein Datensatz) jeweils ein weiterer Einfügebereich in der Word Datei hinzugefügt wird. Daran scheitere ich und das würde ich gerne mit Hilfe des Forums lösen. Ich habe es geschafft diesen Einfügebereich mit Bookmarks zu markieren und in die Zwischenablage einzufügen. Was ich nicht geschafft habe ist die Zwischenablage - also den zusätzlichen Einfügebereich - nun erneut im Dokument einzufügen. Stattdessen wird der Variablenname an der vorgesehenen Stelle eingefügt aber nicht der Inhalt dieser Variable in der Zwischenablage. Ich kann leider auch nach über einer Woche keinerlei Fortschritt verzeichnen und befürchte langsam mein Projekt lässt sich mit dieser Herangehensweise nicht umsetzen. Gibt es irgendeine Möglichkeit mit VBA einen Bereich eines Word Dokumentes zu kopieren und an einer anderen Stelle im Word Dokument einzufügen? Danke für jeden Tipp.
PS: ist es eventuell möglich dieses Problem alternativ zu lösen, indem man eine Word-Vorlage, die diesen Einfügebereich enthält in das aktive Word Dokument an die gewünschte Stelle (markiert durch ein Bookmark) einsetzt?
Vielen Dank!
Anbei der vollständige VBA Code:
Option Explicit
Sub CreateBasicWordReport()
'Word Library ist eingebunden, um nun die Application Word und
'nicht Excel anzusprechen, muss zunächst "Word" davor geschrie-
'ben werden, da Excel in der Prio immer über Word ist. Die
'Variable wird also wie folgend initiiert:
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdBookmark As Word.Bookmark
'weitere Variablen:
Dim strTitel As String
Dim intZeilenzahl As Integer
Dim i As Integer
Dim RangeMehrarbeitVorlage As Word.Range 'Object tut es evt. auch
Dim PlatzhalterRange As Word.Range
'Anzahl der zu lesenden Zeilen in der Exceltabelle abfragen:
Range("B2").Select
intZeilenzahl = Selection.CurrentRegion.Rows.Count
'Titel per InputBox abfragen - "CHR(13) sorgt für einen
'Zeilenumbruch in der Messagebox
strTitel = InputBox("Titel eingeben:" & Chr(13) & "(ohne Datumsangabe - diese wir automatisch am Ende des Dokumentnamens eingefügt)", "Automation Skript", "Bitte hier den Titel des neuen Dokumentes eingeben...")
'neue Word Instanz:
Set wdApp = New Word.Application 'Early binding-Beispiel
'Word sichtbar machen
'Um nicht immer wdApp.[Befehl] schreiben zu müssen, könnte man es
'in ein "with-Statement" einrahmen
wdApp.Visible = True
wdApp.Activate
'nun ein Dokument hinzufügen, damit es nicht nur grau in Word ist
'genauer: das Template soll genutzt werden
Set wdDoc = wdApp.Documents.Add("C:\Users\Dokument_Template.dotx") 'Pfad des Vorlagendokumentes an dieser Stelle
'kopieren der gewünschten Inhalte aus Excel, auswählen des ent-
'sprechenden Lesezeichens und einfügen der Inhalte:
With wdApp
'Set RangeMehrarbeitVorlage = wdDoc.Range(Start:=0, End:=10)
Set RangeMehrarbeitVorlage = wdDoc.Range( _
Start:=wdDoc.Bookmarks("Beginn_Vorlage_Mehrarbeit").Range.Start, _
End:=wdDoc.Bookmarks("Ende_Vorlage_Mehrarbeit").Range.End)
RangeMehrarbeitVorlage.Copy
'damit wird in RangeMehrarbeitVorlage der gewünschte Inhalt reinkopiert
'wdDoc.Paste Destination:=wdDoc.Bookmarks("Platzhalter_Mehrarbeit")
wdDoc.RangeMehrarbeitVorlage.Paste
'hier ist mein Problem: so funktioniert das mit dem Einfügen aus der Zwischenablage nicht
'nächster Versuch:
Set PlatzhalterRange = wdDoc.Bookmarks("Platzhalter_Mehrarbeit").Range
PlatzhalterRange.Text = wdDoc.Bookmarks("Platzhalter_Mehrarbeit").Range.Text & "RangeMehrarbeitVorlage"
wdDoc.Bookmarks.Add "Platzhalter_Mehrarbeit", PlatzhalterRange
'es wird nur der Variablenname an die richtige Stelle im Dokument eingefügt und das was eingefügt
'werden soll landet in der Zwischenablage aber nicht Eingefügt im Dokument -> ebenfalls keine Lösung...
'weiter folgender Code (Einfügen aus Excel nach Word) funktioniert und ist nicht relevant für die Frage
End With
With wdApp
For i = 2 To intZeilenzahl + 1
If Worksheets("Tabelle1").Cells(i, 4).Value "RB" Then
wdDoc.Bookmarks("Nachname_Mehrarbeit").Range = Range("C2").Value
wdDoc.Bookmarks("Nachname_Mehrarbeit2").Range = Range("C2").Value
wdDoc.Bookmarks("Nachname_Mehrarbeit3").Range = Range("C2").Value
wdDoc.Bookmarks("Vorname_Mehrarbeit").Range = Range("B2").Value
wdDoc.Bookmarks("Vorname_Mehrarbeit2").Range = Range("B2").Value
wdDoc.Bookmarks("Vorname_Mehrarbeit3").Range = Range("B2").Value
Else
wdDoc.Bookmarks("Nachname_Rufbereitschaft").Range = Range("C2").Value
wdDoc.Bookmarks("Nachname_Rufbereitschaft2").Range = Range("C2").Value
wdDoc.Bookmarks("Nachname_Rufbereitschaft3").Range = Range("C2").Value
wdDoc.Bookmarks("Vorname_Rufbereitschaft").Range = Range("B2").Value
wdDoc.Bookmarks("Vorname_Rufbereitschaft2").Range = Range("B2").Value
wdDoc.Bookmarks("Vorname_Rufbereitschaft3").Range = Range("B2").Value
End If
Next
.ActiveDocument.SaveAs2 Filename:="C:\Users...." & strTitel & " " & Format(Now, "dd-mm-yyyy") & ".docx"
End With
End Sub