Mit vba in pdf drucken

Hallo.

Habe ein Problem damit, wie ich am geschicktesten ein pdf erzeugen kann.
Das ganze soll per Makro laufen, also in VBA.
Zweck ist: Ich habe einen Zeitplan zu einer Resource und diesen Zeitplan will ich mit dem Recourcenname versehen und nach pdf drucken.
Adobe Acrobat würde mirr zur Verfügung stehen. Ebenso ein free-pdf-Writer.
Hinzu kommt, dass der pdf-Drucker zuerst noch (direkt im Script) ausgewählt werden muss, da er nicht der Standard-Drucker ist.

Für Hilfe wäre ich dankbar.

Gruß
Jonn

Hallo,
grundsätzlich hilfreich wären ein paar nähere Informationen, z.B. die Version, die du verwenden möchtest. In 2003 geht pdf-Generieren nur über Druck an Adobe PDF oder FreePDF, in 2007ff können die Programme direkt PDFs generieren, das sind dann ganz andere Befehle.
Und was ist es genau, das du drucken möchtest? Ich entnehme den Tags mal, dass es um MS Project geht - stimmt das?
Was gibt’s denn schon im VBA?

lg
Wichtighexe

Sorry.
Basis sollte Project Standard 2003 sein, wobei 2007 auch ginge. Nimm das einfachere.
Ziel: Ich möchte einen Zeit-/Projektplan gefiltert nach einer Person im pdf Format vorliegen haben.
Ein Makro habe ich bereits dazu, jedoch muss ich vorher den Standarddrucker (auf pdf) wechseln und bekomme während des Ablaufes eine Aufforderung den Ort und den Namen „Speichern Unter“-Dialog (für jede Ressource) angezeigt.
Dies hätte ich gerne automatisiert, da mehrere Ressourcen einen eigenen Zeitplan bekommen sollen.
Prinzipiell weiß ich im Vorfeld ja auch schon Ort und Name für die pdf-Datei.
Grund: wie gesagt habe ich bereits ein Makro, was druckt. Die Filterung zu jedem „Druck“ läuft hier auch automatisch ab.

Hoffe das hilft weiter.

Grüße
Jonn

So ungefähr:
Dim meinPfad as variant
meinPfad = „D:\Temp“ oder was auch immer

~daszuexportierendeObjekt~.ExportAsFixedFormat OutputFileName:= _
meinPfad & „meinDateiname.pdf“, ExportFormat:=pjExportFormatPDF, _
OpenAfterExport:=False,
.
.
.
Wie gesagt, so ungefähr, ich kann’s jetzt nicht testen, und kenn auch deinen restlichen Code nicht, und das wär’ jetzt die 2007-Variante, also Export ohne irgendwelche Drucker, sondern direkt mit der Exportfunktionalität aus Project
Am besten führst du die .ExportAsFixedFormat-Methode detailliert zu Gemüte, damit alle Parameter passen, oder zeichnest halt einmal auf.

Viel Erfolg,
Wichtighexe

Hi Jonn
bei Project muss ich leider passen, da ich die Project-Objektbibliothek noch nie verwendet habe.
Aber dies sollte grundsätzlich gut machbar sein.
Möchtest du denn den ganzen Code dafür oder hast du schon was gemacht und kommst nicht weiter?

Gruss
RoPf

Hi nochmal, evtl. findest du noch was hier:
Microsoft Forum

Hallo jonnjay,

wo soll ich anfangen, Dir den Kopf runterzureissen? :wink:

„per Makro, also in VBA“ - ja was nun?
Makros sind die Menübefehle in Langform, VBA ist eine Programmiersprache.

„Zeitplan“ - toll, aber in welcher Anwendung? Outlook, Word, Excel, … ?

www.gidf.de empfehle ich als ersten Link, dann Google mit „vba pdf drucken“ und du landest bei Herber oder vb-fun.de, alles wirklich tolle Seiten, die eine Lösung für dein Problem haben (sogar mehrere Ansätze).

Hier meine Kurzform (ohne die Anwendung zu kennen)
Public 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

Sub pdf()
dim strAktuellerDrucker as string
dim strZuDruckendeDatei as string

strAktuellerDrucker = Application.ActivePrinter
Application.ActivePrinter = „DeinPDFDrucker“

strZuDruckendeDatei = "DeineDatei
ShellExecute 0, „open“, strZuDruckendeDatei, „“, „“, SHOWMAXIMIZED
ShellExecute 0, „print“, strZuDruckendeDatei, „“, „“, SHOWMAXIMIZED
ShellExecute 0, „exit“, strZuDruckendeDatei, „“, „“, SHOWMAXIMIZED

Application.ActivePrinter = strAktuellerDrucker

Wenn der Code in der Datei ist, die gedruckt werden soll, dann kannst Du Dir das Gedöns mit ShellExecute sparen und einfach den aktiven Drucker auf den PDF-Drucker setzen und dann ActiveWorkbook (oder ActiveDocument … je nach Anwendung).Print o. Ä. nutzen.

Gruß
Harry

Das hört sich relativ gut an.
Leider kann ich die ExportAsFixedFormat-Methode nicht finden. Hast du da noch einen Tip? Geht das erst ab der Version 2010?

Dim printstarts As String
Dim printends As String
printstarts = „“ & txtvon1.Value & „.“ & txtvon2.Value & „.“ & txtvon3.Value & " 08:00"
printends = „“ & txtbis1.Value & „.“ & txtbis2.Value & „.“ & txtbis3.Value & " 17:00"
Call ZoomSub1 'Zeitbereich festlegen
Dim persons As Collection
Set persons = GetSelectedPersons() 'Auslesen von Checkboxen
For Each person In persons
Call FilterApply(„Benutzt Ressource…“, , person)
FilePrint FromDate:=printstarts, ToDate:=printends
Next person

Das ist mein Ablauf im Wesentlichen bislang.

Hallo und danke für die nette Antwort.
Leider hatte ich schon gegoogelt aber ihne Erfolg.
Zeitpläne erstelle ich in MS Project (Version 2003 oder 2007).Hierin liegt auch mein Problem siehe oben begründet.
DAs VBA zwischen den Applikationen Project und Excel, Word, etc. scheint hier massiv abzuweichen.
Bei Herber war ich auch schon (Standard-Anlauf Station!).
Leider will mein VBA das nicht so machen, wie es in Google steht.
Grüße Jonn

Danke für den Tip.
Ich habe schon was laufen. Siehst du oben bei Wichtighexe.
Prinzipiell läuf es soweit, dass Checkboxen ausgelesen werden und entsprechende, Filter gesetzt werden. Unterstützung brauche ich „nur“ bei der angezeigten gefilterten Ansicht, diese ins pdf-Format zu bekommen.
Grüße Jonn

Hi Jonn,

entschuldige die späte Antwort. Habe leider von MS Project keine Ahnung.

Gruß

Markus

Hallo jonnjay,

auch in ms project sollte es ein Objekt „ActiveProject“ oder ähnliches geben, das mit der Methode „print“ ausgedruckt werden kann.

Vorher den Standarddrucker auf PDF stellen und die Ansicht auf „Zeitplan“ - sollte mit Methode „view“ gehen.

Ich werde es in Kürze ausprobieren, muss aber erst Project installieren.

Gruß
Harry

Nachtrag zu Re^3:

Es sollte mit Application.FilePrint zu Drucken gehen.

Vorher entweder den PDF zum Standard-Drucker machen oder abfragen und einstellen.
Es müßte auch gehen, andere Ansichten zu drucken und die Zeitpläne datumsmäßig einzugrenzen.
s. hierzu die Online-Hilfe zu FilePrint.

Gruß
Harry

Danke.
Ich werde es versuchen.
Mir wurde ein wichtigeres Projekt dazwischen geschoben. Anfang nächster Woche kann ich das dann hoffentlich einbauen.
Melde mich dann wieder.

Grüße
Jonn

Hi.

Ich habe das ganze nun mal durchgespielt.
Ergebnis:

  1. ExportAsFixedFormat-Methode nicht verfügbar, ebensowenig wie Export allgemein (auch nicht in Project 2007)
  2. FilePrint läuft, ebenso wie die Standarddruckerumstellung.
    Das Problem ist hier jetzt noch (immer!), dass ich den „Speichern unter“ Dialog bekomme, der in der Makroaufzeichnung nicht erscheint. Sprich ich kann keine(n) Dateinamen(i) angeben.

=> immer noch kein erfolgreicher Export nach pdf. Ich suche also immer noch nach Unterstützung.

Danke. Jonn

Hallo jonnjay,

  1. ExportAsFixedFormat ist eine Methode aus Excel => funktioniert also nur mit dem entsprechendem Verweis

  2. FilePrint druckt nur aus, FilePrintSetup erlaubt dir die Druckerauswahl, es dauert aber ewig bis der umgestellt ist.

Um eine PDF da rauszukriegen ist dann das Kommando SendKeys evtl. hilfreich, auch wenn ich absolut kein Freund von diesem Befehl bin.

Woher kommt denn der Dateiname. Könnte man z. B. im Druckertreiber vom PDF-Writer einen Standard-Pfad und Dateinamen vergeben (z. B. c:\temp\latestpdf.pdf) und dieses dann umbenennen und verschieben mittels FSO (FileScriptingObject)?

Alternativ hilft vielleicht PDF-Creator und fly2pdf (http://de.pdfforge.org/content/andere-projekte) oder die convert.exe von ImageMagick (www.imagemagick.org)

Gruß
Harry

Hi Jonn,

sorry, dass ich mich erst so spät melde. Vielleicht hilft es dir bereits, wenn du folgende Codezeile implementierst.

Private Sub DruckButton_Click()
Call ActiveSheet.PrintOut(1, 1, 1, True, „name des pdf-writers“, False, False, False, False)
End Sub

Mit der Methode „PrintOut“ kannst dir sicher weiterhelfen. Ich hab das ganze mal im Excel nachgebaut, funktioniert! Schau dir in der Excel-Hilfe mal die Details zu PrintOut an.

Lg neotokyo_1

Hi Jonn,

Habe ein Problem damit, wie ich am geschicktesten ein pdf
erzeugen kann.

ich habe kürzlich ein MS-Access Projekt übernommen, das eine solche PDF-Druckfunkton über DoCmd verwendet.
Ich weiß, es hat eine Weile bis zur Antwort gedauert, aber vielleicht hast Du ja noch Bedarf und Interesse?

Gruß,
Michael