VBA: файл-открыть в PDF-страницу - PullRequest
1 голос
/ 22 марта 2010

У меня есть таблица Excel. Один из столбцов в электронной таблице содержит имя файла PDF; номер страницы (name of file;5).

Как написать функцию VBA, чтобы при щелчке пользователем в любой из ячеек в этом столбце имя файла и номер страницы передавались как переменные, а файл pdf открывался на указанной странице? *

1 Ответ

5 голосов
/ 22 марта 2010

Для этого:

  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
...