Страницы: 1
RSS
VBA запуск файла *.pdf под MS Excell
 
Доброе время суток! Идея такая. Есть файл MS Excell. В нем кнопка, по нажатии которой открывается *.pdf файл. Код VBA такой:
Код
Sub PDFOpen()  
    Programm = "c:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe"          

    Files = "d:\1.pdf"            

    Shell Programm & " " & Files, vbNormalFocus 
End Sub
 
Проблема в следующем... Файл MS Excel запускается локально с разных компьютеров и путь к Adobe Reader у каждого компьютера разный.

Проблема 1: Можно ли переписать код, без указания пути к открытию программы Adobe Reader/Fixed Reader или прочей программы, которая может открыть *.pdf файл?
Проблема 2: Можно ли прописать путь к файлу не "d:\1.pdf", а чтобы файл тянул с той же папки где и находиться файл *.pdf?

Заранее спасибо!
 
Неужели сложно поиском воспользоваться... раз десятый на этот вопрос отвечаю
Код
Filename$ = "d:\1.pdf"
CreateObject("wscript.shell").Run """" & Filename$ & """" 
указывать путь к программе не требуется, - Windows сама разберется, чем открыть файл

Второй вопрос не понял, - надо искать файл ПДФ с любым именем в той папке, где сохранён файл Excel с макросом?
 
Цитата
Игорь пишет: указывать путь к программе не требуется, - Windows сама разберется, чем открыть файл
спасибо большое! Видимо не мог понять как  :(  

второй вопрос такой. допустим файл ПДФ находиться с одной папке с файлом ексель. Можно ли не указывать конкретно пусть к ПДФ файлу, а тупо 1.pdf и чтобы его искало в той же папке откуда открыт Ексель файл?
 
Код
Filename$ = ThisWorkbook.path & "\1.pdf" 
а если имя файла даже неизвестно, но подразумевается, что в папке будет только один нужный ПДФ файл, - то так:
Код
Filename$ = ThisWorkbook.path & "\" & dir(ThisWorkbook.path & "\*.pdf") 
 
Все работает, огромное Вам спасибо!
 
Добрый день! Спасибо Игорю за новый для меня способ.
Только я не нашел в описании wscript.shell параметра, отвечающего за открытие определенной страницы пдфки.
Если кто подскажет, буду очень признателен
 
такого параметра у wscript.shell нет
он просто запускает файл (аналог двойного щелчка на файле)

думаю, нет простых способов прокрутить до страницы
сложных способов тоже не знаю
 
Здравствуйте.

Сейчас открывает файл только при полном совпадении имени и расширении.

Как открыть файл, если известно только часть имени и расширение не .pdf, а например .png?


q = Cells(ActiveCell.Row, 1).Value
route = "C:\Users\account\Desktop\печать\"
myShell.Run route & q & ".pdf"


p.s. посидел 2 часа в поиске ответа на форуме. Не нашёл.
Изменено: Лилиенталь - 19.04.2022 19:31:25
 
Лилиенталь, здравствуйте
Прочитайте Приём Проверка текста по маске, обратите особенное внимание на спецсимвол подстановки * и примеры его использования — скорее всего, именно он вам и нужен (он и ранее в этой теме появлялся)
Изменено: Jack Famous - 20.04.2022 09:26:42
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
myShell.Run Route & Dir(Route & q & "*.pdf")
 
Спасибо. Помогло.

Про маски буду читать.
 
myShell.Run Route & Dir(Route & "*" & q & "*")

Как оказалось помогло, но не до конца.

Пробел не воспринимает. Файл находит, но не открывает.

ПОМОГИТЕ.
 
Цитата
Лилиенталь: Пробел не воспринимает
Цитата
Игорь в ответе #2: Run """" & Filename$ & """"
попробуйте
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
попробуйте

Такой вариант даже не видет файл.

Вот мой полный код:

Sub открыть_чертёж()
Dim q As String
Dim Route As String
Dim myShell As Object

On Error Resume Next
Set myShell = CreateObject("WScript.Shell")
Cells(ActiveCell.Row, 1).Select

q = Cells(ActiveCell.Row, 1).Value

Route = "C:\Users\account\Desktop\КД\"

myShell.Run Route & Dir(Route & """" & q & """")

'myShell.Run Route & Dir(Route & "*" & q & "*")

End Sub

Вариант с "*" открывает любой файл, где в имени файла есть значение ячейки. Но как только в имени появляется пробел, он его видит но не открывает.

Может задачу можно решить другим способом, поэтому поясню принцип задачи.

Есть папка с чертежами. В экселе перечислены все файлы. Задача: в экселе, двойным нажатием на ячейку в котором находиться "КПДМ.741124.447" открывается файл находящийся в папке с именем "Пластина КПДМ.741124.447_под опору.jpg".
Изменено: Лилиенталь - 22.04.2022 09:41:21
 
Код
Sub открыть_чертёж()
    Dim q As String
    Dim Route As String
    Dim myShell As Object
    
    On Error Resume Next
    Set myShell = CreateObject("WScript.Shell")
    Cells(ActiveCell.Row, 1).Select
    
    q = Cells(ActiveCell.Row, 1).Value
    Route =  "C:\Users\account\Desktop\КД\"
    
    Dim oFile As Object
    For Each oFile In CreateObject("Scripting.FileSystemObject").GetFolder(Route).Files
        If oFile.Name Like "*" & q & "*.pdf" Then
            myShell.Run """" & oFile & """"
            Exit For
        End If
    Next
End Sub
 
Цитата
написал:
решить другим способом, поэтому поясню принцип задачи.Есть папка с чертежами. В экселе перечислены все файлы. Задача: в экселе, двойным нажатием на ячейку в котором находиться "КПДМ.741124.447" открывается файл находящийся в папке с именем "Пластина КПДМ.741124.447_под опору.jpg".
Код
'Это в модуль листа
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    открыть_чертёж2 Target
End Sub

Sub открыть_чертёж2(rActiveCell As Range)
    Dim q As String
    Dim Route As String
    Dim myShell As Object
    
    On Error Resume Next
    Set myShell = CreateObject("WScript.Shell")
    
    q = rActiveCell.Value
    Route =  "C:\Users\account\Desktop\КД\"
    
    Dim oFile As Object
    For Each oFile In CreateObject("Scripting.FileSystemObject").GetFolder(Route).Files
        If oFile.Name Like "*" & q & "*" Then
            myShell.Run """" & oFile & """"
            Exit For
        End If
    Next
End Sub

Изменено: МатросНаЗебре - 22.04.2022 10:28:06
 
УРА!!!! СПАСИБО!!!
 
Не работает код почему-то.
Просто не происходит ничего...
пишет "Argument not optional"

от модератора: можно ж было в одном все написать???
Изменено: БМВ - 17.08.2022 10:50:25
 
Справедливо.
Учту.

По событию двойного клика не происходит ничего.

Попытался от события отключить, просто на кнопку сам макрос накинуть, начал писать выше описанную фразу...
Изменено: LAV75 - 17.08.2022 11:04:49
 
Попробуйте это
Код
Sub открыть_чертёж2(rActiveCell As Range)
    Dim q As String
    Dim Route As String
    Dim myShell As Object

переписать вот так

Код
Sub открыть_чертёж2()
    Dim q As String
    Dim Route As String
    Dim myShell As Object
set rActiveCell=selection(1)

Не проверял
Скажи мне, кудесник, любимец ба’гов...
Страницы: 1
Наверх