Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1092to1096
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Makro erweitern um Funktion "als pdf drucken"

VBA Makro erweitern um Funktion "als pdf drucken"
Sandra
Hallo zusammen,
ich hab da mal wieder eine Hürde die ich nicht alleine überwinden kann.
Ich habe ein Makro "bekommen", welches super funktioniert. Es bewirkt, dass die farbigen Markierungen erhalten bleiben, aber nicht auf dem Ausdruck erscheinen.
Nun soll aber der Druck nicht über den Standarddrucker eines jeden erfolgen, sondern über den Drucker "Adobe PDF". Könnt Ihr mir da weiter helfen?
Hier mal der Code, wie er derzeit existiert:

Sub druck_ohne_farbe()
Dim arrWerte()                          ' Variable für Array
Dim raZelle As Range                    ' Variable für die Zelle als Range
Dim loZaehler As Long                   ' Schleifenzähler
Dim loZaehler2 As Long                  ' Schleifenzähler
'   Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'   Ausfürhugn in Tabelle1
With Worksheets("Re- Prüf-Protokoll")
'       Schleife über jede Zelle des benutzten Bereichs
For Each raZelle In Worksheets("Re- Prüf-Protokoll").UsedRange
'           Zelle ist mit einer Füllfarbe formatiert
If raZelle.Interior.ColorIndex  xlNone Then
'               Array dynamisch erweitern
ReDim Preserve arrWerte(0 To 2, 0 To loZaehler)
'               Einlesen der Zelladresse in das Array
arrWerte(0, loZaehler) = raZelle.Address
'               Einlesen der Füllfarbe in das der Zelle in das Array
arrWerte(1, loZaehler) = raZelle.Interior.Color
'               Füllfarbe der Zelle zurüksetzen
raZelle.Interior.ColorIndex = xlNone
'               Schleifenzähler um 1 erhöhen
loZaehler = loZaehler + 1
End If
Next raZelle
'       Tabelle drucken
.PrintOut
'       Schleife über alle Elemente des Arrays
For loZaehler2 = 0 To loZaehler - 1
'           Zurückübertragen der ausgelesenen Füllfarben
.Range(arrWerte(0, loZaehler2)).Interior.Color = arrWerte(1, loZaehler2)
Next loZaehler2
End With
'   Bildschirmaktualisierung ein
Application.ScreenUpdating = True
End Sub
Vielen Dank und Gruß!
P. s. Ich habe da auch noch ein zweites Problem, aber dazu später mehr. :-)
Suche mal nach "ActivePrinter"
04.08.2009 16:53:32
NoNet
Hallo sandra,
suche mal bei Google oder auch hier im Forum nach "Application.ActivePrinter" - hierzu wirst Du einige Beispiele finden.
Gruß, NoNet
AW: Suche mal nach "ActivePrinter"
04.08.2009 18:09:11
Sandra
So richtig komme ich da nicht weiter. Wenn ich versuche Application.ActivePrinter ins Makro einzuarbeiten, dann sagt "er" mir, dass mein aktiver Drucker Kopierer PCL ist. Auch wenn ich Application.ActivePrinter="Adobe PDF" eingebe. So heißt nämlich mein "Drucker".
AW: VBA Makro erweitern um Funktion "als pdf drucken"
04.08.2009 18:18:15
Beverly
Hi Sandra,
lass dir mit diesem Code den aktiven Drucker anzeigen:
Sub aktiver_drucker()
MsgBox "aktiver Drucker: " & Application.ActivePrinter
End Sub

und setzte in dem geposteten Code (übrigens: den Copyright-Hinweis auf meiner HP hast du gelesen?!!) den aktiven Drucker vor der Zeile .PrintOut auf das was dir in der MsgBox angezeigt wird.


