Microsoft Excel

Herbers Excel/VBA-Archiv

Excel -> Word -> PDF per Makro | Herbers Excel-Forum


Betrifft: Excel -> Word -> PDF per Makro von: volker
Geschrieben am: 11.01.2010 16:16:53

Hallo Leute,
aus einer EXCEL Datei kann ich hervorragend ein Worddokument erstellen, die eine Zusammenstellung der Daten als handliche Datei pro Fall ausgibt.
Mir ist nun daran gelegen diese Ausgaben unveränderbar zu halten. Also am liebsten das Worddokument noch im Makro in eine PDF umzuwnadeln.
Hat da jemand eine Idee?
Bisher scheitere ich sowohl mit einer solchen Konstruktion:

Application.ActivePrinter = "Adobe PDF auf Ne03:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"Adobe PDF auf Ne03:", Collate:=True

(Was klar ist, ich will ja kein Tabellenblatt konvertieren!)

wie auch mit dem Word-Makroeditorbefehl

fragebogen.Application.PrintOut Filename:=SpeicherName, Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0

Wobei fragebogen das erstellte WordDokument darstellt, definiert am Anfang des Codes über:

Dim W As Word.Application
Dim fragebogen As Word.Document

Gibt es vielleicht auch eine Möglichkeit gleich als pdf zu schreiben?

Viele Grüße,

Volker

  

Betrifft: AW: Excel -> Word -> PDF per Makro von: fcs
Geschrieben am: 12.01.2010 13:25:07

Hallo Volker,

Office 2003 kann nicht direkt Dokumente als PDF-Dateien ausgeben, funktioniert erst ab 2007er Versionen.

Folgende beiden Makros funktionieren bei mir, wobei bei mir in Variante 2 das Kreieren einer neuen Word-Instanz relativ lange dauert.

Gruß
Franz

'Excel-Version: 2003
'In VBA-Excel muss unter Extras der Verweis auf Microsoft Word x.y Object Library gesetzt sein
Sub AusgabeWorddatei1()
  'Variante 1: Word-Anwendung muss bereits geöffnet sein
  Dim wks As Worksheet
  Dim fragebogen As Word.Document
  Dim sActivePrinter$, SpeicherName$
  Set wks = ActiveSheet
  SpeicherName = ActiveWorkbook.Path & Application.PathSeparator _
          & wks.Cells(2, 1) & Format(wks.Cells(2, 2), "00")
  
  Application.ActivateMicrosoftApp (xlMicrosoftWord)
  Set fragebogen = Word.Documents.Add
  'Daten in Fragebogen eintragen
  fragebogen.Range(0, 1).Text = ActiveWorkbook.Worksheets(1).Cells(1, 1).Text
  'Fragebogen speichern
  fragebogen.SaveAs Filename:=SpeicherName
  SpeicherName = fragebogen.FullName
  fragebogen.Close savechanges:=True
  
  'Fragebogen als PDF-Drucken
  'Aktiven Word-Drucker merken
  sActivePrinter = Word.ActivePrinter
'  W.ActivePrinter = "Adobe PDF auf Ne03:"
  Word.ActivePrinter = "Adobe PDF"
  Word.Application.PrintOut Filename:=SpeicherName
  'gemerkten Drucker wieder setzen
  Word.ActivePrinter = sActivePrinter

  
  Word.Application.WindowState = wdWindowStateMinimize
End Sub


Sub AusgabeWorddatei2()
  'Variante 2: Neue Wordinstanz wird jeweils erzeugt
  Dim wks As Worksheet
  Dim W As New Word.Application
  Dim fragebogen As Word.Document
  Dim sActivePrinter$, SpeicherName$
  Set wks = ActiveSheet
  SpeicherName = ActiveWorkbook.Path & Application.PathSeparator _
          & wks.Cells(2, 1) & Format(wks.Cells(2, 2), "00")
  'Neues Worddokument anlegen
  Set fragebogen = W.Documents.Add
  W.Visible = True
  'Daten in Fragebogen eintragen
  fragebogen.Range(0, 1).Text = ActiveWorkbook.Worksheets(1).Cells(1, 1).Text
  'Fragebogen speichern
  fragebogen.SaveAs Filename:=SpeicherName
  
'Fragebogen als PDF-Drucken
  'Aktiven Word-Drucker merken
  sActivePrinter = W.ActivePrinter
'  W.ActivePrinter = "Adobe PDF auf Ne03:"
  W.ActivePrinter = "Adobe PDF"
  fragebogen.PrintOut
  'gemerkten Drucker wieder setzen
  W.ActivePrinter = sActivePrinter

  'Datei schließen und Word beenden
  fragebogen.Close savechanges:=True
  'Warten, damit Word den Druckvorgang abschließen kann
  Application.Wait Now + TimeSerial(Hour:=0, Minute:=0, Second:=5)
  W.Quit
End Sub



  

Betrifft: AW: Excel -> Word -> PDF per Makro von: volker
Geschrieben am: 12.01.2010 14:57:41

Hallo Franz,
herzlichen Dank! Das funktioniert prima.
Da war ich ja gar nicht so weit weg - Danke!
Im Prinzip fahre ich mit Variante 1 ganz gut.

Nun habe ich aber noch ein weiteres Problem:
Bei jeder PDF Konvertierung öffnet sich bei mir ein 'Save PDF File as', dass ich bestätigen muss. Das würde ich gerne automatisch machen lassen. (Insbesondere weil es vorkommen kann, dass bei einem Programmauflauf bis zu 100 PDF Dateien erstellt werden können ...)
Und der Pfad stimmt nicht mit dem Pfad der ebenfalls erstellten Worddatei überein.
Wo stelle ich dies ein?
MakeSureDirectoryPathExists SpeicherName
macht es nicht. Warum nur?

Volker


  

Betrifft: AW: Excel -> Word -> PDF per Makro von: fcs
Geschrieben am: 13.01.2010 00:25:10

Hallo Volker,

ich kenne mich mit dem Einrichten von Acrobat als Drucker/Druckertreiber nicht aus. Ich benutze Acrobat meist für Erstellen und Editieren komplexerer PDF-Dokumente.
Es sollte aber möglich sein, Acrobat oder evtl. auch den Distiller so einzurichten, dass die Ausgabe der PDF-Dateien automatisch ohne Anzeige der Zwischendialoge in ein Verzeichnis erfolgt. Da ihr den Acrobat im Netzwerk betreibt, muss du ggf. mit deinem Admin verhandeln.

Ich arbeite privat zum Erzeugen von PDF via Drucker mit FreePDF und dort kann man ein Profil so konfigurieren dass für die Ausgabe in ein bestimmtes Verzeichnis ein separat wählbarer Drucker angelegt wird.

Gruß
Franz