Есть перечень контрактов в разных папках в PDF список с полными путями до них уже нашел сделал список гиперссылками через формулу Гиперссылка (путь;название) теперь хочу следующий шаг: в контрактах есть определенные условия, например - сроки или риски. Находятся на разных страницах. Можно ли заставить открывать сразу на странице? в html работает следующая запись Наша пдфка страница 3 По этой ссылке пдф открывается в эксплоере на третьей странице. В эксель - открывается акробат - на первой странице.
так до сих пор и нет решения? Возникла та же проблема: в локальной сети есть файл пдф, состоящий из 70 страниц. Вставлял в ячейки гиперссылки таким же образом "Проба.pdf#page=3" - файл открывается на первой странице. Дербанить файл пдф на страницы не вариант, т.к. он регулярно редактируется.
пробовал, там бред написан. Действительно теоретик. Либо я недопонял. У закладок в пдф файле не могу найти какой-либо адресации, то есть притянуть не за что. Вот в этом файле правила открытия пдф, но они работают только через браузер, как я понял.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' Cell (in specified column) value used as page number for specified pdf
If Intersect(Target, Range("K:K")) Is Nothing Then Exit Sub ' specify range with page links
Dim ans As Integer, ChromeLink As String, ARlink As String
ans = MsgBox("Open in Acrobat Reader (Yes) or in Chrome? (No)", vbQuestion + vbYesNoCancel)
Select Case ans
Case 6
ARlink = """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe""" & " /A " _
& """page=" & Target.Value & "" & " ""D:\tt.pdf"""
Shell (ARlink)
Case 7
ChromeLink = "file:///D:/tt.pdf#page=" & Target.Value ' (specify PDF and add cell value as page number)
Shell (Environ("LOCALAPPDATA") & "\Google\Chrome\Application\chrome.exe --new-window " & ChromeLink)
Case Else: Exit Sub
End Select
Cancel = True
End Sub
акробат запускается и тут же вылетает, что по кнопке, что по двойному щелчку. Да и код этот только для одного компьютера. У сетевых пользователей могут быть разные просмотровщики и браузеры. Гиперссылка работает, но выдает только первую страницу.
antonomeshalka пишет: Гиперссылка работает, но выдает только первую страницу.
Значит, всем пользователям надо поставить один и тот же браузер. Копайте насчет Internet Explorer Automation из Экселя, там можно без всякого shell запускать и передавать URL/ Не знаю, почему вылетает. У меня ничего не вылетает. Вылизывал этот код долго, всё работает. А, понял. Намекаю, вот это не зря записано именно так:
заработало! спасибо, уважаемые ber$erk и Максим. Проблема была в пути запуска акробата, у меня он выглядит так "C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe". Но на этой почве возник другой вопрос: у сетевых пользователей могут быть разные читалки пдф и пути установки к ним. Возможно ли, чтобы файл открывался ассоциированной с ним программой?
Пожалуйста! ) видимо придется лезть в реестр и искать ассоциированную программу с pdf-файлами. проблема в том, что мы пока не знаем, позволяет ли открыть напр. Foxit reader файл на определенной странице. в любом случае лучше взять за основу код Максима Зеленского и править его. Самое простое, ИМХО, смотреть, что установлено на компе пользователя. И если нет ни акробата, ни хрома, то ругаться и не открывать ничего )
Вот так, наверное, будет работать практически у всех после допиливания под Worksheet_BeforeDoubleClick (обычно Internet Explorer не сносят, а просто не пользуют):
Код
Sub GOTO_PAGE()
Dim FilePath$, Page$, PNum%, IE$
IE = Environ("PROGRAMFILES") & "\Internet Explorer\iexplore.exe "
PNum = 3
FilePath = "D:\tt.pdf" ' путь к файлу
Page = "#page=" & PNum ' ссылка на страницу (или на переделать на закладку по нотации Acrobat)
On Error Resume Next
If Shell(IE & FilePath & Page, vbNormalFocus) = 0 Then _
Shell ("cmd /C " & FilePath) ' открываем в программе по умолчанию с 1 страницы
On Error GoTo 0
End Sub
Единственное, что надо добавить - закрытие окна интерпретатора. У меня никак не удается передать строку типа "cmd /c d:\tt.pdf"&&"exit" через Shell, ругается.
во, так тогда, если нет Акробата, можно так получить и браузер по умолчанию и передать в него нужную ссылку с номером страницы. Осталось только найти ключ подходящий :)
Ещё не успел проверить - машна распознаёт 700 страничный PDF документ. Но после - обязательно попробую.
Код
Sub OpenPDFpage() Dim myLink As String
Dim TargetPage As Double
Dim objIE As New InternetExplorer
myLink = "path/filename.pdf"
TargetPage = 7 'Page number to be shown
With objIE
.Navigate myLink & "#page=" & TargetPage
.Visible = True
End With
End Sub
anvg, как найти путь к екзешнику в реестре, если хочу открыть документ в Фоксит например? И как правильно прописать чтобы ассоциированным приложением открывало на нужной странице?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("L:L")) Is Nothing Then Exit Sub
Dim pShell As Object
Set pShell = CreateObject("WScript.Shell")
pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=" & Target.Value & " " & """C:\123.pdf"""
Cancel = True
End Sub
Доброго времени суток. Подскажите пожалуйста, как преобразовать код выше для того, чтобы создать ссылки на разные страницы разных pdf-докуементов с кликом в разных местах на одном листе excel.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("L:L")) Is Nothing Then Exit Sub Dim pShell As Object Set pShell = CreateObject("WScript.Shell") pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=" & Target.Value & " " & """C:\123.pdf""" Cancel = True
End Sub
UPD: два дня копался, не мог разобраться, а как только написал сюда сообщение, то допёрло, magic! Не ругайтесь, я только на прошлой неделе узнал о макросах.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim pShell As Object Set pShell = CreateObject("WScript.Shell") If Not Intersect(Target, Range("K:K")) Is Nothing Then
pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=12" & Target.Value & " " & """E:\документ 1.pdf""" Cancel = True ElseIf Not Intersect(Target, Range("J:J")) Is Nothing Then pShell.Run pShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\") & " /A page=24" & Target.Value & " " & """E:\ документ 2.pdf""" Cancel = True Else: Exit Sub End If End Sub