Office - Word, Excel und Co. 9.742 Themen, 41.386 Beiträge

Excel/VBA Druckmenü

incognito_23 / 14 Antworten / Baumansicht Nickles

Hallo,

ich (und das Internet) arbeite/n zur Zeit an einem Druckmenü. Im Grunde funktioniert es auch. Ich habe jedoch noch ein Problem mit der Anzahl der Ausdrucke. Und zwar soll über den Wert einer Zelle, die Anzahl der Ausdrucke definiert werden. 

Das Modul sieht wie folgt aus:

Option Explicit

Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nshowcmd As Long) As Long

Public hWnd As Long
Public Const SW_HIDE = 0 ' Versteckt öffnen
Public Const SW_MAXIMIZE = 3 ' Maximiert öffnen
Public Const SW_MINIMIZE = 6 ' Minimiert öffnen
Public Const SW_NORMAL = 1
Public Const SW_RESTORE = 9
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNOACTIVATE = 4

Public Function DateiOeffnen(Aktion As String, Pfad As String, _
Ansicht As Long) As Boolean
Call ShellExecute(hWnd, Aktion, Pfad, "", "", Ansicht)
End Function

Und die jeweiligen Buttons sind wie folgt aufgebaut: 

Private Sub Button1_Click()
Dim Pfad As String
Pfad = "Z:\xxx\test.pdf"
DateiOeffnen "print", Pfad, SW_MAXIMIZE
End Sub

Nun dachte ich mir, dass man einfach einen Loop einbauen kann:

Private Sub Mathetest_Click()
Dim Pfad As String
Dim i As Long
For i = Worksheets("2").Cells(1, 1).Value To Worksheets("2").Cells(1, 1).Value
Pfad = "Z:\bae\Druckmenü\Dokumente\Testseite.pdf"
DateiOeffnen "print", Pfad, SW_HIDE
Next i
End Sub

Steht nun eine 2 in der Zelle, öffnet sich Acrobat Reader auch zweimal aber druckt nur einmal die PDF.

Hat vielleicht jemand ein passenden Ratschlag für mein Problem?

bei Antwort benachrichtigen
gelöscht_323936 incognito_23 „Excel/VBA Druckmenü“
Optionen

Es gab bei VBA die Option Schrittweise ausführen. Dabei kann man sich bestimmte Werte anzeigen lassen.

Ich habe nur sehr gelegentlich und vor langer Zeit mal mehr VBA betrieben. Also kann es sein, dass es das nicht mehr gibt?

bei Antwort benachrichtigen
mumpel1 incognito_23 „Excel/VBA Druckmenü“
Optionen

Adobe kann eine Datei immer nur einmal öffnen, und somit nur einmal drucken. Du müsstest den Adobe-Reader erstmal schließen bevor Du ihn erneut mit der selben Datei zum Drucken startest.

bei Antwort benachrichtigen
gelöscht_165516 incognito_23 „Excel/VBA Druckmenü“
Optionen

Hallo,

siehe den Hinweis von Anne:

Es gab bei VBA die Option Schrittweise ausführen.

Diese Funktion gibt es immer noch, um dem Fehler auf die Spur zukommen und dabei kannst du feststellen, dass deine For ... Next Schleife, die falschen Werte erhällt und bei For und To mit gleichem Wert, gibt es nur einen Durchlauf der Schleife.

Steht in der Zelle A1 die 2:
For i = Worksheets("2").Cells(1, 1).Value To Worksheets("2").Cells(1, 1).Value

2 To 2 = 1x, da B1 und A1 gleich ist

Steht in der Zelle A1 die 1 und in der Zelle B1 die 2:
For i = Worksheets("2").Cells(1, 1).Value To Worksheets("2").Cells(1, 2).Value

1 To 2 = 2x, da B1 um 1 größer ist, als A1

Steht in der Zelle A1 die 2 und in der Zelle B1 die 3:
For i = Worksheets("2").Cells(1, 1).Value To Worksheets("2").Cells(1, 2).Value

2 To 3 = 2x, da B1 ebenfalls um 1 größer ist, als A1

Ändere deine Befehlszeile, dann sollte es funktionieren:
For i = 1 To Worksheets("2").Cells(1, 1).Value

Ist Worksheets("2").Cells(1, 1).Value kleiner 1, gibt es keinen For ... Next Durchlauf.

bei Antwort benachrichtigen
gelöscht_323936 gelöscht_165516 „Hallo, siehe den Hinweis von Anne: Diese Funktion gibt es immer noch, um dem Fehler auf die Spur zukommen und dabei kannst ...“
Optionen

Als Hinweis - siehe die Nachricht von @mumpel1: in der Schleife muss(te) der AcrobatReader jedesmal geschlossen werden, damit der nächste Ausdruck funktioniert. 

Ich kenne das Problem von einer Aufgabe vor längerer Zeit auch.
Und weil das sonst so lange gedauert hätte, habe ich extra für solche Ausdrucke die Anzahl der gewünschten Ausdrucke im Drucker eingestellt - vom Rechner aus- , dann wurde der Bericht entsprechend oft gedruckt.

Aber wenn die Anzahl variabel aus dem aktuellen Job eingelesen wird, müsste eben das Programm AcrobatReader nach jedem Aufruf geschlossen werden.

bei Antwort benachrichtigen
gelöscht_165516 gelöscht_323936 „Als Hinweis - siehe die Nachricht von @mumpel1: in der Schleife muss te der AcrobatReader jedesmal geschlossen werden, ...“
Optionen

Hallo Anne,

mit der vorhandenen For ... Next Schleife, gibt es nur einen Durchlauf, egal ob in der Zelle 1 oder 100 steht.

Verwende selbst nicht das Programm AcrobatReader, sondern Nitro.
Ohne eine Beispieldatei den Code testen,  da gibt es genug andere Fehlerquellen, das ist das Schließen des AcrobatReader, das kleinste Problem.

bei Antwort benachrichtigen
mumpel1 gelöscht_165516 „Hallo Anne, mit der vorhandenen For ... Next Schleife, gibt es nur einen Durchlauf, egal ob in der Zelle 1 oder 100 steht. ...“
Optionen

Es besteht auch die Möglichkeit mit dem PDF-Creator zu arbeiten. Der kann per VBA gesteuert werden. Beispielcode: https://www.rholtz-office.de/vbacodes/PDFCreatorOutlook4.html

bei Antwort benachrichtigen
gelöscht_165516 mumpel1 „Es besteht auch die Möglichkeit mit dem PDF-Creator zu arbeiten. Der kann per VBA gesteuert werden. Beispielcode: ...“
Optionen

Hallo mumpel1,

oder den mit Office installierten "Microsoft Print to PDF" verwenden,
da gibt es das Programm AcrobatReader schließen Problem nicht,
der druckt die angegebene Anzahl an Kopien fortlaufend,
fragt bei meinem Testmakro nur nach dem nächsten Dateinamen.

'Ein Beispiel alle installierte Drucker auslesen von René

'ACHTUNG IST DER DOWNLOAD- LINK
'https://www.herber.de/bbs/user/26823.zip


Sub Den_Standarddrucker_auslesen()
    MsgBox Application.ActivePrinter

End Sub


Sub Drucken_PDF()
  Dim strDruckerAktiv   As String
  Dim strDruckerPDF     As String
  Dim anz_Ausdrucke     As Integer
 
  'Den aktiven Drucker merken
  strDruckerAktiv = Application.ActivePrinter
 
  'Bei meiner installierter Druckerliste,
  'den Microsoft- PDF- Drucker merken
  strDruckerPDF = "Microsoft Print to PDF auf Ne02:"
 
  anz_Ausdrucke = Worksheets("2").Range("A1").Value
 
  'Den PDF- Drucker übergeben
  Application.ActivePrinter = strDruckerPDF
 
  'Ausdruck starten.
  ActiveSheet.PrintOut Copies:=anz_Ausdrucke, preview:=False
 
  'Auf den zuvor aktiven Drucker zurücksetzen
  Application.ActivePrinter = strDruckerAktiv

End Sub

Siche gibt es auch die Möglichkeit, die Dateinamen in einer Tabelle zu hinterlegen und die Anzahl der Dateinamen als Copies:=anz_Ausdrucke zu übergeben.

bei Antwort benachrichtigen
mumpel1 gelöscht_165516 „Hallo mumpel1, oder den mit Office installierten Microsoft Print to PDF verwenden, da gibt es das Programm AcrobatReader ...“
Optionen
oder den mit Office installierten "Microsoft Print to PDF"

Da wäre es besser mit ExportAsFixedFormat, da kann man ähnlich wie bei "PrintOut" noch Parameter mitgeben. Die integrierte PDF-Funktion ist aber extrem minimal, die bietet keinerlei zusätzliche Parameter(Drucksperre, Screenreader, Kennwörter etc. pp.), und arbeitet auch sonst nicht sehr sauber (nicht selten gibt es Probleme wenn Bilder in die PDF-Datei integriert werden sollen, und auch mal Probleme mit dem Einbetten von Schriftarten).

bei Antwort benachrichtigen
mawe2 mumpel1 „Es besteht auch die Möglichkeit mit dem PDF-Creator zu arbeiten. Der kann per VBA gesteuert werden. Beispielcode: ...“
Optionen
Es besteht auch die Möglichkeit mit dem PDF-Creator zu arbeiten. Der kann per VBA gesteuert werden.

Der Threadstarter möchte aber keine PDF erzeugen sondern eine vorhandene PDF drucken.

bei Antwort benachrichtigen
mumpel1 mawe2 „Der Threadstarter möchte aber keine PDF erzeugen sondern eine vorhandene PDF drucken.“
Optionen

Dann kann er die Datei auch manuell drucken.

bei Antwort benachrichtigen
mawe2 mumpel1 „Dann kann er die Datei auch manuell drucken.“
Optionen

Das habe ich von Anfang an auch gedacht.

Aber er will es halt aus Excel/VBA heraus drucken...

bei Antwort benachrichtigen
gelöscht_323936 gelöscht_165516 „Hallo Anne, mit der vorhandenen For ... Next Schleife, gibt es nur einen Durchlauf, egal ob in der Zelle 1 oder 100 steht. ...“
Optionen
gibt es nur einen Durchlauf

Dass das in Sub Mathetest keine Schleife ist habe ich auch gesehen und deshalb nicht separat sondern auf Deinen Beitrag geantwortet.
@incognito_23 wird das schon zum Drucken bringen.

bei Antwort benachrichtigen
gelöscht_165516 incognito_23 „Excel/VBA Druckmenü“
Optionen

Hallo,

Die Anfrage von incognito_23, am 12.03.2020, 12:33

ich (und das Internet) arbeite/n zur Zeit an einem Druckmenü. Im Grunde funktioniert es auch. Ich habe jedoch noch ein Problem mit der Anzahl der Ausdrucke. Und zwar soll über den Wert einer Zelle, die Anzahl der Ausdrucke definiert werden.

Das Modul sieht wie folgt aus:
Nachfolgend sein Makro..............................

Als letzte Infozeilen von ihm:
Steht nun eine 2 in der Zelle, öffnet sich Acrobat Reader auch zweimal aber druckt nur einmal die PDF.

Hat vielleicht jemand ein passenden Ratschlag für mein Problem?

12 Antworten von Nicklesmitgliedern, außer der Anfrage von incognito_23, kam keine weitere Reaktion von incognito_23.

Mein Vorschlag, warten wir doch einfach einmal ab, bis sich incognito_23 wieder meldet und uns eine Antwort gibt und seine Excelversion mitteilt, am besten noch eine Beispieldatei liefert.

bei Antwort benachrichtigen
incognito_23 gelöscht_165516 „Hallo, Die Anfrage von incognito_23, am 12.03.2020, 12:33ich und das Internet arbeite/n zur Zeit an einem Druckmenü. Im ...“
Optionen

Danke für die ganzen Antworten. Aufgrund der aktuellen Corona-Situation waren momentan meine Arbeitsschwerpunkte woanders von Nöten und ich konnte noch nicht alle Hinweise ausprobieren.

Im Grunde soll das Druckmenü den Mitarbeitern ermöglichen, dass für bestimmte "Events" alle nötigen Dokumente auf einen Schlag ausgedruckt werden. Natürlich dient es auch als eine Übersicht, welche erweiterbar sein soll. Da sich auf allen Rechner Microsoft Office Pro Plus 2013 befindet, dachte ich mir, dass Excel eine gute Lösungsbasis für mein Vorhaben ist.

Da ich immer nur ab und an mit Excel arbeite ist mein Wissen nicht das Ausgeprägteste. Sorry dafür.

Anbei meine Datei - > Druckmenü.xlsm

bei Antwort benachrichtigen