Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
988to992
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
988to992
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Mit Makro Virtuelle Drucker (PDF) ansteuern

Mit Makro Virtuelle Drucker (PDF) ansteuern
08.07.2008 13:22:37
TomTom
Hi,
ich habe eine Arbeitsmappe mit mehreren Blättern. Nun will ich die mappe ausdrucken, aber nicht auf Papier, sondern will über einen virtuellen Drucker (Adobe PDF) gehen. kann ich per Makro diesen Drucker ansteuern ?
Einzigste Einschänkung sollte sein, dass das Tabellenblatt "Quelldaten" NICHT mit gedruckt wird, ansonsten die ganze Mappe.
Kann man so was machen ?
Danke mal für Eure Hilfe
TomTom

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Habe was gefunden für eine Tabelle...
08.07.2008 13:32:32
TomTom
Hi,
habe beim googeln mal ein Code gefunden, der zumindest 1 Seite nach PDF convertiert. Nun müsste ich nur noch wissen , wie ich die anderen Blätter, ausser das Tabellenblatt "Quelldaten" auswählen kann.
Sheets("Original").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
Gruss
TomTom

AW: Habe was gefunden für eine Tabelle...
08.07.2008 14:06:01
Yusuf
Hi,
ich wuerde per Schleife ein Blatt nach dem anderen ausdrucken lassen.
Angenommen dein Blatt "Quelldaten" ist an erster Position in deiner Mappe (also ganz links).

Sub Druck
dim i as integer
for i = 2 to sheets.count 'i=2 um vom 2. Blatt anzufangen und dadurch "Quelldaten"  _
auszulassen
Sheets(i).PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
next i
End Sub


Gruß
Yusuf

Anzeige
Sorry , ich habe eins nicht bedacht....
08.07.2008 14:23:54
TomTom
Hi,
danke. Als ich Dein Code gestestet habe, habe ich gemerkt, ich müsste ja bei meinem Beispiel für jedes einzelne Blatt ein Dateiname angeben. Der Code erstellt das erste Dockument, fragt dach Speicherort und Name, dann macht er das zweite Dokument , fragt wieder nach Speicherort und Name.......
ich habe ein Excelmappe von ca 100 Tabellen.
Wenn möglich, wollte ich alles auf einmal ausgedruckt haben.
das war wohl nicht der richtige Ansatz von mir.
Hat noch jemand eine Idee ?
Gruss
TomTom

AW: Sorry , ich habe eins nicht bedacht....
08.07.2008 18:49:54
Jürgen
Hallo Yusuf,
Dein Problem ist gelöst, wenn Du den Ausdruck mit einem einzigen Druckbefehl erzeugst. Wenn es das erste Tabellenblatt ist, das Du nicht drucken möchtest, solltet das mit folgendem Code gehen:
Dim n As Integer
Sheets(2).Select
For n = 3 To Sheets.Count
Sheets(n).Select False
Next
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
Das Makro wählt das erste zu druckende Tabellenblatt (also Nr. 2) und dann in einer Schleife alle folgenden, wobei der auf "false" gesetzte Parameter dafür sorgt, dass die Auswahl erweitert statt ersetzt wird (sonst hättest Du am Ende nur das letzte Tabellenblatt markiert)
Ich hoffe, das hilft Dir weiter.
Gruß, Jürgen

Anzeige
Juhu es geht , noch ne Zusatzfrage
09.07.2008 08:53:08
TomTom
Hallo Jürgen,
vielen Dank, es funktioniert. Hast mir sehr geholfen. :-))
Noch eine Frage dazu (früher oder später müsste ich sie eh stellen)
Kann man den Code auch so umbauen, dass nicht alle Blätter zum virtuellen Drucker geschickt werden , sondern nur eine Auswahl.
Ich stelle mir das so vor:
Meine Excel-Mappe hat nun mehrere Tabellen: einmal das "Deckblatt", einmal eine "Einleitung", einmal "Übersicht", einmal "Prüfung" und viele, viele mit "Vorgänge XX" (XX sind vortlaufende Zahlen)
Auf meiner Userform habe ich 5 Checkboxen eingerichtet, die genau so heissen wie meine Tabellenblätter.
Mein Ziel ist es gewesen, einmal ein PDF GESAMT zu erzeugen, so wie ich es nun habe (Dank Dir) und einmal ein benuzerdeffiniertes PDF, also, dass ich anhand meiner Checkbox wählen kann, welche Blätter mit in das PDF sollen.
Beispiel: Ich klicke "DECKBLATT" an und klicke VORGÄNGE an, dann soll ein PDF erzeugt werden mit dem Deckblatt und mit allen Tabellenblätter , die mit "Vorgänge" beginnen.
Ist so was machbar ?
Danke auf jeden Fall für deine Hilfe bis hierher.
Gruss
Tom

Anzeige
AW: Juhu es geht , noch ne Zusatzfrage
09.07.2008 09:48:32
Jürgen
Hallo Tom,
erst noch mal Entschuldigung, dass ich mich im Namensdickicht verirrt und meinen Beitrag an Yusuf gerichtet habe.
Was Du möchtest sollte sich eigentlich umsetzen lassen. Die Schwierigkeit besteht lediglich darin, dass man als erstes ein Arbeitsblatt selektieren muß ohne den Paramter "Replace" auf "false" zu setzen, damit die aktuelle Selektion nicht (möglicherweise ungewollt) mit einbezogen wird.
Wenn Du also Arbeitsblätter hast, die auf jeden Fall gedruckt werden sollen, selektierst Du sie als erstes und fügst dann die anderen je nach Auswahl des Anwenders hinzu, z.B. mit
If me.checkbox1.value = true then
Sheets("Deckblatt").select false
end if
Wenn es keine Arbeitsblätter gibt, die in jedem Fall gedruckt werden müssen, wird der Code etwas umfangreicher (es sei denn, jemand hat eine bessere Idee). Als Lösung stelle ich mir vor, dass für jede Checkbox geprüft werden muß, ob die vorhergehenden aktiviert waren (also bereits ein erstes Blatt makriert ist) oder nicht. Der Code könnte so aussehen:
If Me.Checkbox1.value = true then
Sheets("Deckblatt").select
end if
If Me.checkbox2.value = true then
Sheets("Einleitung").select not Me.Checkbox1.value
end if
If Me.checkbox3.value = true then
Sheets("Übersicht").select not (Me.Checkbox1.value or Me.Checkbox2.value)
end if
usw. ...
Zur Erläuterung: wenn die Erste oder die zweite Checkbox oder beide aktiviert waren, ergibt "(Me.Checkbox1.value or Me.Checkbox2.value)" true - dann wurde schon ein Blatt selektiert, dann muß Select mit false aufgerufen werden, was Du mit der Negation durch "Not" erreichst.
Aber Achtung: wenn keine Checkbox markiert ist, würde das aktuelle Arbeitsblatt ausgedruckt, denn das ist ja markiert. Denkbar wäre eine Abfrage wie
If (me.checkbox1.value and me.checkbox2.value and #alle weiteren Checkboxen#) = false then
msgbox "Keine Arbeitsblätter für den Ausdruck markiert!"
else
#Druckbefehl#
end if
Gruß, Jürgen

Anzeige
AW: Juhu es geht , noch ne Zusatzfrage
09.07.2008 17:39:00
TomTom
Hallo Jürgen,
ist ehrlich gesagt ein bisschen verwirrend für mich, bin noch ein blutiger Anfänger :-(
Kann nicht behaupten, dass ich das jetzt alles verstanden habe, sorry
Du hast nicht zufällig ein kleines excel Beispiel parat ?
An einer Excelmappe wird mir das glaube ich klarer.
Gruss
Tom

AW: Juhu es geht , noch ne Zusatzfrage
09.07.2008 18:49:00
Jürgen
Hallo Tom,
nun, eine Beispiellösung für Deinen speziellen Anwendungsfall habe ich gerade nicht zufällig in der Tasche...
Wenn Du die Userform und die Checkboxen schon hast, dann zeigt mein vorheriger Beitrag, wie Dein Code aussehen könnte (abgehesen davon, dass ich überlesen hatte, dass Deine Checkboxen schon so heißen wie die Tabellenblätter - die Namen mußt Du dann anpassen).
Viel mehr als den vorher dargestellten Code würdest Du auch in einer konkreten Excelmappe nicht sehen. Hast Du denn mal versucht, den Code in Deine Lösung einzubauen?
Gruß, Jürgen

Anzeige
AW: Juhu es geht , noch ne Zusatzfrage
10.07.2008 08:39:00
TomTom
Hallo Jürgen,
sorry, ich habe mich falsch ausgedrückt, ich hatte vergessen was zu erwähnen: also im Prinzip funktioniert es, nur meine leztze Checkbox macht mir noch Probleme, die sieht so aus:
If Me.CheckBox6.Value = True Then
Sheets("Vorgang YX").Select Not (Me.CheckBox1.Value Or Me.CheckBox2.Value Or Me.CheckBox3.Value Or Me.CheckBox4.Value Or Me.CheckBox5.Value)
End If
Beachte bitte den Name des Sheets ("Vorgang YX").
Ich habe in meiner Mappe am Schluss ein paar Tabellenblätter, die werden beim Start des Makros angelegt und heisen zB. Vorgang 01, Vorgang 02, ....
Sind also durchnummerriert und können in der Anzahl unterschiedlich variieren. Ich habe jetzt also keinen festen Namen mehr.
Darum die Frage: wie Prüfe ich bei : Sheets("Vorgang YX").Select Not ..... nur die ersten 7 Zeichen ab, also alles was mit "VORGANG" beginnt. (unabhängig, welche zahl dahinter steht.
Danke und Gruss
Tom

Anzeige
AW: Juhu es geht , noch ne Zusatzfrage
10.07.2008 09:49:00
Jürgen
Hallo Tom,
dafür hast Du zwei Möglichkeiten:
wenn Du weißt, welches Dein erstes Blatt "Vorgang xy" ist und bist sicher, dass von diesem bis zum letzten Blatt nur solche vom Typ "Vorgang XY" sind :
Dim n as integer
...
If Me.CheckBox6.Value = True Then
'Das erste markieren und dafür sorgen, dass es ggfs. das einzige ist (falls nur die Vorgänge drucken)
Sheets(5).Select Not (Me.CheckBox1.Value Or Me.CheckBox2.Value Or Me.CheckBox3.Value Or Me.CheckBox5.Value)
'die restlichen hinzufügen
For n = 6 to Sheets.count
Sheets(n).Select false
next
End If
wenn die obigen Bedingungen nicht erfüllt sind, aber alle relevanten Blätter über ihren Namen indentifiziert werden können, geht die folgende Lösung:
Dim Blatt as worksheet
...
'Dafür sorgen, dass irgendein Vorgangsblatt markiert wird, falls nur Vorgänge gedruckt werden sollen
Sheets("Vorgang 01").select Not (Me.CheckBox1.Value Or Me.CheckBox2.Value Or Me.CheckBox3.Value Or Me.CheckBox4.Value Or Me.CheckBox5.Value)
'Alle Blätter nach solchen durchsuchen, deren Namen mit "Vorgang" beginnt, und ebenfalls markieren
For each Blatt in Sheets
If Left(Blatt.Name, 7") = "Vorgang" then
blatt.select false
end if
next
Falls das ganze groß-/kleinschreibungstolerant sein soll:
If UCase(Blatt.Name, 7") = "VORGANG" then
Gruß, Jürgen

Anzeige
Klappt alles perfekt.....
10.07.2008 10:38:00
TomTom
Hallo Jürgen,
vielen, vielen Dank. klappt alles spitze.
Hoffe, ich kann Dich nun in Ruhe lassen :-)
Gruss Tom

AW: Habe was gefunden für eine Tabelle...
08.07.2008 14:32:00
Yusuf
Hi,
ungetestet:

Sub Druck()
dim i as integer
Application.DisplayAlerts = False 'schaltet Dialoge ab
for i = 2 to sheets.count 'i=2 um vom 2. Blatt anzufangen und dadurch "Quelldaten"  _
auszulassen
Sheets(i).PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
next i
Application.DisplayAlerts = true 'schaltet Dialoge ein
End Sub


der Effekt ist immer noch der selbe .....
08.07.2008 14:39:00
TomTom
..
hi,
habe den Code getestet, aber der legt weiterhin für jedes einzelne Blatt ein Dokument an und kein Gesamt-Dokument.
Gruss
TomTom

Anzeige
Hmm, sry. bin am ende mit meinem Latein
08.07.2008 14:43:13
Yusuf
So laesst sich glaub ich die komplette Mappe ausdruecken incl. "Quelldaten"
ungetestet.
ActiveWindow.PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
oder
ActiveWindow.Sheets.PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
Gruß
Yusuf

Sorry, ich auch. geht leider auch nicht...
08.07.2008 15:42:36
TomTom
..
ich glaub, ich lass das ganze jetzt und machs wieder manuell, Schade.
Trotzdem danke
TomTom

AW: Habe was gefunden für eine Tabelle...
08.07.2008 14:49:44
noffi
Hi TomTom,
mach es Dir nicht so schwer.
Erstelle Dir eine neue Excelmappe. Kopiere dort die benötigten Tabellen hinein. Dann kannst Du die Hilfsmappe mit dem PDF-Drucker drucken.
Gruß
noffi

Anzeige
AW: Habe was gefunden für eine Tabelle...
08.07.2008 15:19:07
TomTom
Hi noffi,
und wie kopiere ich 100 Tabellenblätter per Code in eine neue Tabelle ?
TomTom

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige