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

Pdf erstellen

Pdf erstellen
05.09.2005 07:32:32
Beate
Hallo Excel-Spezialisten!
Ich möchte gerne ein Makro erstellen beidem mir automatisch ein pdf erstellt wird ( ich verwende Adobe Acrobat 6.0 Professional) und den Dateinamen sowie das Verzeichnis automatisch aus Zellen entnimmt.
Wäre echt super wenn ich sowas hätte, als immer die lästige manuelle Eingabe von Datei und Verzeichnis.
Vielen DANK und schönen Tag an alle!
LG Beate

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pdf erstellen -geht leider nicht
05.09.2005 08:27:28
Beate
Hallo!
Vielen Dank für den tollen Hinweis. Doch leider funktioniert das leider nicht.
Es kommt immer folgende Fehlermeldung:
Benutzerdefinierter Typ nicht definiert
bei Zeile:
Dim myAdobeDist As classAcroDist 'see class module
Die Häkchen bei Adobe zum Senden der Schriften sind auch deaktiviert.
Hab ich was falsch gemacht?
LG Beate
Anzeige
AW: Pdf erstellen -geht leider nicht
05.09.2005 08:29:26
Peter
Servus,
ja und zwar hast du den selben Fehler gemacht den ich auch gemacht hab. (ist das noch deutsch, egal)
Du musst im VBA Editor unter Extra Verweise, den Hacken bei Acrobat Distiller setzen.
Schon klappts ;)
MfG Peter
hat funktioniert-brauch aber einen anderen Code
05.09.2005 08:43:20
Beate
Hi!
VIELEN DANK - Das ein super Hinweis!
Das funktioniert natürlich super aber ich bräuchte einen Code wo ich aus den Zellen das Verzeichnis und den Namen verwenden kann. Hast Du vielleicht so einen?
WÄRE ECHT SUPER!
VIELEN DANK NOCHMAL FÜR DIE SCHNELLE ANTWORT!
BEATE
AW: hat funktioniert-brauch aber einen anderen Cod
05.09.2005 09:21:55
Peter
Servus,
ich bin durch Rainers Code noch nicht so durchgestiegen, sollte ihn ja auch nur testen.
Hab bis heut abend auch keine Zeit. Falls bis heut abend keiner antwortet nehm ich mich dem noch mal an. Sry
MfG Peter
Anzeige
AW: hat funktioniert-brauch aber einen anderen Cod
05.09.2005 09:31:38
BEATE
Hallo Peter!
Vielen Dank - das ist wirklich gaaanz lieb von Dir!
Schönen Tag noch!
Liebe Grüße
Beate
AW: hat funktioniert-brauch aber einen anderen Code
05.09.2005 09:26:34
Nepumuk
Hallo Beate,
in welcher Tabelle (Name) steht wo was (Spalte/Zeile/Format). Am besten mal ein Beispiel.
Mein Beispiel:
Tabelle1
 AB
1NamePfad
2Raport07D:\Eigene Dateien
 

Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
AW: hat funktioniert-brauch aber einen anderen Code
05.09.2005 13:16:38
BEATE
Hallo Nepomuk!
Also so wie in Deinem Beispiel- Die Zellbezüge kann ich ja dann im VBA-Editor selbst verändern. Wäre wirklich super wenn ich mal so ein Grundgerüst hätte.
Vielen DANK
Liebe Grüße
BEATE
AW: hat funktioniert-brauch aber einen anderen Code
05.09.2005 14:35:15
Nepumuk
Hallo Beate,
bitteschön:
strFileToPrintPfad = Worksheets("Tabelle2").Cells(2, 2).Text
'Dann wechsle vorher in den Pfad der Datei
ChDrive (Left(strFileToPrintPfad, 2))
ChDir strFileToPrintPfad
'Zur druckender: Mappenname_Tabelle1
strFilename = strFileToPrintPfad & "\" & Worksheets("Tabelle2").Cells(2, 1).Text

Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
VIELEN DANK- aber einen kleine Haken gibt es noch
05.09.2005 16:13:56
BEATE
Hallo Nepumuk!
Du bist echt ein Schatz!!!!
Ich habe jetzt so wie unten den Code eingefügt - und in den Zellen den Pfad sowie Dateinamen aktiviert - aber er schreibt Pfad nicht gefunden...
Was kann ich machen?
Ich weiss ich bin lästig aber es wäre so wichtig...
VIELEN DANK FÜR DIE TOLLE HILFE G
GRÜßE VON BEATE
ption Explicit
'Liest alle unter dem aktuell angemeldeten Benutzer
'installierten Drucker aus
'by Nepumuk
Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" ( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long) As Long
Private Const MAX_PRINTERS = 16
Private strPrinterNames(MAX_PRINTERS) As String
Private strPrinterDrivers(MAX_PRINTERS) As String
Private strPrinterPorts(MAX_PRINTERS) As String
Private intPrinterCount As Integer
Sub Start_Print()
'by Ramses
'Druckt die übergebene Tabelle als PDF-Datei
'in das aktuelle Verzeichnis wo die Mappe gespeichert ist
Call Print_to_PDF(ActiveSheet)
End Sub
Public Sub Print_to_PDF(tarWks As Worksheet)
'by Ramses
'*********************************
'Verweise setzen auf
'Microsoft Office 10.0 / 11.0 Object Library und
'Acrobat Distiller
'*********************************
'Zusätzlich wird das Klassenmodul classAcroDist benötigt
Dim myAdobeDist As classAcroDist 'see class module
Dim myWB As Workbook
Dim strFilename As String
Dim strFileToPrintPfad As String
Dim DistInputPS As String
Dim DistOutputPDF As String
Dim DistJobOptions As String
Dim oldActivePrinter As String
Set myAdobeDist = New classAcroDist
'Distiller ausgeblendet startetn
myAdobeDist.myAdobeDist.bShowWindow = False
'Alle aktuellen Printjobs des Distillers stoppen
myAdobeDist.myAdobeDist.bSpoolJobs = False
'Alten Drucker aufnehmen
oldActivePrinter = Application.ActivePrinter
'Workbook zuweisen
Set myWB = Workbooks(tarWks.Parent.Name)
'Pfad der Mappe extrahieren
strFileToPrintPfad = Worksheets("Tabelle2").Cells(2, 2).Text
'Dann wechsle vorher in den Pfad der Datei
ChDrive (Left(strFileToPrintPfad, 2))
ChDir strFileToPrintPfad
'Zur druckender: Mappenname_Tabelle1
strFilename = strFileToPrintPfad & "\" & Worksheets("Tabelle2").Cells(2, 1).Text
strFileToPrintPfad = myWB.Path
'Dann wechsle vorher in den Pfad der Datei
ChDrive (Left(strFileToPrintPfad, 2))
ChDir myWB.Path
'Zur druckender: Mappenname_Tabelle1
strFilename = strFileToPrintPfad & "\" & Left(myWB.Name, Len(myWB.Name) - 4) & "_" & tarWks.Name
'EXCEL kann nur PS-Files direkt drucken
'daher muss sowohl PS-File wie auch PDF-File definiert werden
DistInputPS = strFilename & ".ps"
DistOutputPDF = strFilename & ".pdf"
'Der Druckername wird automatisch ermittelt
'in der Funktion "Get_Adobe_Printer"
myWB.PrintOut ActivePrinter:=Get_Adobe_Printer, prtoFilename:=DistInputPS, PrintToFile:=True
'Dem Distiller das PS-File zum konvertieren übergeben
Call myAdobeDist.myAdobeDist.FileToPDF(DistInputPS, DistOutputPDF, DistJobOptions)
'Schauen wie lange er braucht
'und STatus OK meldet
Do While Not myAdobeDist.blnFinished
DoEvents
Loop
If myAdobeDist.blnFinished Then
MsgBox "PDF Printjob erfolgreich beendet"
Else
MsgBox "Fehler beim Druck in PDF Datei aufgetreten"
End If
'Alten Drucker wieder herstellen
Application.ActivePrinter = oldActivePrinter
'Variablen leeren
Set myAdobeDist = Nothing
End Sub
Function Get_Adobe_Printer() As String
'Adobe Drucker bestimmen
Dim strBuffer As String
Dim intIndex As Integer
strBuffer = Space$(8192)
GetProfileString "PrinterPorts", vbNullString, "", strBuffer, Len(strBuffer)
prcGetPrinterNames strBuffer
prcGetPrinterPorts
For intIndex = 0 To intPrinterCount
If InStr(1, strPrinterNames(intIndex), "Adobe") > 0 Then
'Genaue Druckerbezeicnung übergeben
Get_Adobe_Printer = strPrinterNames(intIndex) & " auf " & strPrinterPorts(intIndex)
Exit For
End If
Next
End Function

Private Sub prcGetPrinterNames(ByVal strBuffer As String)
Dim intIndex As Integer
Dim strName As String
intPrinterCount = 0
Do
intIndex = InStr(strBuffer, Chr(0))
If intIndex > 0 Then
strName = Left$(strBuffer, intIndex - 1)
If Len(Trim$(strName)) > 0 Then
strPrinterNames(intPrinterCount) = Trim$(strName)
intPrinterCount = intPrinterCount + 1
End If
strBuffer = Mid$(strBuffer, intIndex + 1)
Else
If Len(Trim$(strBuffer)) > 0 Then
strPrinterNames(intPrinterCount) = Trim$(strBuffer)
intPrinterCount = intPrinterCount + 1
End If
strBuffer = ""
End If
Loop While (intIndex > 0) And (intPrinterCount < MAX_PRINTERS)
End Sub


Private Sub prcGetPrinterPorts()
Dim strBuffer As String
Dim intIndex As Integer
For intIndex = 0 To intPrinterCount - 1
strBuffer = Space$(1024)
Debug.Print GetProfileString("PrinterPorts", strPrinterNames(intIndex), "", strBuffer, Len(strBuffer))
GetProfileString "PrinterPorts", strPrinterNames(intIndex), "", strBuffer, Len(strBuffer)
prcGetDriverAndPort strBuffer, strPrinterPorts(intIndex)
Next
End Sub


Private Sub prcGetDriverAndPort(ByVal Buffer As String, PrinterPort As String)
Dim intDriver As Integer
Dim intPort As Integer
PrinterPort = ""
intDriver = InStr(Buffer, ",")
If intDriver > 0 Then
intPort = InStr(intDriver + 1, Buffer, ",")
If intPort > 0 Then
PrinterPort = Mid$(Buffer, intDriver + 1, intPort - intDriver - 1)
Debug.Print PrinterPort
End If
End If
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub

Anzeige
AW: VIELEN DANK- aber einen kleine Haken gibt es noch
05.09.2005 16:23:10
Nepumuk
Hallo Beate,
du hast die alten Zeilen nicht gelöscht. Den Tabellennamen sowie die Zeilen- und Spaltennummern musst du natürlich an deine Tabelle anpassen!!!
Public Sub Print_to_PDF(tarWks As Worksheet)
    'by Ramses
    '*********************************
    'Verweise setzen auf
    'Microsoft Office 10.0 / 11.0 Object Library und
    'Acrobat Distiller
    '*********************************
    'Zusätzlich wird das Klassenmodul classAcroDist benötigt
    Dim myAdobeDist As classAcroDist 'see class module
    Dim myWB As Workbook
    Dim strFilename As String
    Dim strFileToPrintPfad As String
    Dim DistInputPS As String
    Dim DistOutputPDF As String
    Dim DistJobOptions As String
    Dim oldActivePrinter As String
    Set myAdobeDist = New classAcroDist
    'Distiller ausgeblendet startetn
    myAdobeDist.myAdobeDist.bShowWindow = False
    'Alle aktuellen Printjobs des Distillers stoppen
    myAdobeDist.myAdobeDist.bSpoolJobs = False
    'Alten Drucker aufnehmen
    oldActivePrinter = Application.ActivePrinter
    'Workbook zuweisen
    Set myWB = Workbooks(tarWks.Parent.Name)
    'Pfad der Mappe extrahieren
    strFileToPrintPfad = Worksheets("Tabelle2").Cells(2, 2).Text
    'Dann wechsle vorher in den Pfad der Datei
    ChDrive (Left(strFileToPrintPfad, 2))
    ChDir strFileToPrintPfad
    'Zur druckender: Mappenname_Tabelle1
    strFilename = strFileToPrintPfad & "\" & Worksheets("Tabelle2").Cells(2, 1).Text
    'EXCEL kann nur PS-Files direkt drucken
    'daher muss sowohl PS-File wie auch PDF-File definiert werden
    DistInputPS = strFilename & ".ps"
    DistOutputPDF = strFilename & ".pdf"
    'Der Druckername wird automatisch ermittelt
    'in der Funktion "Get_Adobe_Printer"
    myWB.PrintOut ActivePrinter:=Get_Adobe_Printer, prtoFilename:=DistInputPS, PrintToFile:=True
    'Dem Distiller das PS-File zum konvertieren übergeben
    Call myAdobeDist.myAdobeDist.FileToPDF(DistInputPS, DistOutputPDF, DistJobOptions)
    'Schauen wie lange er braucht
    'und STatus OK meldet
    Do While Not myAdobeDist.blnFinished
        DoEvents
    Loop
    If myAdobeDist.blnFinished Then
        MsgBox "PDF Printjob erfolgreich beendet"
    Else
        MsgBox "Fehler beim Druck in PDF Datei aufgetreten"
    End If
    'Alten Drucker wieder herstellen
    Application.ActivePrinter = oldActivePrinter
    'Variablen leeren
    Set myAdobeDist = Nothing
End Sub

Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
SUUUPER ES GEHT
05.09.2005 18:18:41
BEATE
Hallo Nepumuk!
Du bist ein RIESENSCHATZ!
Es funktioniert!!!!!
Kann es gar nicht glauben.
Nicht böse sein, wenn ich noch 2 kleine Fragen stelle:
Wie ist es möglich dass, er mir nur das aktuelle Tabellenblatt ausdruckt und was muß ich deaktivieren, damit ich nachher den "Ausdruck" auch sehen kann?
Vielen lieben Dank für Deine große Hilfe!
DICKES BUSSI
BEATE
AW: SUUUPER ES GEHT
05.09.2005 18:36:18
Ramses
Hallo
Es wird normalerweise IMMER NUR das aktuelle Tabellenblatt ausgedruckt.
Der Code ist nicht dafür geschrieben, die ganze Mappe auszudrucken
Um das PDF File am schluss gleich anzusehen, schreib folgende Zeile in das Makro "Print_To_PDF"
'Alten Drucker wieder herstellen
Application.ActivePrinter = oldActivePrinter
'Variablen leeren
Set myAdobeDist = Nothing
Open_PDF DistOutputPDF
End Sub
Dieser Code muss dann noch in das Modul.
Sub Open_PDF(FileToOpen As String)
    'by Ramses
    '****************
    'Verweis auf Acrobat Application setzen !!!
    '****************
    Dim myAdobeAc As Acrobat.CAcroApp
    Dim myAdobeDoc As Acrobat.CAcroPDDoc
    Dim myAdobeView As Acrobat.CAcroAVDoc
    'Adobe Application zuweisen
    Set myAdobeAc = CreateObject("AcroExch.App")
    'Adobe Dokument Handler zuweisen
    Set myAdobeDoc = CreateObject("AcroExch.PDDoc")
    If myAdobeDoc.Open(FileToOpen) Then
        myAdobeAc.Show
        'Adobe View Handler zuweisen
        'um mit dem Dokument allenfalls arbeiten zu können
        'via VBA
        Set myAdobeView = myAdobeDoc.OpenAVDoc("")
    Else
        MsgBox "Fehler: Das Dokument :"" & FileToOpen & "" kann nicht geöffnet werden", vbInformation
    End If
    Set myAdobeView = Nothing
    Set myAdobeDoc = Nothing
    Set myAdobeAc = Nothing
End Sub

Gruss Rainer
Anzeige
Frage an Rainer bzw. Max
05.09.2005 21:04:26
Peter
Servus,
@Beate: freut mich das es geklappt hat, hätte dir niemals so gut helfen können wie Max und Rainer.
@Ihr Zwei:
Mal ne Nachfrage zu dem Thema. Hab gerade ein Controling-Tool in Excel erstellt, das einzig und allein in einer UserForm dargestellt wird. Und würde jetzt gerne den Pdf Druckteil von Ramses integrieren (wenn ich darf ?) um ein Reporting zu integrieren.
Das Prob an der Sache bzw. meine generelle Überlegung währe normalerweise recht einfach mit me.PrintForm. Das funzt aber so nicht.
Die nächste Gedanke währe alle Daten zeitnah auf ein Tabellenblatt zu schreiben und dann mit Ramses Code das ganze in ein Pdf zu wandeln. Da es sich um eine 9 Seiten MultiPage handelt, wäre das ein ziemlicher Programmier- bzw. Rechenaufwand.
Fällt euch eine Alternative ein ? Wenn Ihr noch ne Minute Zeit habt, mein Dank währe euch Gewiss.
MfG
Peter
Anzeige
offen vergessen sry o.t.
05.09.2005 21:21:52
offen
MfG
AW: offen vergessen sry o.t.
05.09.2005 21:30:50
Ramses
Hallo Peter
Das Makro kannst du gerne verwenden,... ich kanns eh nicht kontrollieren.
Einzig die Autorenhinweise sollten dabei bleiben :-)
Ausser dem zeitnahen schreiben in ein temporäres Sheet, fällt mir aber auch nichts ein.
Gruss Rainer
AW: Frage an Rainer bzw. Max
05.09.2005 21:32:29
Nepumuk
Hallo Peter,
werden, in einer Exceltabelle eingefügte, Bilder mit ausgedruckt?
Gruß
Nepumuk
Excel & VBA – Beispiele
AW: Frage an Rainer bzw. Max
05.09.2005 21:40:09
Ramses
Hallo Nepumuk
Ja, die Tabelle wird so gedruckt, wie sie am Bildschirm erscheint.
Ich hab dein ultimatives Makro schon ausprobiert,... allerdings macht er mir einen Screenshot vom gesamten Bildschirm, und nicht nur von der UF

Option Explicit
'Von Nepumuk
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
Private Const VK_LMENU = &HA4

Private Sub CommandButton1_Click()
    'Verweis auf "Microsoft Forms 2.0 Object Library" aktivieren !!
    'sonst geht es nicht
    'Dataobject wird gebraucht wegen der Zwischenablage
    'Vergleicht eine Zeit die in der Zwischenablage ist
    Dim ClpObj As DataObject
    Set ClpObj = New DataObject
    keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
    keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
    keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
    keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
    Unload Me
    ClpObj.GetFromClipboard
    ActiveSheet.Paste 'Special Format:="Bitmap", link:=False, DisplayAsIcon:=False
End Sub

Gruss Rainer
Anzeige
AW: Frage an Rainer bzw. Max
05.09.2005 21:53:33
Nepumuk
Hallo Rainer,
versuch es mal so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" ( _
    ByVal wCode As Long, _
    ByVal wMapType As Long) As Long
Private Declare Sub keybd_event Lib "user32" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)

Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_MENU = &H12

Public Sub prcCopyForm()
    Dim intAltScan As Integer
    Application.ScreenUpdating = False
    intAltScan = MapVirtualKey(VK_MENU, 0&)
    keybd_event VK_MENU, intAltScan, 0&, 0&
    keybd_event vbKeySnapshot, 0&, 0&, 0&
    DoEvents
    keybd_event VK_MENU, intAltScan, KEYEVENTF_KEYUP, 0
    ThisWorkbook.Worksheets.Add
    Rows.RowHeight = 3
    Columns.ColumnWidth = 0.83
    With ActiveSheet
        .Paste
        
        '***************************** DRUCKEN *****************************
        
        ' Application.DisplayAlerts = False
        ' .Delete
        ' Application.DisplayAlerts = True
    End With
    Application.ScreenUpdating = True
End Sub

Gruß
Nepumuk
Da siehst du mal wie lange ich schon versuche...
05.09.2005 22:35:25
Ramses
Hallo Nepumuk
... von Dir zu lernen :-) *lol*
Funktioniert einwandfrei.
Gruss Rainer
hmm, wollte mich mal kurz in den Dialog...
05.09.2005 22:46:13
Peter
Servus,
einmischen ;).
Vielen Dank für den Code Max. Lernen würd ich das ja gerne aber das ist mir eindeutig zu hoch, im Moment.
Danke.
MfG
Peter
P.S.
05.09.2005 21:59:39
Nepumuk
Hi Rainer,
das war der Code für Win95/98/Me
Gruß
Max
AW: Frage an Rainer bzw. Max
05.09.2005 21:40:27
Peter
Servus Max,
hmm irgendwie versteh ich dein Frage nich so ganz.
Wenn ich eine Grafik in der Tabelle hab wird die mitgedruckt.
Wenn´s um die UF geht, dort sind im Prinzip pro MultiPage 1 Grafik + bei 2 Pages jeweils 2 Grafiken.
Oder war das dein dezenter Hinweiß das ich die UF per Bildschirm Druck in die Tabelle als Grafik einfügen soll?
Du siehst mich ratlos.
MfG
Peter
Anfrage
07.09.2005 04:24:45
Udo
hallo könnt ihr mir bitte den code fürs erstellen eines PDF´s schicken.
ich hab das mit dem Klassenmodul und dem Acrobat Destiller nicht ganz gerafft.
sorry aber bin noch anfänger
AW: Anfrage
07.09.2005 19:06:05
Ramses
Hallo
der komplette Code mit Kommentar und die Anleitung wo was stehen soll findest du in meinem Beitrag
https://www.herber.de/forum/messages/662099.html
Was anderes, oder noch mehr, kann ich dir leider nicht geben.
Der Druck wird dann mit Start_Print() gestartet
Gruss Rainer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige