excel 如何使用相对文件路径的VBA代码打开PDF文件?

7gs2gvoe  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(931)

我试图找到命令和正确的代码来打开一个PDF文件,该文件具有到活动Excel文件的相对文件路径。下面的代码可以直接链接到该文件。但是,我只需要这个代码片段来找到与打开的Excel文件位于同一文件中的PDF文件,并相应地打开。

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

我试着用ThisWorkbook.path工作,但是我试过的任何东西都不起作用,或者看起来都过时了。在这件事上的任何帮助都将非常感激。

ppcbkaq5

ppcbkaq51#

我找到了两种解决方案:
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对象,基本上与第一个COM对象的操作相同。

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

rxztt3cl2#

如果你从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打开它

相关问题