Anzeige
AW: VBA Makro erweitern um Funktion "als pdf drucken"
05.08.2009 08:36:49
Sandra
Hallo und guten Morgen.
Der aktive Drucker wird ausgegeben. Aber das ist gar nicht das Problem. Der Druck soll ja nicht über den aktiven Drucker erfolgen, sondern immer über den Drucker "Adobe PDF" oder - wenn es irgendwie geht, über den Adobe PDF Creator.
Copyright-Hinweis auf Deiner HP? Ich kenne Deine HP gar nicht. Ich habe den Code bei meiner letzten Frage am 31.07. nbekommen. Guck mal hier:
Farbige Markierungen nicht drucken - Sandra 31.07.2009 10:49:14
* AW: Farbige Markierungen nicht drucken - von Sandra am 31.07.2009 11:37:15
o AW: Farbige Markierungen nicht drucken - von Hajo_Zi am 31.07.2009 11:40:03
+ AW: Farbige Markierungen nicht drucken - von Sandra am 31.07.2009 12:28:05
# AW: Farbige Markierungen nicht drucken - von Hajo_Zi am 31.07.2009 12:34:16
* AW: Farbige Markierungen nicht drucken - von Sandra am 31.07.2009 12:46:34
o AW: Farbige Markierungen nicht drucken - von Hajo_Zi am 31.07.2009 12:50:18
+ AW: Farbige Markierungen nicht drucken - von Sandra am 31.07.2009 13:47:14
Wenn ich den Code nicht nutzen darf, dann sag es bitte. Dann muss ich mir etwas anderes überlegen.
Anzeige
AW: VBA Makro erweitern um Funktion "als pdf drucken"
05.08.2009 09:55:31
Beverly
Hi Sandra,
du hast in dem genannten Thread den Link zum Download einer Beispieldatei von meiner Homepage erhalten. Der dort enthaltene Code ist mit einem Kommentar über die Autorenschaft versehen (Copyrighthinweis), den du in deinem hier geposteten Code weggelassen hast. Jeder, der auf Webseiten veröffentlichte Beispiele benutzt, darf das natürlich problemlos und kostenlos (falls nicht anders vermerkt) tun, aber aus Fairnessgründen sollte er/sie die Autorenschaft respektieren. Auf der Impressum-Seite meiner HP kannst du darüber nachlesen (Link zu meiner HP ist in meiner Signatur).
Da der Adobe PDF nur kurzzeitig, also nur für diesen Fall verwendet und dann wieder auf den aktuellen Drucker zurückgesetzt werden soll, musst du zuerst auslesen, welches der aktuelle Drucker ist, dann den Adobe PDF zum aktuellen Drucker machen und anschließend den Drucker wieder zurücksetzen. Dazu müsstest du den Code aus meinem Beispiel "Drucken ohne Farbe" um diese Zeilen ergänzen:
    Dim strDrucker As String
strDrucker = Application.ActivePrinter
Application.ActivePrinter = "PDFCreator auf Ne00:" '

Mit der Codezeile:
Application.ActivePrinter = "PDFCreator auf Ne00:"

wird auf meinem Rechner der PDFCreator zum aktiven Drucker gemacht. Wie der Code nach dem Gleichheitszeichen für deinen Adobe PDF aussehen muss, kannst du dir mit dem Code aus meinem letzten Beitrag anzeigen lassen.


Anzeige
AW: VBA Makro erweitern um Funktion "als pdf drucken"
05.08.2009 12:44:12
Sandra
Das habe ich nicht bewusst weggelassen. Ich werde mir Deine HP mal anschauen.
Mal nochmal zu meinem Problem.
Mein Code sieht jetzt so aus:
Option Explicit
'**************************************************
'* 31.12.07,07.05.08 *
'* erstellt von Karin, http://beverly.excelhost.de*
'* beverly@excelhost.de *
'**************************************************
Sub druck_ohne_farbe()
Dim arrWerte()                          ' Variable für Array
Dim raZelle As Range                    ' Variable für die Zelle als Range
Dim loZaehler As Long                   ' Schleifenzähler
Dim loZaehler2 As Long                  ' Schleifenzähler
'   Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'   Ausfürhugn in Tabelle1
With Worksheets("Re- Prüf-Protokoll")
'       Schleife über jede Zelle des benutzten Bereichs
For Each raZelle In Worksheets("Re- Prüf-Protokoll").UsedRange
'           Zelle ist mit einer Füllfarbe formatiert
If raZelle.Interior.ColorIndex  xlNone Then
'               Array dynamisch erweitern
ReDim Preserve arrWerte(0 To 2, 0 To loZaehler)
'               Einlesen der Zelladresse in das Array
arrWerte(0, loZaehler) = raZelle.Address
'               Einlesen der Füllfarbe in das der Zelle in das Array
arrWerte(1, loZaehler) = raZelle.Interior.Color
'               Füllfarbe der Zelle zurüksetzen
raZelle.Interior.ColorIndex = xlNone
'               Schleifenzähler um 1 erhöhen
loZaehler = loZaehler + 1
End If
Next raZelle
'       Tabelle drucken
.PrintOut
'       Schleife über alle Elemente des Arrays
For loZaehler2 = 0 To loZaehler - 1
'           Zurückübertragen der ausgelesenen Füllfarben
.Range(arrWerte(0, loZaehler2)).Interior.Color = arrWerte(1, loZaehler2)
Next loZaehler2
End With
'   Bildschirmaktualisierung ein
Application.ScreenUpdating = True
Dim strDrucker As String
strDrucker = Application.ActivePrinter
Application.ActivePrinter = "Adobe PDF auf Ne04:" '

Mein aktiver Drucker heißt: Adobe PDF auf Ne04:
Mein Standarddrucker ist: Kopierer (PCL) auf Ne02:
Es klappt auch. Nun aber ein weiteres Problem: der Ausdruck soll bei jedem Mitarbeiter automatisch als pdf erfolgen - wie stelle ich das an? Nicht jeder wird wohl Ne02 haben, oder? Kann ich nicht irgendwie sagen, das der aktive Drucker "Adobe PDF auf Ne00-Ne99" (oder sowas in der Art) ist?
Sehe ich den Wald vor lauter Bäumen nicht? Ich komme nicht weiter.
HILFE!!!
Vielen lieben Dank schon einmal für die tolle Hilfe!!!
Anzeige
Es geht doch NICHT
05.08.2009 15:09:05
Sandra
Es funktioniert doch nicht mit dem o. g. code.
So geht es, dauert aber ewig:
Option Explicit
'**************************************************
'* 31.12.07,07.05.08 *
'* erstellt von Karin, http://beverly.excelhost.de*
'* beverly@excelhost.de *
'**************************************************
Sub druck_ohne_farbe()
Dim arrWerte()                          ' Variable für Array
Dim raZelle As Range                    ' Variable für die Zelle als Range
Dim loZaehler As Long                   ' Schleifenzähler
Dim loZaehler2 As Long                  ' Schleifenzähler
'   Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'   Ausfürhugn in Tabelle1
With Worksheets("Re- Prüf-Protokoll")
'       Schleife über jede Zelle des benutzten Bereichs
For Each raZelle In Worksheets("Re- Prüf-Protokoll").UsedRange
'           Zelle ist mit einer Füllfarbe formatiert
If raZelle.Interior.ColorIndex  xlNone Then
'               Array dynamisch erweitern
ReDim Preserve arrWerte(0 To 2, 0 To loZaehler)
'               Einlesen der Zelladresse in das Array
arrWerte(0, loZaehler) = raZelle.Address
'               Einlesen der Füllfarbe in das der Zelle in das Array
arrWerte(1, loZaehler) = raZelle.Interior.Color
'               Füllfarbe der Zelle zurüksetzen
raZelle.Interior.ColorIndex = xlNone
'               Schleifenzähler um 1 erhöhen
loZaehler = loZaehler + 1
End If
Dim strDrucker As String
strDrucker = Application.ActivePrinter
Application.ActivePrinter = "Adobe PDF auf Ne04:" '

Und es geht so nur bei meinem Rechner. :-(
Hast Du da auch eine super tolle Lösung für?
DANKE!!!!
Anzeige
Es geht doch NICHT
05.08.2009 15:46:27
Sandra
Es funktioniert doch nicht mit dem o. g. code.
So geht es, dauert aber ewig:
Option Explicit
'**************************************************
'* 31.12.07,07.05.08 *
'* erstellt von Karin, http://beverly.excelhost.de*
'* beverly@excelhost.de *
'**************************************************
Sub druck_ohne_farbe()
Dim arrWerte()                          ' Variable für Array
Dim raZelle As Range                    ' Variable für die Zelle als Range
Dim loZaehler As Long                   ' Schleifenzähler
Dim loZaehler2 As Long                  ' Schleifenzähler
'   Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'   Ausfürhugn in Tabelle1
With Worksheets("Re- Prüf-Protokoll")
'       Schleife über jede Zelle des benutzten Bereichs
For Each raZelle In Worksheets("Re- Prüf-Protokoll").UsedRange
'           Zelle ist mit einer Füllfarbe formatiert
If raZelle.Interior.ColorIndex  xlNone Then
'               Array dynamisch erweitern
ReDim Preserve arrWerte(0 To 2, 0 To loZaehler)
'               Einlesen der Zelladresse in das Array
arrWerte(0, loZaehler) = raZelle.Address
'               Einlesen der Füllfarbe in das der Zelle in das Array
arrWerte(1, loZaehler) = raZelle.Interior.Color
'               Füllfarbe der Zelle zurüksetzen
raZelle.Interior.ColorIndex = xlNone
'               Schleifenzähler um 1 erhöhen
loZaehler = loZaehler + 1
End If
Dim strDrucker As String
strDrucker = Application.ActivePrinter
Application.ActivePrinter = "Adobe PDF auf Ne04:" '

Und es geht so nur bei meinem Rechner. :-(
Hast Du da auch eine super tolle Lösung für?
DANKE!!!!
Anzeige
AW: Es geht doch NICHT
05.08.2009 19:53:51
Beverly
Hi Sandra,
auf dieser Seite http://www.office-loesung.de/ftopic94267_0_0_asc.php habe ich - so meine ich - den passenden Hinweis gefunden und auch schon an deine Aufgabenstellung angepasst:
Sub druck_ohne_farbe()
Dim arrWerte()                          ' Variable für Array
Dim raZelle As Range                    ' Variable für die Zelle als Range
Dim loZaehler As Long                   ' Schleifenzähler
Dim loZaehler2 As Long                  ' Schleifenzähler
Dim boVorhanden As Boolean              ' Variable ob Drucker vorhanden
Dim strDrucker As String                ' Variable für den aktiven Drucker
'   Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'   aktuellen Drucker auslesen
strDrucker = Application.ActivePrinter
'   Drucker umstellen
ChangePrinter "Adobe PDF", boVorhanden
'   Drucker ist installiert
If boVorhanden Then
With Worksheets("Re- Prüf-Protokoll")
'           Schleife über jede Zelle des benutzten Bereichs
For Each raZelle In Worksheets("Re- Prüf-Protokoll").UsedRange
'               Zelle ist mit einer Füllfarbe formatiert
If raZelle.Interior.ColorIndex  xlNone Then
'                   Array dynamisch erweitern
ReDim Preserve arrWerte(0 To 2, 0 To loZaehler)
'                   Einlesen der Zelladresse in das Array
arrWerte(0, loZaehler) = raZelle.Address
'                   Einlesen der Füllfarbe in das der Zelle in das Array
arrWerte(1, loZaehler) = raZelle.Interior.Color
'                   Füllfarbe der Zelle zurüksetzen
raZelle.Interior.ColorIndex = xlNone
'                   Schleifenzähler um 1 erhöhen
loZaehler = loZaehler + 1
End If
Next raZelle
'           Tabelle drucken
.PrintOut
'           Schleife über alle Elemente des Arrays
For loZaehler2 = 0 To loZaehler - 1
'               Zurückübertragen der ausgelesenen Füllfarben
.Range(arrWerte(0, loZaehler2)).Interior.Color = arrWerte(1, loZaehler2)
Next loZaehler2
End With
Else
MsgBox "Drucker 'Adobe PDF' nicht installiert"
End If
'   Bildschirmaktualisierung ein
Application.ScreenUpdating = True
'   Drucker zurücksetzen
Application.ActivePrinter = strDrucker
End Sub
Sub ChangePrinter(ByVal strPrinter As String, boDrucker As Boolean)
Dim WshNetwork As Object, oPrinters As Object, i%
Set WshNetwork = CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections
For i = 1 To oPrinters.Count Step 2
If InStr(oPrinters.Item(i), strPrinter) > 0 Then
WshNetwork.SetDefaultPrinter oPrinters.Item(i)
boDrucker = True
Exit For
End If
Next
Set WshNetwork = Nothing
End Sub

Ich hoffe, es funktionert bei dir genau so gut wie bei mir.
Der Code braucht logischerweise seine Zeit, da zuerst die Fülllfarben der Zelllen ausgelesen und zurückgesetzt werden, dann der Drucker auf den Adobe DPF umgestellt wird, anschließend gedruckt und der Drucker wieder auf den ursprünglichen Drucker zurückgesetzt und zuletzt die ursprünglichen Füllfarben wieder zurück gelesen werden.


Anzeige
AW: Es geht doch NICHT
06.08.2009 11:03:39
Sandra
Es klappt prima. Es gibt nur mal wieder ein Problem. :-(
Der PDF-Drucker wird als Standarddrucker festgelegt und dieser Vorgang wird nicht wieder rückgängig gemacht.
AW: Es geht doch NICHT
06.08.2009 12:46:21
Beverly
Hi Sandra,
du hast recht, das hatte ich nicht bedacht, ich war nur vom Aktiven Drucker, nicht vom Standarddrucker ausgegangen. Hiermit sollte er wieder zurückgesetzt werden:
Sub druck_ohne_farbe()
Dim arrWerte()                          ' Variable für Array
Dim raZelle As Range                    ' Variable für die Zelle als Range
Dim loZaehler As Long                   ' Schleifenzähler
Dim loZaehler2 As Long                  ' Schleifenzähler
Dim boVorhanden As Boolean              ' Variable ob Drucker vorhanden
Dim strDrucker As String                ' Variable für den aktiven Drucker
'   Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'   aktuellen Drucker auslesen
strDrucker = Application.ActivePrinter
AktuellerDrucker strDrucker
'   Drucker umstellen
ChangePrinter "PDF", boVorhanden
'   Drucker ist installiert
If boVorhanden Then
With Worksheets("Re- Prüf-Protokoll")
'           Schleife über jede Zelle des benutzten Bereichs
For Each raZelle In Worksheets("Re- Prüf-Protokoll").UsedRange
'               Zelle ist mit einer Füllfarbe formatiert
If raZelle.Interior.ColorIndex  xlNone Then
'                   Array dynamisch erweitern
ReDim Preserve arrWerte(0 To 2, 0 To loZaehler)
'                   Einlesen der Zelladresse in das Array
arrWerte(0, loZaehler) = raZelle.Address
'                   Einlesen der Füllfarbe in das der Zelle in das Array
arrWerte(1, loZaehler) = raZelle.Interior.Color
'                   Füllfarbe der Zelle zurüksetzen
raZelle.Interior.ColorIndex = xlNone
'                   Schleifenzähler um 1 erhöhen
loZaehler = loZaehler + 1
End If
Next raZelle
'           Tabelle drucken
.PrintOut
'           Schleife über alle Elemente des Arrays
For loZaehler2 = 0 To loZaehler - 1
'               Zurückübertragen der ausgelesenen Füllfarben
.Range(arrWerte(0, loZaehler2)).Interior.Color = arrWerte(1, loZaehler2)
Next loZaehler2
End With
Else
MsgBox "Drucker 'Adobe PDF' nicht installiert"
End If
'   Bildschirmaktualisierung ein
Application.ScreenUpdating = True
'   Drucker zurücksetzen
ChangePrinter strDrucker, boVorhanden
End Sub
Sub ChangePrinter(ByVal strPrinter As String, boDrucker As Boolean)
Dim WshNetwork As Object, oPrinters As Object, i%
Set WshNetwork = CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections
For i = 1 To oPrinters.Count Step 2
If InStr(oPrinters.Item(i), strPrinter) > 0 Or oPrinters.Item(i) = strPrinter Then
WshNetwork.SetDefaultPrinter oPrinters.Item(i)
boDrucker = True
Exit For
End If
Next
Set WshNetwork = Nothing
End Sub
Sub AktuellerDrucker(strPrinterAktuell As String)
Dim strComputer$, objWMI As Object, colPrinters As Object, objPrinter As Object
strComputer = "."
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\ _
cimv2")
Set colPrinters = objWMI.ExecQuery("Select * from Win32_Printer")
For Each objPrinter In colPrinters
If InStr(strPrinterAktuell, objPrinter.Name) > 0 Then
strPrinterAktuell = objPrinter.Name
Exit For
End If
Next
End Sub



Anzeige
AW: Es geht doch NICHT
06.08.2009 13:14:48
Sandra
Es klappt nicht. Guck:
Userbild
Userbild
:-(
AW: Es geht doch NICHT
06.08.2009 14:21:34
Wolli
Hallo Sandra,
setzte jeweils einfach die beiden roten Zeilen zu einer langen Zeile zusammen, wobei Du den Unterstrich am Ende der ersten Zeile löschst. Dann geht's.
Diesen Umbruch hat die Foren-Software zu verantworten, die das leider nicht 100%ig beherrscht.
Gruß, Wolli

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige