ms-access - 在VBA中打开特定页码的PDF

标签 ms-access vba

我试图在我的 Access 表单上创建一个按钮,允许用户查看与表单中的数据相关的相应页面(在这种情况下,零件编号显示在表单上,​​我想要按钮打开零件标准文件以显示该零件的蓝图/图表)

我尝试在文件路径末尾使用 Adob​​e 的页面参数 #page=pagenum,但这样做不起作用。

这是我的代码(基本,我知道),但我试图弄清楚该去哪里。出于显而易见的原因,我简单地压缩了我的文件路径 - 注意:这不是一个 URL,而是一个文件路径(如果这很重要)。

Private Sub Command80_Click()

    Dim loc As String 'location of file

    'loc = Me.FileLoc
    loc = "G:\*\FileName.pdf#page=1"

    Debug.Print loc
    'Debug.Print Me.FileLoc
    'Debug.Print Me.FileName

    Application.FollowHyperlink loc

End Sub

这样可以吗?我将继续阅读其他用户的帖子,希望找到解决方案,如果找到解决方案,我会在此处注明。

谢谢!

更新

我找到了一种方法来做到这一点,只是我现在有一个小并发症。我的数据库将被许多用户 Access ,可能使用不同版本的 Acrobat,或位于不同的位置。这是我的工作代码:

Private Sub Command2_Click()

pat1 = """C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe"""

pat2 = "/A ""page=20"""

pat3 = """G:\*\FileName.pdf"""

Shell pat1 & " " & pat2 & " " & pat3, vbNormalFocus

End Sub

现在,这是我关心的问题。此代码从特定文件路径打开 AcroRd32.exe,如果我的用户将其存储在其他地方或具有不同的版本,则这将不起作用。有人对如何解决这个问题有建议吗?

再次感谢! :)

最佳答案

正确的方法可能是在系统注册表中查找 acrobat reader 可执行文件的位置。我发现这通常比它的值(value)更麻烦,特别是如果我对我的程序将安装的所有位置(例如在单个 Intranet 内)有一定的控制。通常我最终会使用我编写的这个函数:

'---------------------------------------------------------------------------------------
' Procedure : FirstValidPath
' Author    : Mike
' Date      : 5/23/2008
' Purpose   : Returns the first valid path found in a list of potential paths.
' Usage     : Useful for locating files or folders that may be in different locations
'               on different users' computers.
' Notes     - Directories must be passed with a trailing "\" otherwise the function
'               will assume it is looking for a file with no extension.
'           - Returns Null if no valid path is found.
' 5/6/11    : Accept Null parameters.  If all parameters are Null, Null is returned.
'---------------------------------------------------------------------------------------
'
Function FirstValidPath(ParamArray Paths() As Variant) As Variant
Dim i As Integer

    FirstValidPath = Null
    If UBound(Paths) - LBound(Paths) >= 0 Then
        For i = LBound(Paths) To UBound(Paths)
            If Not IsNull(Paths(i)) Then
                If Len(Dir(Paths(i))) > 0 Then
                    FirstValidPath = Paths(i)
                    Exit For
                End If
            End If
        Next i
    End If

End Function

该函数采用参数数组,因此您可以根据需要传递尽可能多或尽可能少的路径:

PathToUse = FirstValidPath("C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe", _
                           "C:\Program Files\Acrobat\Reader.exe", _
                           "C:\Program Files (x86)\Acrobat\Reader.exe", _
                           "C:\Program Files\Acrobat\12\Reader.exe")
pat1 = """" & PathToUse & """"

关于ms-access - 在VBA中打开特定页码的PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6361706/

相关文章:

具有 Access 数据库的 C# 应用程序无法在 64 位 Windows 7 上运行

ms-access - 将 mdb 文件转换为 csv

c# - C# 控制台应用程序中的 SQL 更新错误

ms-access - 使用变量来命名我正在制作的表

vba - 从单元格中提取文本内容(粗体、斜体等)

excel:根据3列检查重复行并保留一行

excel - 更改工作簿名称的一部分并将文件另存为新名称

vba - 缺少 Microsoft 通用控件

regex - 将 Regex 实现到 Access VBA 中以解决密码复杂性

vba - 在 VBA 中获取 "error: type mismatch"