Mit Excel Makro Wordvorlage öffnen und Daten von Excel nach Word kopieren
Hallo Forengemeinde,
ich hätte gerne ein Problem.
Ich soll eine automatisierte Rechnung in Excel erstellen. Das ganze ist ein Schulprojekt, welches ohne Vorgabe des Lösungsweges erstellt werden soll. Ich habe die ganze Geschichte über eine UserForm gelöst. Bei der ganzen Sache funktioniert alles ohne Probleme außer eine Kleinigkeit.
Ich möchte die gesamte Rechnung in Word exportieren. Prinzipiell funktioniert dies auch. Mir ist aber die Idee gekommen ein Vorlage mit einer optisch ansprechenderen Kopf- und Fußzeile zu nutzen. Nach längerem suchen im Netz habe ich diverse Codes zum Lösen des Problems gefunden. Leider hat kein Code die gesamt gewünschten Funktionen. Eigentlich alle Codes haben entweder eine neue Word Datei geöffnet oder eine definierte Datei.
Durch etwas herum experimentieren bin ich zu folgendem Code gekommen:
Das Programm kopiert die Rechnung in ein neues Worddokument. Bisher sind alle Versuche gescheitert eine spezielle Worddatei zu öffnen. Entweder ich wurde von Fehlermeldungen zu geschüttet oder die Vorlage wurde geöffnet und für die Rechnung wurde ein neues Dokument geöffnet.
Momentan bin ich mit meinem Latein am Ende.
Ich würde mich über etwas Hilfe sehr freuen.
Schon einmal vielen Dank für eure Bemühungen im voraus.
Mit vorweihnachtlichen Grüßen
duffman521
ich hätte gerne ein Problem.
Ich soll eine automatisierte Rechnung in Excel erstellen. Das ganze ist ein Schulprojekt, welches ohne Vorgabe des Lösungsweges erstellt werden soll. Ich habe die ganze Geschichte über eine UserForm gelöst. Bei der ganzen Sache funktioniert alles ohne Probleme außer eine Kleinigkeit.
Ich möchte die gesamte Rechnung in Word exportieren. Prinzipiell funktioniert dies auch. Mir ist aber die Idee gekommen ein Vorlage mit einer optisch ansprechenderen Kopf- und Fußzeile zu nutzen. Nach längerem suchen im Netz habe ich diverse Codes zum Lösen des Problems gefunden. Leider hat kein Code die gesamt gewünschten Funktionen. Eigentlich alle Codes haben entweder eine neue Word Datei geöffnet oder eine definierte Datei.
Durch etwas herum experimentieren bin ich zu folgendem Code gekommen:
Private Sub CommandButton5_Click()
Dim AppWord As Word.Application
Set AppWord = CreateObject("Word.Application")
AppWord.Visible = True
Sheets("Tabelle1").Range(Cells(1, 1), Cells(50, 7)).Copy
AppWord.Documents.Add
AppWord.Selection.Paste
Application.CutCopyMode = False
Set AppWord = Nothing
End Sub
Das Programm kopiert die Rechnung in ein neues Worddokument. Bisher sind alle Versuche gescheitert eine spezielle Worddatei zu öffnen. Entweder ich wurde von Fehlermeldungen zu geschüttet oder die Vorlage wurde geöffnet und für die Rechnung wurde ein neues Dokument geöffnet.
Momentan bin ich mit meinem Latein am Ende.
Ich würde mich über etwas Hilfe sehr freuen.
Schon einmal vielen Dank für eure Bemühungen im voraus.
Mit vorweihnachtlichen Grüßen
duffman521
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 156110
Url: https://administrator.de/contentid/156110
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo duffman521!
Versuchs mal so:
Wobei die Einfügzeile im Dokument schon existieren muss. D.h. per Cursor-Tasten navigierbar.
Gruß Dieter
[edit] Codezeile 22 in ein einfaches Paste geändert [/edit]
Versuchs mal so:
Const wdMove = 0 'Word-Konstanten
Const wdLine = 5
Const wdStory = 6
Const InsertLine = 4 'Word-Einfügzeile
Const DocPath = "E:\Test\Test.doc" 'Word-Dokument
Private Sub CommandButton5_Click()
Dim AppWord As Object
Set AppWord = CreateObject("Word.Application")
Sheets("Tabelle1").Range("A1:G50").Copy
With AppWord
.Visible = True
.Documents.Open DocPath
With .Selection
.HomeKey Unit:=wdStory, Extend:=wdMove 'Position 1. Zeile setzen
.MoveDown Unit:=wdLine, Count:=InsertLine 'Position n. Zeilen nach unten
.Paste
End With
End With
Set AppWord = Nothing
Application.CutCopyMode = False
End Sub
Gruß Dieter
[edit] Codezeile 22 in ein einfaches Paste geändert [/edit]
Hallo duffman521!
Im Beispielcode habe ich gleich auf die Möglichkeit hinweisen wollen, wie die Tabelle auch wahlweise in einer anderen Zeile als der 1. Zeile per Move-Anweisungen eingefügt werden kann
genauso funktionieren
Gruß Dieter
[edit] obigen Code entsprechend geändert [/edit]
Zitat von @TheEternalPhenom:
> Wobei die Einfügzeile im Dokument schon existieren muss. D.h. per Cursor-Tasten navigierbar.
Wie darf ich das verstehen?
Mhm, soll heißen, dass der MoveDown nur funktioniert, wenn die entsprechende Zeile mit den Cursor-Tasten (Pfeil-Unten) angesteuert werden kann. Z.B. Neues Dokument 4 mal Return drücken, dann hat das Dokument schon mal 5 Zeilen und mit MoveHome wird die Zeile 1 angesteuert und mit anschließendem MoveDown 4 Zeilen nach unten (= Zeile 5). Ansonsten müsste die entsprechende Zeile per Paragraphs.Add - sowas in der Art - erst erzeugt werden.> Wobei die Einfügzeile im Dokument schon existieren muss. D.h. per Cursor-Tasten navigierbar.
Wie darf ich das verstehen?
Im Beispielcode habe ich gleich auf die Möglichkeit hinweisen wollen, wie die Tabelle auch wahlweise in einer anderen Zeile als der 1. Zeile per Move-Anweisungen eingefügt werden kann
Ich nutze momentan ein Worddokument mit einr Kopf- und Fußzeile. Beim speichern des Dokumentes steht der Cursor im
eigentlichen Dokument (nicht in Kopf- oder Fußzeile) in der ersten Zeile.
Die erste Text-Zeile entspricht MoveHome.eigentlichen Dokument (nicht in Kopf- oder Fußzeile) in der ersten Zeile.
Ich erhalte in Zeile 22 die Fehlermeldung:
Word 2000 keine Ahnung? Sollte in Codezeile 22 mit:.Paste
Gruß Dieter
[edit] obigen Code entsprechend geändert [/edit]
Hallo duffman521!
War mir beim verfassen schon irgendwie klar, dass die Erklärung etwas unglücklich ausgedrückt ist
Gruß Dieter
War mir beim verfassen schon irgendwie klar, dass die Erklärung etwas unglücklich ausgedrückt ist
Jetzt ergibt alles Sinn. Funktioniert mit .Paste einwandfrei.
Freu mich zu hörenVielen Herzlichen Dank für die Hilfe.
Yepp, gern geschehenJetzt werden mich meine Klassenkameraden noch mehr hassen. *g*
Besser Dich (Streber) als mich Gruß Dieter