Consulting

Results 1 to 10 of 10

Thread: Solved: Open & Print PDF

  1. #1

    Solved: Open & Print PDF

    Hi all,

    I wish to open and print a pdf document using VBA. However I do not wish to use the hyperlink method as I need to use a wildcard.

    For example I want to open a document called "safekeeping", using safe* so that it will open any document with safe as the first characters.

    I have succeeded in doing this for excel and word. Just not for PDF. Any help would be gratefully received. Here is my code for an excel file.

    [VBA]Sub MyFiles2()
    Dim MyFolder As String
    Dim MyFile As String
    MyFolder = "C:\"
    MyFile = Dir(MyFolder & "safe*.xls")
    If MyFile <> "" Then
    Workbooks.Open MyFile
    End If
    Sheets("Sales").Select
    Selection.PrintOut
    End Sub
    [/VBA]
    Many thanks,

    Des

  2. #2
    VBAX Guru Kenneth Hobs's Avatar
    Joined
    Nov 2005
    Location
    Tecumseh, OK
    Posts
    4,956
    Location
    Welcome to the forum! Please use VBA code tags to post code.

    Your needs are unclear. Did you want to print a range or print a pdf file or create a pdf file? If you are just printing a range, the printout method should suffice.

    To create a pdf file, you might want to review this thread. http://www.vbaexpress.com/forum/showthread.php?t=21590

  3. #3
    Hi Kenneth , thanks for the quick response. I am trying to open a PDF and then I would like to print either the entire document or a selection of pages. I want to use a wild card and not a hyperlink to achieve this. I was successful doing this for word and excel but can't seem to open a PDF. Thanks des

  4. #4
    VBAX Guru Kenneth Hobs's Avatar
    Joined
    Nov 2005
    Location
    Tecumseh, OK
    Posts
    4,956
    Location
    If you have Adobe Acrobat with Distiller and not just Adobe Reader: http://www.vbaexpress.com/forum/showthread.php?t=38468

    IF you just have the reader, use Shell() with command line switches. http://excel.itags.org/q_microsoft-excel_461980.html

    Here is a string that I use for the method above but with Acrobat to show the command line parameters that you need for the Shell() method. I don't have time right now to work out the error catching routines. I normally use a method to find the PDF application and try command line parameters for it.

    [VBA]Sub t()
    Dim q As String, filename As String
    q = """"
    filename = "c:\pdf\test.pdf"
    s = "cmd /c " + q + "C:\Program Files\Adobe\Acrobat 9.0\Acrobat\Acrobat.exe " + q + " /s /o /n /h /t " + filename
    Shell s, vbMinimizedFocus
    End Sub
    [/VBA]
    Last edited by Kenneth Hobs; 12-27-2012 at 01:02 PM.

  5. #5
    Thanks very much Kenneth . I will try that. Does the shell line command allow for wild cards. For example test*

  6. #6
    VBAX Guru Kenneth Hobs's Avatar
    Joined
    Nov 2005
    Location
    Tecumseh, OK
    Posts
    4,956
    Location
    Set the filename first using the Dir() command with the wildcard.

    In a Module, this prints all sheets for my Acrobat.exe but leaves a blank instance open.

    [vba]Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _
    (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long

    Sub t()
    Dim q As String, filename As String, s As String
    q = """"
    filename = ThisWorkbook.Path & "\Pages1to5.pdf"
    s = q & ExePath(filename) & " " & q & " /n /s /o /h /t " & filename
    Shell s, vbMinimizedFocus
    End Sub

    Function ExePath(lpFile As String) As String
    Dim lpDirectory As String, sExePath As String, rc As Long
    lpDirectory = "\"
    sExePath = Space(255)
    rc = FindExecutable(lpFile, lpDirectory, sExePath)
    sExePath = Left$(sExePath, InStr(sExePath, Chr$(0)) - 1)
    ExePath = sExePath
    End Function[/vba]

  7. #7
    VBAX Master Aflatoon's Avatar
    Joined
    Sep 2009
    Location
    UK
    Posts
    1,720
    Location
    You can also use ShellExecute
    [vba]Private 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
    Const SW_HIDE As Long = 0&
    Const SW_SHOW As Long = 5&

    Sub PrintFile(strFilePath As String)
    ShellExecute Application.hWnd, "Print", strFilePath, 0&, 0&, SW_HIDE
    End Sub
    Sub OpenFile(strFilePath As String)
    ShellExecute Application.hWnd, "Open", strFilePath, 0&, 0&, SW_SHOW
    End Sub
    [/vba]
    Be as you wish to seem

  8. #8
    Hi that works nicely for static file names. I have never used the dir function before so using your example how might that look if I want to print all pdf files that begin with the letters "safe" ? Once I have that piece I think it is problem solved.

    Thanks,

    Des

  9. #9
    VBAX Master Aflatoon's Avatar
    Joined
    Sep 2009
    Location
    UK
    Posts
    1,720
    Location
    If you are referring to my code, something like
    [vba]
    Sub PrintPDFs()
    dim sFile as string
    dim sFolder as string
    sfolder = "C:\some folder\"
    sfile = dir(sfolder & "safe*.pdf")
    do while sfile <> ""
    printfile sfolder & sfile
    sfile = dir
    loop
    end sub[/vba]
    Be as you wish to seem

  10. #10
    Aflatoon/Kenneth,

    Thank you both very much. That works perfectly. I will do some testing and then mark the question as solved.

    Thanks,

    Des

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •