Autor
|
Thema: mehrere pdfs drucken (1123 mal gelesen)
|
Enza Mitglied
Beiträge: 27 Registriert: 04.06.2007 Excel 2003
|
erstellt am: 24. Jul. 2009 12:17 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich möchte aus Excel eine Liste von pdfs drucken lassen. In S_print wird der Pfadname gespeichert. Jetzt treten zwei Probleme auf: Wenn ich nicht nach jedem Druckaufruf 20 Sekunden warte, werden einige Dateien gar nicht ausgedruckt. Kann man das Programm trotzdem irgendwie beschleunigen? Und bei einigen Dateien wird nicht die komplette Seite ausgedruckt, sondern nur ein Ausschnitt. Wie kann ich der Druckfunktion sagen, dass der gesamte Seiteninhalt gedruckt werden soll? Code:
Option ExplicitPrivate Declare Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameA" ( _ ByVal lpszLongPath As String, _ ByVal lpszShortPath As String, _ ByVal cchBuffer As Long) As Long Private Declare 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 Private Declare Function GetActiveWindow Lib "user32.dll" () As Long Private Const MAX_PATH = 260& Private Const SW_HIDE = 0& Sub Drucken() ... If S_print <> "File not found" Then 'Datei Drucken strShortPath = Space(MAX_PATH) GetShortPathName S_print, strShortPath, MAX_PATH ShellExecute GetActiveWindow, "print", strShortPath, "", "", SW_HIDE Application.Wait Now + TimeSerial(0, 0, 20) End If ... End Sub
Vielen Dank für eure Hilfe! Insa Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HTBU Mitglied Konstrukteur
Beiträge: 19 Registriert: 05.03.2008 Inventor 2008
|
erstellt am: 24. Jul. 2009 13:16 <-- editieren / zitieren --> Unities abgeben: Nur für Enza
Hallo Den Druckbereich kannst du wie folgt definieren: 'Druckbereich festlegen: Range("A1:H44").Select ActiveSheet.PageSetup.PrintArea = "$A$1:$H$44"
'Druckbereich aufheben: Range("A1").Select ActiveSheet.PageSetup.PrintArea = ""
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Enza Mitglied
Beiträge: 27 Registriert: 04.06.2007 Excel 2003
|
erstellt am: 24. Jul. 2009 13:34 <-- editieren / zitieren --> Unities abgeben:
|
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 24. Jul. 2009 19:34 <-- editieren / zitieren --> Unities abgeben: Nur für Enza
hmmm, ... wie findet die Auswahl der Pdfs statt? da ich mit deinem Druckschnippsel nichts anfangen kann eventuell hilft untenstehender Code... Code: Private Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" (ByVal Fensterzugriffsnummer As Long, _ ByVal lpOperation_wie_Open_oder_Print As String, _ ByVal lpDateiname_incl_Pfad As String, _ ByVal lpZusätzliche_Startparameter As String, _ ByVal lpArbeitsverzeichnis As String, _ ByVal nGewünschte_Fenstergröße_der_Anwendung As Long) _ As LongPrivate Const SW_HIDE = 0 Private Const SW_MAX = 10 Private Const SW_MAXIMIZE = 3 Private Const SW_MINIMIZE = 6 Private Const SW_NORMAL = 1 Private Const SW_SHOW = 5 Private Const SW_SHOWDEFAULT = 10 Private Const SW_SHOWMAXIMIZED = 3 Private Const SW_SHOWMINIMIZED = 2 Private Const SW_SHOWMINNOACTIVE = 7 Private Const SW_SHOWNORMAL = 1 Private Const SW_SHOWNOACTIVATE = 4 Sub Mehrere_Drucken() ChDrive (C): ChDir "C:\PDF-DATEN" 'Pfadvoreinstellung NameZiel = Application.GetOpenFilename("ADOBE (*.PDF),*.pdf,Alle Dateien (*.*),*.*", , "PDF-auswahl !", MultiSelect:=True) If TypeName(NameZiel) = "Boolean" Then Beep MsgBox "Sie müssen min. eine Datei auswählen!" Exit Sub End If Call Sort(NameZiel) 'Die ausgewählten Dateien werden alpha-numerisch sortiert End Sub Sub Sort(Nums) Rem Sortiert das Array *.nc, *.mpf For I = LBound(Nums) To UBound(Nums) For J = (I + 1) To UBound(Nums) If Nums(I) > Nums(J) Then 'Wenn eine Zahl größer als die Andere ist, werden sie getauscht' tmp = Nums(I) Nums(I) = Nums(J) Nums(J) = tmp End If Next J Next I For Nr = LBound(Nums) To UBound(Nums) pdfInBearbeitung = (Nums(Nr)) Pdf (pdfInBearbeitung) Next Nr End Sub Sub Pdf(pdfInBearbeitung) 'ShellExecute öffnet oder druckt mit dem Programm, das in der Registy zu 'dieser Dateinamenserweiterung eingetragenen wurde. ShellExecute 0&, "Print", pdfInBearbeitung, _ vbNullString, vbNullString, SW_SHOWMINNOACTIVE End Sub Sub Drucken() ShellExecute 0&, "Print", "c:\Eigene Dateien\hugo.pdf", _ vbNullString, vbNullString, SW_SHOWMINNOACTIVE End Sub 'Sub Öffnen() 'ShellExecute 0&, "Open", "c:\Eigene Dateien\hugo.pdf", _ ' vbNullString, vbNullString, SW_SHOWNORMAL 'End Sub
------------------ Am Anfang war kein Licht - und Vater blickte Kalt literaturcafe /// ¡darkerradio! // und den passenden Play für Winamp
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Enza Mitglied
Beiträge: 27 Registriert: 04.06.2007 Excel 2003
|
erstellt am: 31. Jul. 2009 09:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas! Vielen Dank für deine Antwort! Kannst du mir noch sagen, welche Werte man als in der Variablen lpZusätzliche_Startparameter übergeben kann? Ich stelle mir vor, dass sich beim ersten zu druckenden pdf das Fenster "Seite einrichten" öffnet und dass diese Einstellungen für alle anderen pdf übernommen werden. Ist das möglich? Viele Grüsse, Insa Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|