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

Forumthread: aus Excel über CommandButton Worddokumente drucken

aus Excel über CommandButton Worddokumente drucken
27.02.2017 11:06:14
Andreas
Hallo Excelfreunde,
Ich habe mal wieder ein Problem wo ich keine geeignete Lösung dazu hinbekomme.
folgende 3 Makros werden einzeln je über einen CommandButton ausgeführt.
Sub WordDrucken_Unterlagen1()
Dim wrdApp As Object
Dim wrdDoc As Object
Dim sFile As String
sFile = Range("Z1").Value           ' Dateiname steht in Tabelle "Daten aus Verbis" Zelle Z1
If Dir(sFile) = "" Then
Beep
MsgBox "Worddokument wurde nicht gefunden!"
Else
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open(sFile)
wrdDoc.PrintOut
Application.Wait Now + TimeSerial(0, 0, 5)
wrdApp.Quit
Set wrdDoc = Nothing
Set wrdApp = Nothing
End If
'appWord.ActiveDocument.Close False          'dieser Aufruf erzeugt bei schließen eine  _
Debugger Fehlermeldung
End Sub
Sub WordDrucken_Fahrtkosten()
Dim wrdApp As Object
Dim wrdDoc As Object
Dim sFile As String
sFile = Range("Z2").Value           ' Dateiname steht in Tabelle "Daten aus Verbis" Zelle Z2
If Dir(sFile) = "" Then
Beep
MsgBox "Worddokument wurde nicht gefunden!"
Else
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open(sFile)
wrdDoc.PrintOut
Application.Wait Now + TimeSerial(0, 0, 5)
wrdApp.Quit
Set wrdDoc = Nothing
Set wrdApp = Nothing
End If
'appWord.ActiveDocument.Close False          'dieser Aufruf erzeugt bei schließen eine  _
Debugger Fehlermeldung
End Sub

Sub WordDrucken_Entscheidung()
Dim wrdApp As Object
Dim wrdDoc As Object
Dim sFile As String
sFile = Range("Z3").Value           ' Dateiname steht in Tabelle "Daten aus Verbis" Zelle Z3
If Dir(sFile) = "" Then
Beep
MsgBox "Worddokument wurde nicht gefunden!"
Else
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open(sFile)
wrdDoc.PrintOut
Application.Wait Now + TimeSerial(0, 0, 5)
wrdApp.Quit
Set wrdDoc = Nothing
Set wrdApp = Nothing
End If
'appWord.ActiveDocument.Close False          'dieser Aufruf erzeugt bei schließen eine  _
Debugger Fehlermeldung
End Sub
Das Makro macht folgendes: Es öffnet mir ein Worddokument mit Pfad in Zelle "Z1" (in meinem 1.Makro wäre das Z:\Textbaustein\BC1_UnterlagenAR.docx
das zweite Makro mit Pfad in Zelle "Z2" Z:\Textbaustein\BC2_FahrtkostenAR.docx
sowie das 3. Makro mit Pfad in Zelle "Z3" Z:\Textbaustein\BC3_EntscheidungAR.docx
Wie gesagt jedes einzelne Makro öffnet bei klick auf den entsprechenden CommandButton das zugehörige Worddokument, druckt es aus und schließt Word wieder.
Dies funktioniert einzeln bereits.
Ich möchte aber erreichen das ich nur einen CommandButton anklicke und mir dabei alle 3 Worddokumente nacheinander ausgedruckt werden.
Wie kann ich das in meinem Fall lösen?
Hatte die Idee alle 3 Makro über eine If Schleife laufen zu lassen.
Hier mal mein Code Ansatz der aber nicht funktioniert. (Das Makro bleibt nach dem Ausdruck des 1. Dokumentes hängen und ich kann nicht mehr weiter arbeiten)
Hier mein Ansatz:
Sub WordDrucken_mein Test()
Dim wrdApp As Object
Dim wrdDoc As Object
Dim sFile As String
sFile = Range("Z1").Value           ' Dateiname steht in Tabelle "Daten " Zelle Z1  ( _
BC1_UnterlagenAR.docx
If Dir(sFile) = "" Then
Beep
MsgBox "Worddokument wurde nicht gefunden!"
Else
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open(sFile)
wrdDoc.PrintOut
Application.Wait Now + TimeSerial(0, 0, 5)
wrdApp.Quit
Set wrdDoc = Nothing
Set wrdApp = Nothing
End If
sFile = Range("Z2").Value           ' Dateiname steht in Tabelle "Daten " Zelle Z2  ( _
BC2_FahrtkostenAR.docx)
If Dir(sFile) = "" Then
Beep
MsgBox "Worddokument wurde nicht gefunden!"
Else
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open(sFile)
wrdDoc.PrintOut
Application.Wait Now + TimeSerial(0, 0, 5)
wrdApp.Quit
Set wrdDoc = Nothing
Set wrdApp = Nothing
End If
sFile = Range("Z3").Value           ' Dateiname steht in Tabelle "Daten " Zelle Z3 ( _
BC3_EntscheidungAR.docx)
If Dir(sFile) = "" Then
Beep
MsgBox "Worddokument wurde nicht gefunden!"
Else
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open(sFile)
wrdDoc.PrintOut
Application.Wait Now + TimeSerial(0, 0, 5)
wrdApp.Quit
Set wrdDoc = Nothing
Set wrdApp = Nothing
End If
End Sub
Für Eure Hilfe wäre ich sehr dankbar
liebe Grüße im voraus
Andreas
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: aus Excel über CommandButton
27.02.2017 12:24:32
ede
Hallo Andreas,
dann ruf doch sie doch nacheinander auf:

Sub WordDrucken_mein Test()
call WordDrucken_Unterlagen1()
call WordDrucken_Fahrtkosten()
End Sub

gruss
AW: aus Excel über CommandButton
27.02.2017 12:37:23
Andreas
Hallo ede,
da passiert genau das gleiche das erste Dokument wird gedruckt dann hängt sich das Makro auf und es passiert nichts mehr.
Ich denke das liegt daran das Word nach jedem Makro Aufruf geschlossen wird und durch die Zeitverzögerung es wahrscheinlich dann zu einem Konflikt kommt beim Aufruf des nächsten Makros um die nächste Word Datei zu öffnen.
trotzdem vielen Dank für deinen Lösungsansatz.
Brauche deshalb immer noch Hilfe
Gruß Andreas
Anzeige
AW: aus Excel über CommandButton
27.02.2017 12:57:15
ede
Hallo noch mal,
anbei mal ein Beispiel, wie ich es mache, musst es natürlich auf dein Beispiel anpassen:

Sub Wordbriefedrucken()
Dim AppWord As Object
'Fehlerbehandlung aktivieren
On Error Resume Next
'Word öffnen
Set AppWord = CreateObject("Word.application")
' ---1 Brief
With AppWord
'Programm Word und die Vorlage werden mit dem Ausdruck "xlMaximized" maximiert geöffnet. _
Ebenfalls kann der Ausdruck "xlMinimized" für ein minimiertes Fenster oder "xlNormal" für _
eine normale Fenstergröße verwendet werden.
'Damit das Programm Word und die Vorlage z.B. wenn man die Vorlage nur ausdrucken möchte, _
und Word somit unsichtbar haben möchte, den nachfolgenden Befehl mit einem Hochkomma ( ' ) _
auskommentieren. Dann wird Word nicht eingeblendet. Wird der Befehl auskommentiert, muss _
aber am Ende des Makros durch den Befehl ".Application.Quit (True)" Word wieder geschlossen _
werden.
.Visible = True: .WindowState = xlMaximized
'Worddokument öffnen
.Documents.Add "c:\temp\Musterdokument.docx"
'Befehl um das aktive Worddokument zu drucken
.PrintOut
'Befehl um das Dokument zu schliessen ohne zu speichern
' .ActiveDocument.Close savechanges:=False
'Befehl um Word wieder zu schließen
.Application.Quit (True)
End With
' ---2. Brief
With AppWord
.Visible = True: .WindowState = xlMaximized
'Worddokument öffnen
.Documents.Add "c:\temp\Musterdokument.doc"
'Befehl um das aktive Worddokument zu drucken
.PrintOut
'Befehl um das Dokument zu schliessen ohne zu speichern
' .ActiveDocument.Close savechanges:=False
'Befehl um Word wieder zu schließen
.Application.Quit (True)
End With
'Zuordnung zum Objekt "AppWord" aufheben
Set AppWord = Nothing
End Sub

Anzeige
AW: aus Excel über CommandButton
27.02.2017 13:59:04
Andreas
Hallo ede,
erst mal vielen Dank für deine Mühe.
wird mir das mal anschauen und melde mich wieder wenn es geklappt hat
Gruß Andreas
AW: aus Excel über CommandButton
28.02.2017 12:23:51
Andreas
Hallo ede,
Hallo Excelgemeinde,
Möchte mich nochmals für die Unterstützung bedanken,
Möchte Euch trotzdem meine Lösung nicht vorenthalten.
Habe es jetzt wie folgt gelöst.
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub Sample_1()
Dim objWord As Object, docWord As Object
Dim strPath As String
Dim hwnd As Long
Dim wrdApp As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
strPath = "Z:\Textbaustein\BC1_UnterlagenAR.docx"
Set docWord = objWord.Documents.Open(Filename:=strPath, ReadOnly:=True)
hwnd = FindWindow("OpusApp", vbNullString)
If hwnd > 0 Then
SetForegroundWindow (hwnd)
docWord.PrintOut copies:=CStr(Range("Y1").Value)
'docWord.Quit
Set docWord = Nothing
Set wrdApp = Nothing
End If
End Sub
Sub Sample_2()
Dim objWord As Object, docWord As Object
Dim strPath As String
Dim hwnd As Long
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
strPath = "Z:\Textbaustein\BC2_FahrtkostenAR.docx"
Set docWord = objWord.Documents.Open(Filename:=strPath, ReadOnly:=True)
hwnd = FindWindow("OpusApp", vbNullString)
If hwnd > 0 Then
SetForegroundWindow (hwnd)
'docWord.PrintOut copies:=CStr(Range("Y2").Value)
docWord.PrintOut
End If
End Sub Sub Sample_3()
Dim objWord As Object, docWord As Object
Dim strPath As String
Dim hwnd As Long
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
strPath = "Z:\Textbaustein\BC3_EntscheidungAR.docx"
Set docWord = objWord.Documents.Open(Filename:=strPath, ReadOnly:=True)
hwnd = FindWindow("OpusApp", vbNullString)
If hwnd > 0 Then
SetForegroundWindow (hwnd)
'docWord.PrintOut copies:=CStr(Range("Y3").Value)
docWord.PrintOut
End If
End Sub
Private Sub CommandButton2_Click()
Call Sample_1
Call Sample_2
Call Sample_3
End Sub

Also so funktioniert es für meine Bedürfnisse.
Ein kleines Manko ist aber noch daran.
Hätte gern noch das mir die Worddokumente nach dem Ausdruck automatisch geschlossen werden und Word anschließend beendet wird.
Wenn jemand dazu noch einen Vorschlag hätte oder den Code dementsprechend anpassen könnte wäre das für mich die perfekte Lösung.
Trotzdem vielen Dank
liebe Grüße Andreas
Anzeige
AW: aus Excel über CommandButton
01.03.2017 09:01:45
ede
Hallo nochmal,
du hast es doch selber aus kommentiert...
'docWord.Quit
Gruss
Ede
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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