Printen pdf file via excel VBA

Status
Niet open voor verdere reacties.

Fireman911

Gebruiker
Lid geworden
1 mrt 2010
Berichten
8
Beste allen,

Alvast mijn excuus voor het geval deze vraag al eens gesteld is, heb het internet afgezocht maar ik kon geen antwoord vinden op mijn vraag.

Ik heb een klein visual basic programma geschreven achter een knop in excel.
Een van de dingen die na het drukken van deze knop moet gebeuren is het printen van een pdf file.

Deze print functie komt binnen een If-functie, uit mijn research heb ik de codering zoals hieronder gevonden, helaas werkt deze functie niet omdat hij bij public declare ptrsafe function blijft hangen.



If Range("c6") = "SH-DO 001" Then
Sheets("Sheet2").Select
Range("j2").Select
ActiveCell.FormulaR1C1 = "x"
Sheets("Sheet1").Select

Public Enum actionType
openfile
PrintFile
End Enum
Public Const SW_SHOWNORMAL As Long = 1
Public Declare PtrSafe 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
Function ExecuteFile(fileName As String, action As actionType)
' action can be either "Openfile" or "Printfile".
Dim sAction As String
Select Case action
Case 0 ' openfile
sAction = "Open"
Case 1 ' printfile
sAction = "Print"
End Select
ShellExecute 0, sAction, fileName, vbNullString, "", SW_SHOWNORMAL
End Function
Sub TestPrint()
' open a file
ExecuteFile "D:\Voucher_Part1.pdf", PrintFile
End Sub
End If




Alvast bedankt voor jullie hulp!

Met vriendelijke groet,
Ralf Janssen

Mijn pc:
Asus 64-bit windows 7 home premium
Microsoft office professional Plus 2010
 
Doe hem eens zo:
Code:
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
          (ByVal hwnd As Long, ByVal lpszOp As String, _
           ByVal lpszFile As String, ByVal lpszParams As String, _
           ByVal LpszDir As String, ByVal FsShowCmd As Long) _
           As Long

Die PtrSave is voor 64-bit declaratie.
 
Laatst bewerkt:
Tnx voor je snelle reactie.

Heb je reactie aangepast op mijn programma, ik krijg nu de volgende foutmelding:

Compile error:
The code in this project must be updated for use on 64-bit system.
Please review and update Declare statements and then mark the with the PtrSafe attribute.
 
Dat bedoel ik ;)
Maar welke melding krijg je dan als je die PtrSafe wel gebruikt?

Maak er eens dit van:
Code:
Public Declare PtrSafe 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 LongPtr
 
Laatst bewerkt:
Hij geeft nu de melding:

compile error:

only comments may appear after End Sub, End Function or End property.
 
De declaratie dus nu in orde. Je hebt je code zonder de juiste inspringpunten en zonder codetags geplaatst. Dat maakt het slecht leesbaar. Maar onder de End Sub staat End If. Die moet dus voor de End Sub komen.

Dat soort dingen krijg je dus als je geen inspringpunten gebruikt.

Nog even gekeken maar van de hele volgorde klopt niks.
Kijk dat nog eens goed na.
 
Laatst bewerkt:
Doe het maar eens zo en zet onderstaande in een Module:

Code:
Public Const SW_SHOWNORMAL As Long = 1

Declare PtrSafe 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 LongPtr

Public Enum actionType
    openfile
    PrintFile
End Enum

Function ExecuteFile(fileName As String, action As actionType)
    Dim sAction As String
    
    Select Case action
        Case 0 ' openfile
          sAction = "Open"
        Case 1 ' printfile
          sAction = "Print"
    End Select
    ShellExecute 0, sAction, fileName, vbNullString, "", SW_SHOWNORMAL
End Function

Sub TestPrint()
    ExecuteFile "D:\Voucher_Part1.pdf", PrintFile
End Sub

Dit heb ik eruit gelaten omdat niet duidelijk is wat je ermee wilt of waar het thuis hoort:
Code:
If Range("c6") = "SH-DO 001" Then
    Sheets("Sheet2").Select
    Range("j2").Select
    ActiveCell.FormulaR1C1 = "x"
    Sheets("Sheet1").Select
End If
 
Ik heb de functie nu als aparte module ingezet.

Hij werkt!!!

het stuk wat je eruit gelaten hebt is de als-functie waar deze printactie bij hoort.
is er iets mogelijk om bij deze als functie een run van module 2 bij toe voegen?

alvast super bedankt!!
 
Je heb geen aparte module nodig. Je bedoelt iets als dit?
Code:
Sub TestPrint()
    If Range("c6") = "SH-DO 001" Then
        Sheets("Sheet2").Select
        Range("j2").Select
        ActiveCell.FormulaR1C1 = "x"
        Sheets("Sheet1").Select
    End If
    ExecuteFile "D:\Voucher_Part1.pdf", PrintFile
End Sub


Dat stukje mag je trouwens ook zo schrijven:
Code:
If Range("c6") = "SH-DO 001" Then Sheets("Sheet2").Range("j2").FormulaR1C1 = "x"

Dan hoef je het huidige werkblad niet te verlaten en opnieuw te selecteren.
 
Laatst bewerkt:
TNX!!! het is gelukt.

Uiteindelijke werk is dit geworden:

Code:
Public Const SW_SHOWNORMAL As Long = 1

Declare PtrSafe 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 LongPtr

Public Enum actionType
    openfile
    PrintFile
End Enum

Function ExecuteFile(fileName As String, action As actionType)
    Dim sAction As String
    
    Select Case action
        Case 0 ' openfile
          sAction = "Open"
        Case 1 ' printfile
          sAction = "Print"
    End Select
    ShellExecute 0, sAction, fileName, vbNullString, "", SW_SHOWNORMAL
End Function

Sub shdo001()
    Sheets("Sheet2").Select
    Range("j2").Select
    ActiveCell.FormulaR1C1 = "x"
    Sheets("Sheet1").Select
    ExecuteFile "D:\Voucher_Part1.pdf", PrintFile
End Sub
 
Ok dan :thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan