2010-03-22 163 views
1

我有一个Excel电子表格。电子表格中的其中一列包含PDF文件的名称;页码(name of file;5)。VBA:文件打开为PDF页面

如何编写VBA函数,以便当用户单击该列中的任何单元格时,文件名称和页码作为变量传递,PDF文件将打开到指定的页面?

回答

4

要做到这一点:

  1. 创建工作表的SelectionChanged事件的事件处理程序。
  2. 为单元格的值创建解析函数。
  3. 创建一个启动带页码参数的Acrobat的子例程。

请参阅以下示例代码。常数应根据您的系统进行更改。此代码需要粘贴在工作表的VBA宏编辑器中。

Private Const MyPathColumn As Integer = 3 
Private Const PathToAcrobatExe As String = _ 
       "C:\Program Files\Adobe\Reader 8.0\Reader\Acrord32.exe" 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    On Error GoTo errHnd 
    If Target.Cells.Count = 1 Then 
     If Target.Column = MyPathColumn Then 
      If Len(Target.text) > 0 Then 
       Dim filePath As String 
       Dim pageNumber As Integer 
       Call ParsePath(Target.text, filePath, pageNumber) 
       Call RunPdf(filePath, pageNumber) 
      End If 
     End If 
    End If 
    Exit Sub 
errHnd: 
    Call MsgBox("Error Opening File", vbCritical) 
End Sub 

Private Function getShellCommand(filePath As String, _ 
         pageNumber As Integer) As String 
    getShellCommand = PathToAcrobatExe & " /A ""page=" _ 
        & CStr(pageNumber) & """ """ _ 
        & filePath & """" 
End Function 

Private Sub RunPdf(filePath As String, pageNumber As Integer) 
    Call Shell(getShellCommand(filePath, pageNumber), _ 
       vbMaximizedFocus) 
End Sub 

Private Sub ParsePath(text As String, ByRef filePath As String, _ 
         ByRef pageNumber As Integer) 
    Dim parts() As String 
    parts = Split(text, ";") 
    filePath = parts(0) 
    pageNumber = CInt(parts(1)) 
End Sub 
+0

我将这段代码粘贴到Worksheet VBA宏编辑器中。必要的信息在第3栏(m:\ hyperlink \ test.pdf; 5)中。我点击包含此信息的第3列中的单元格,但文档未打开。什么都没发生。为了实现这一目标,我错过了这个过程。谢谢! – user299302 2010-03-23 10:18:55

+0

确保将MyPathColumn更改为3,并且PathToAcrobatExe指向Adobe Acrobat Reader的主要exe文件所在的路径(可能称为Acrord32.exe,Acrobat.exe等) – 2010-03-23 10:29:26