【问题标题】:How do you open a pdf file with VBA code for a relative file path?如何打开带有 VBA 代码的 pdf 文件以获取相对文件路径?
【发布时间】:2018-09-11 01:29:30
【问题描述】:

我正在尝试找到命令和正确的编码来打开具有活动 Excel 文件的相对文件路径的 PDF 文件。下面的代码作为直接指向文件的链接可以正常工作。但是,我只需要此代码 sn-p 即可找到与打开的 excel 文件位于同一文件中的 PDF 文件并相应地打开。

Sub OpeningPDF()
    'ThisWorkbook.FollowHyperlink "C:\Users\Michael\My Documents\totals\copy.pdf"
End Sub

我尝试与ThisWorkbook.path 合作,但我没有尝试过任何工作或似乎已经过时。对此问题的任何帮助将不胜感激。

【问题讨论】:

    标签: excel pdf vba


    【解决方案1】:

    我找到了两种解决方案:

    The first one 正在使用内置的Shell() 函数。这应该会自动解析相对路径(相对于应用程序当前工作目录):

    Public Sub StartExeWithArgument()
        Dim strFilename As String
    
        strFilename = "../folder/file.pdf"
    
        Call Shell(strFilename, vbNormalFocus)
    End Sub
    

    The second one 使用Shell.Application COM 对象,基本上和第一个一样。

    Sub runit()
       Dim Shex As Object
       Set Shex = CreateObject("Shell.Application")
       tgtfile = "../folder/file.pdf"
       Shex.Open (tgtfile)
    End Sub
    

    【讨论】:

    • 谢谢!我都试过了,似乎我一定错过了一些东西。最后一个没有做任何事情,但第一个产生了“找不到文件”错误消息。
    • 所以说我的 PDF 文件的名称是“复制”,它与我运行 VBA 宏的 excel 文件位于同一个文件夹中。以下哪个变体是正确的(如果有)? 1) strFilename = "../copy.pdf" 2) strFilename = "../totals/copy.pdf" 3) 完全不同的东西。另外,这些斜线是否朝向正确的方向?我不应该使用反斜杠吗?
    【解决方案2】:

    如果您从ThisWorkbook.Path 和您的相对参考开始,然后为相对参考中的每个"..\" 修剪一层,您将获得路径。

    Function RelativeToAbsolutePath(ByVal RelativePath As String) AS String
        Dim TempStart AS String, TempEnd AS String
        TempStart = ThisWorkbook.Path
        TempEnd = RelativePath
        If Left(TempEnd,1) = "\" Then TempEnd = Mid(TempEnd,1)
    
        RelativeToAbsolutePath = ""
        On Error GoTo FuncErr
    
        While Left(TempEnd,3)="..\" AND InStrRev(TempStart,"\")>0
            TempStart = Left(TempStart,InStrRev(TempStart,"\")-1) 'Remove 1 layer from Workbook path
            TempEnd = Mid(TempEnd,4) 'Remove 1 instance of "..\"
        Wend
    
        RelativeToAbsolutePath = TempStart & "\" & TempEnd 'Stitch it all together
    FuncErr: 'You may want a DIR(..) check to see if the file actually exists?
    End Function
    

    然后你可以用Shell打开它

    【讨论】:

    • 这是有道理的,但我不得不承认大部分内容都超出了我的想象。如果 PDF 文件与将运行宏的 excel 文件位于同一文件夹中,那么路径脚本部分的外观应该如何?
    • 我让 adobe acrobat Pro 自动打开我的 PDF 文件,如果这有影响的话。在这种情况下,文件的名称只是“copy.pdf”
    • 如果它和工作簿在同一个文件夹中,那么路径就是ThisWorkbook.Path & "\copy.pdf"。上面的宏会产生来自RelativeToAbsolutePath("copy.pdf")的结果
    • 谢谢!那么我的命令应该如何使用您的函数实际打开文件?
    • 从与工作簿相同的目录中打开文件“copy.pdf”:CreateObject("Shell.Application").Open RelativeToAbsolutePath("copy.pdf"),从同一目录中的文件夹中打开它CreateObject("Shell.Application").Open RelativeToAbsolutePath("FolderName\copy.pdf") 并从上面的文件夹中打开@ 987654330@
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多