Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

PDF Drucken VBA


Betrifft: PDF Drucken VBA
von: Sabine
Geschrieben am: 30.09.2019 10:39:08

Hallo Herbers,

folgenden Code habe ich mir aus dem Forum herausgesucht:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim Datei As String, NeuDatei As String, Pfad As String, NeuPfad As String
    Dim strOff As String, Ext As String
    
    If Target.Column = 4 Then
    If Target <> "" Then
        Ext = ".pdf"
        strOff = "\123\4567 789\"
        Pfad = ThisWorkbook.Path
        Datei = Target
        
        NeuPfad = Left(Pfad, InStrRev(Pfad, "\") - 1) & strOff
        If Dir(NeuPfad, vbDirectory) <> "" Then
            NeuDatei = NeuPfad & Datei & Ext
            If Dir(NeuDatei) <> "" Then
            
          '  ActiveWorkbook.FollowHyperlink NeuPfad & Datei & Ext
             '-> Hier müsste anstatt des Hyperlinks der Befehl rein <-



           Else
                MsgBox NeuDatei & " NICHT gefunden", vbCritical
            End If
        Else
            MsgBox "Pfad nicht gefunden", vbCritical
        End If
    End If
    End If

End Sub
Ich würde gern mittels eines Doppelklickbefehles die PDF (öffnen und) ausdrucken.. Habe im Netz nicht wirklich etwas nützliches gefunden...

Vielen Dank im voraus..

Gruß
Sabine

  

Betrifft: AW: PDF Drucken VBA
von: ChrisL
Geschrieben am: 30.09.2019 11:10:27

Hi Sabine

Ich habe mir da kürzlich was aus dem Netz kopiert und leicht modifiziert. (die Quelle weiss ich leider nicht mehr)

Range("B1") müsstest du durch deinen Pfad ersetzen.

Wenn die PDF unterschiedliche Länge haben und wenn die Reihenfolge relevant ist, dann müsstest du ggf. eine zeitliche Verzögerung (Wait) um 1-2 Sekunden einbauen. Ansonsten kommt die Reihenfolge durcheinander (kleine Dokumente "überholen" längere Dokumente).

Zudem müsstest du bei grossen Stapelverarbeitungen den "Sleep-Modus" von Windows deaktivieren. Der Prozess unterbricht sonst.

cu
Chris









Private Declare

Function ShellExecuteA Lib "shell32.dll" ( _
    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 prcPrint_PDF()
Dim strPath As String
Dim FSO As Object, F1 As Object

strPath = Tabelle1.Range("B1")
If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set FSO = FSO.Getfolder(strPath)

If Not MsgBox(FSO.Files.Count & " Dateien werden auf den Standard-/Default-Drucker ausgegeben.", _
 vbInformation + vbYesNo) = vbYes Then Exit Sub

For Each F1 In FSO.Files
  If LCase(CStr(F1.Path)) Like "*.pdf" Then
    ShellExecuteA 0&, "Print", F1.Path, vbNullString, vbNullString, 0
  End If
Next F1
End Sub



  

Betrifft: AW: PDF Drucken VBA
von: Sabine
Geschrieben am: 30.09.2019 11:28:16

Hallo Chris,

2 Fragen erstmal
An welche Stelle füge ich die "private Declare" ein? direkt vor meinem doubleclick-Befehl?
kann ich dann auch "strPath=NeuPfad & Datei & Ext" als Pfad verwenden für mein Code?

Vielen dank für deine Mühen.

Gruß


  

Betrifft: AW: PDF Drucken VBA
von: ChrisL
Geschrieben am: 30.09.2019 11:36:11

Hi

Ja das wäre ein guter Start :)
Falls es nicht geht, versuch ein Standardmodul.

Die Stapelverarbeitung ist in deinem Fall irrelevant (meine Bemerkungen und FSO im Code kannst du ignorieren). Eigentlich brauchst du nur die Funktion und den ShellExecute Befehl.

cu
Chris


  

Betrifft: leider funktioniert es so bei mir nicht
von: Sabine
Geschrieben am: 30.09.2019 12:00:12

Hab jetzt es jetzt hin und her versucht. Aber leider ist die Deklaration nicht erfolgreich weil sie sich auch jedesmal rot färbt sobald ich diese einfüge. So ist der aktuelle Code:


Private Declare
Function ShellExecuteA Lib "shell32.dll" ( _
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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Datei As String, NeuDatei As String, Pfad As String, NeuPfad As String
Dim strOff As String, Ext As String

If Target.Column = 4 Then
If Target <> "" Then
Ext = ".pdf"
strOff = "\123\456 789\"
Pfad = ThisWorkbook.Path
Datei = Target

NeuPfad = Left(Pfad, InStrRev(Pfad, "\") - 1) & strOff
If Dir(NeuPfad, vbDirectory) <> "" Then
NeuDatei = NeuPfad & Datei & Ext
If Dir(NeuDatei) <> "" Then

Call ShellExecute(0, "print", NeuPfad & Datei & Ext, "", "", nShowCmd)


Else
MsgBox NeuDatei & " NICHT gefunden", vbCritical
End If
Else
MsgBox "Pfad nicht gefunden", vbCritical
End If
End If
End If
End If


  

Betrifft: AW: leider funktioniert es so bei mir nicht
von: ChrisL
Geschrieben am: 30.09.2019 12:36:00

die Darstellung im Forum war etwas unglücklich...

Private Declare Function ShellExecuteA Lib "shell32.dll" ( _
    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



  

Betrifft: AW: leider funktioniert es so bei mir nicht
von: Sabine
Geschrieben am: 30.09.2019 15:18:33

Ahhh..

Jetzt passt alles. Vielen Dank.