VBA-Programierung / Drucken und Speichern / Brücke zwischen Excel und Word

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von User0101.

    VBA-Programierung / Drucken und Speichern / Brücke zwischen Excel und Word

    Hallo zusammen,

    ich habe ein Problem oder eine Aufgabe die ich nicht alleine gelöst bekomme.Ich habe mich schon ein bisschen eingelesen aber viel weiter hat mich das nicht gebracht daher dachte ich frage ich mal hier nach.
    Das Problem was ich habe oder die Programierung die ich benötige betrifft eine Namens Tabelle bei Excel aus der mit einem Klick eventuell auf eine Schaltfläche auf mehrere Word Dokumente zugegriffen wird und diese dann in einem Drucker + Fach den ich selbst wählen kann gedruckt wird.
    Beispiel: Es soll immer auf den untersten(neuesten) Empfänger sagen wir Empfänger 1 der Excel Tabelle zugegriffen werden. Und dann die Dementsprechenden Word Dokumente zum Beispiel Dokument 1, Dokument 2 und Dokument 3 jeweils mit den Daten des Empfängers 1 (Name, Vorname,Straße, Plz & Ort) Speichern und direkt Drucken.Und wenn ich dann einen neuen Empfänger sagen wir Empfänger 2 unter den Empfänger 1 eintrage und wieder die Taste betätige sollen die Word Dokumente(1,2 und 3) mit den Daten des Empfängers 2 gespeichert und bei einem Drucker + Fach den ich wähle kann da wir Netzwerk Drucker haben gedruckt werden und so weiter.
    Ich hoffe aber dass das Problem so gut verständlich ist.

    Vielen Dank schon mal für eure Hilfe

    *Tags in den Titel gepackt, was wesentlich mehr Sinn ergibt*
    Dateien
    • Dokument3.docx

      (39,86 kB, 199 mal heruntergeladen, zuletzt: )
    • Namensliste.xlsx

      (12,75 kB, 312 mal heruntergeladen, zuletzt: )
    • Dokument1.docx

      (39,85 kB, 191 mal heruntergeladen, zuletzt: )
    • Dokument2.docx

      (39,85 kB, 249 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Es geht darum das nicht jeder die selben Dokumente bekommt. Und wenn ich den Serienbrief benutzen würde und die Dokumente zusammenfügen würde müsste ich mir 20 verschiedene Versionen je nach Empfänger zusammenbasteln. Und wenn sich dann noch ein Dokument verändert muss ich es in jedem zusammengefügten Dokument ändern. Daher benötige ich eine Programmierung.
    Hallo zusammen,
    ich habe jetzt einen ersten Ansatz erarbeitet aber das ist noch nicht so wie ich es mir vorgestellt habe.
    Vielleicht hat ja noch jemand Tipps oder Lösungsvorschläge für mich.

    Visual Basic-Quellcode

    1. ​Sub Dokumente_erstellen()
    2. 'Datei mit neuer Anschrift erstellen
    3. Dim objWord As Object
    4. Dim D1 As String
    5. Dim D2 As String
    6. Dim D3 As String
    7. Dim Ziel1 As String
    8. Dim Ziel2 As String
    9. Dim Ziel3 As String
    10. 'Namen und Speicherort für die Dokumente auswählen
    11. Ziel1 = "O:\Aufgaben\VBA\Zielordner\D1_Name1"
    12. Ziel2 = "O:\Aufgaben\VBA\Zielordner\D2_Name1"
    13. Ziel3 = "O:\Aufgaben\VBA\Zielordner\D3_Name1"
    14. 'Dokumente diege erstellt werden sollen
    15. D1 = "O:\Aufgaben\VBA\Dokument1.docx"
    16. D2 = "O:\Aufgaben\VBA\Dokument2.docx"
    17. D3 = "O:\Aufgaben\VBA\Dokument3.docx"
    18. Set objWord = CreateObject("Word.application")
    19. With objWord
    20. .Application.Visible = True
    21. .Application.Documents.Open (D1)
    22. .Application.Documents.Open (D2)
    23. .Application.Documents.Open (D3)
    24. End With
    25. Set objWord = Nothing
    26. 'Dokument1 Speichern unter
    27. Documents("Dokument1.docx").Activate
    28. ActiveDocument.SaveAs2 Ziel1
    29. ActiveDocument.Close
    30. 'Dokument2 Speichern unter
    31. Documents("Dokument2.docx").Activate
    32. ActiveDocument.SaveAs2 Ziel2
    33. ActiveDocument.Close
    34. 'Dokument3 Speichern unter
    35. Documents("Dokument3.docx").Activate
    36. ActiveDocument.SaveAs2 Ziel3
    37. ActiveDocument.Close
    38. End Sub


    Vielen Dank schonmal :)
    Was du bisher hast, ist drei Dokumente zu öffnen und unter anderem Namen zu speichern.
    Das könnte so funktionieren.
    Aber alles was zwischen Öffnen und Speichern liegt, fehlt ja noch.

    Im Übrigen ist dein bisheriger Code noch optimierbar.

    Visual Basic-Quellcode

    1. ​Sub Dokumente_erstellen()
    2. 'Datei mit neuer Anschrift erstellen
    3. Dim Word As Object, Doc1 As Object, Doc2 As Object, Doc3 As OBject
    4. Dim D1 As String
    5. Dim D2 As String
    6. Dim D3 As String
    7. Dim Ziel1 As String
    8. Dim Ziel2 As String
    9. Dim Ziel3 As String
    10. 'Namen und Speicherort für die Dokumente auswählen
    11. Ziel1 = "O:\Aufgaben\VBA\Zielordner\D1_Name1"
    12. Ziel2 = "O:\Aufgaben\VBA\Zielordner\D2_Name1"
    13. Ziel3 = "O:\Aufgaben\VBA\Zielordner\D3_Name1"
    14. 'Dokumente die erstellt werden sollen
    15. D1 = "O:\Aufgaben\VBA\Dokument1.docx"
    16. D2 = "O:\Aufgaben\VBA\Dokument2.docx"
    17. D3 = "O:\Aufgaben\VBA\Dokument3.docx"
    18. Set Word = CreateObject("Word.Application")
    19. Word.Application.Visible = True
    20. Set Doc1 = Word.Documents.Open(D1)
    21. Set Doc2 = Word.Documents.Open(D2)
    22. Set Doc3 = Word.Documents.Open(D3)
    23. 'jetzt hast du die Word-Dokumente (Doc1, Doc2, Doc3) und kannst sie modifizieren
    24. 'Dokument1 Speichern unter
    25. Doc1.SaveAs2 Ziel1
    26. Doc1.Close
    27. 'Dokument2 Speichern unter
    28. Doc2.SaveAs2 Ziel2
    29. Doc2.Close
    30. 'Dokument3 Speichern unter
    31. Doc3.SaveAs2 Ziel3
    32. Doc3.Close
    33. ' Word beenden
    34. Word.Quit
    35. End Sub
    Mit ActiveDocument zu arbeiten ist gefährlich und unelegant.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für die Hilfe. Funktioniert alles Top.

    Hab jetzt nur noch ein anliegen mit dem Drucken.
    Hab echt viele Berichte im Internet dazu gefunden aber bei mir hat es nicht funktioniert.

    Visual Basic-Quellcode

    1. Sub Drucken_Dokumente()
    2. 'Dokument 1
    3. Dim appWord As Object
    4. Dim strDoc1 As String
    5. strDoc1 = "O:\Aufgaben\VBA\Zielordner\D1_Name1.docx"
    6. Set appWord = CreateObject("Word.Application")
    7. appWord.Documents.Open strDoc1
    8. appWord.PrintOut Filename:=strDoc1
    9. appWord.Quit
    10. Set appWord = Nothing
    11. 'Dokument 2
    12. Dim strDoc2 As String
    13. strDoc2 = "O:\Aufgaben\VBA\Zielordner\D2_Name1.docx"
    14. Set appWord = CreateObject("Word.Application")
    15. appWord.Documents.Open strDoc2
    16. appWord.PrintOut Filename:=strDoc2
    17. appWord.Quit
    18. Set appWord = Nothing
    19. 'Dokument3
    20. Dim strDoc3 As String
    21. strDoc3 = "O:\Aufgaben\VBA\Zielordner\D3_Name1.docx"
    22. Set appWord = CreateObject("Word.Application")
    23. appWord.Documents.Open strDoc3
    24. appWord.PrintOut Filename:=strDoc3
    25. appWord.Quit
    26. Set appWord = Nothing
    27. End Sub


    So habe ich es da druckt es dann die Dokumente aber nur auf dem Standartdrucker.
    Hab alles probiert aber bekomme es nicht hin einen anderen Drucker anzusteuern mir wird dann immer ein Fehler angezeigt.

    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    User0101 schrieb:

    Hab alles probiert aber bekomme es nicht hin einen anderen Drucker anzusteuern mir wird dann immer ein Fehler angezeigt.
    Ich perönlich habe ein Problem mit der Aussage, dass man alles probiert hat. Denn alles probieren würde bedeuten, jahrelang beschäftigt zu sein (denn es gibt extrem viel Code), 2. wäre dann aber auch bestimmt die Lösung dabei gewesen. Zum anderen: Was genau hast Du denn so "alles" probiert? Und welche Fehlermeldung kommt bei welchem Versuch? Wo ist denn z.B. die Codezeile, wo Du ActivePrinter setzt, um den Drucker festzulegen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Alles probiert heist in dem Fall mit dem wissen was ich mir in den letzten 2 Wochen (nicht mehrere Jahre)angeeignet habe ca. 20 verschiedene Code schnipsel aus dem Netz versucht und immer kamen Fehlermeldungen wie Laufzeitfehler 1004 oder Laufzeitfehler 4198. Aber passt schon ich krieg das bestimmt hin :thumbsup:

    Visual Basic-Quellcode

    1. Private Sub CommandButton2_Click()
    2. Dim Drucker As String
    3. Drucker = ActivePrinter
    4. ActivePrinter = "FreePDF XP"
    5. Application.PrintOut FileName:="", Range:=0, Item:=0, Copies:=1, Pages:="", PageType:=0, ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
    6. ActivePrinter = Drucker
    7. End Sub
    Adaptiert von hier: office-loesung.de/ftopic68238_0_0_asc.php
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --