В excel макрос на открытие другого файла

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

Здравствуйте.

Подскажите, как макросом открыть сторонний файл, в данном случае exe, где сама книга и файл находятся в одной директории?

Изменено: Серега_19.10.2015 20:41:50

 

knight

Пользователь

Сообщений: 24
Регистрация: 13.07.2014

Можно сделать это проще с помощью гиперссылки

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

#3

19.10.2015 22:34:59

Код
Set objSh = CreateObject("Shell.Application")
objSh.Open ("C:Windowsnotepad.exe")
objSh.Open (ThisWorkbook.Path & "ВашаПрограмма.exe")
 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#4

19.10.2015 22:46:53

Цитата
knight написал:
Можно сделать это проще с помощью гиперссылки

Гиперссылку то я создал, но файл не открывается, выходит сообщение, что не найден системный файл, хотя системный файл находится в той же директории.

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#5

19.10.2015 22:47:17

Цитата
B.Key написал:
Код?123Set objSh = CreateObject(«Shell.Application»)objSh.Open («C:Windowsnotepad.exe»)objSh.Open (ThisWorkbook.Path & «ВашаПрограмма.exe»)

Открывается блокнот…

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

Так блокнот для примера написан :), закоментируйте.
Впишите вместо ВашаПрограмма имя Вашей программы.

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

Может у Вас там ярлык? и программа запускается с доп параметрами?

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#8

19.10.2015 22:58:55

Цитата
B.Key написал:
Так блокнот для примера написан , закоментируйте.
Впишите вместо ВашаПрограмма имя Вашей программы

Может что не так

Код
Set objSh = CreateObject("Shell.Application")
objSh.Open (ThisWorkbook.Path & "densitydensity.exe")

что то вообще молчит.

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

#9

19.10.2015 23:08:05

Цитата
написал:
где сама книга и файл находятся в одной директории?

значит должно быть так

Код
Set objSh = CreateObject("Shell.Application")
objSh.Open (ThisWorkbook.Path & "density.exe")

Изменено: B.Key19.10.2015 23:09:02

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#10

19.10.2015 23:15:03

Цитата
B.Key написал:
где сама книга и файл находятся в одной директории?

Файл excl и папка (density) с файлом density.exe находятся в одной директории и эта директория находится на носителе. Я даже его гиперссылкой открыть не могу, выходит сообщение, что системный файл не обнаружен, который находится тоже в директории с файлом ехе.

Изменено: Серега_19.10.2015 23:26:19

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#11

19.10.2015 23:25:02

При таком варианте

Код
Set objSh = CreateObject("Shell.Application")
objSh.Open (ThisWorkbook.Path & "densitydensity.exe")

Выходит сообщение что системный файл не обнаружен.
А при таком

Код
Set objSh = CreateObject("Shell.Application")
objSh.Open (ThisWorkbook.Path & "density.exe")

вообще молчит…

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

А Вас не наводит на мысль сообщение ОС, что файл не обнаружен? Зачем искать причину в коде, когда причина в другом месте? Как можно открыть файл, если система его просто не видит по Вашему пути?
Я бы посоветовал Вам простым кодом получить путь до Вашего файла и уже этот путь попробовать в гиперссылку и в код подставить. Вполне возможно, что-то в части пути упускаете.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

#13

19.10.2015 23:29:36

Код
set objSh = createobject("Wscript.Shell")
objSh.CurrentDirectory=ThisWorkbook.Path & ""
objSh.run ThisWorkbook.Path & "density.exe"),0

попробуйте так

Изменено: B.Key19.10.2015 23:30:08

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#14

19.10.2015 23:38:07

Цитата
The_Prist написал:
простым кодом

Это что создать гиперссылку?

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#15

19.10.2015 23:38:29

Цитата
B.Key написал:
попробуйте так

Не находит системный файл System.dll (он в той же директории что и density.exe)

Изменено: Серега_19.10.2015 23:39:53

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

а он двойным кликом запускается?

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#17

19.10.2015 23:46:18

Цитата
B.Key написал:
а он двойным кликом запускается?

Да конечно

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

В общем если ничего не помогает (бывает такое) надо батник программно писать и потом его запускать.

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#19

19.10.2015 23:51:08

Цитата
B.Key написал:
В общем если ничего не помогает (бывает такое) надо батник программно писать и потом его запускать.

Смотри-ка как, думал хоть тут проблем не будет… Решил, создам гиперссылку, а открытие файл запишу макросом, не тут то было.

Лады оставим это…
Спасибо

B.Key

что уделили внимание.

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#21

19.10.2015 23:59:50

Цитата
B.Key написал:
Это из этой оперы?

Да нет, это программка определение плотности топлива в зависимости от температуры с построением графика.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#22

20.10.2015 00:19:26

Цитата
Серега_ написал:
Это что создать гиперссылку?
Код
Sub ShowGetOpenDialod()    Dim avFiles
    'по умолчанию к выбору доступны текстовые файлы
    avFiles = Application.GetOpenFilename _
                ("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы", , False)
    If VarType(avFiles) = vbBoolean Then
        'была нажата кнопка отмены - выход из процедуры
        Exit Sub
    End If
    'avFiles - примет тип String
    MsgBox "Выбран файл: '" & avFiles & "'", vbInformation, "www.excel-vba.ru"
    set objSh = createobject("Wscript.Shell")
    objSh.run (avFiles,1)
End Sub

еще бытует мнение, что если в пути к файлу есть пробелы, то лучше брать в доп.кавычки:

Код
dim path as string
path = ThisWorkbook.Path & "densitydensity.exe"
Set objSh = CreateObject("Shell.Application")
objSh.run """" & path & """", 1

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#23

20.10.2015 00:50:30

Цитата
The_Prist написал:
еще бытует мнение, что если в пути к файлу есть пробелы, то лучше брать в доп.кавычки:

Если я
правильно понял то точная ссылка

Код
K:объем2015densitydensity.exe

Но открыть файл по данной ссылке тоже невозможно также ОС не находит системный файл System.dll…

 

Doober

Пользователь

Сообщений: 2204
Регистрация: 09.04.2013

Как вариант, замените объем на англицкие буквы
Переименуйте папку

Изменено: Doober20.10.2015 01:03:59

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#25

20.10.2015 01:09:00

Цитата
Doober написал:
Как вариант, замените объем на англицкие буквы

Не открывает, ту походу что-то все-таки связано с двойным кликом по файлу, где на этот момент происходит поиск или определение системного файла, что дает его впоследствии открыть.

Изменено: Серега_20.10.2015 01:09:17

 

Doober

Пользователь

Сообщений: 2204
Регистрация: 09.04.2013

#26

20.10.2015 01:18:24

Полный текст ошибки в студию.
А если эту папку на диск с перенести и проверить.Какие файлы найти не может?
Попробуйте в макросе перед запуском выполнить

Код
CHDIR   Ваш путь к папке

Указать таким образом текущую директорию

Изменено: Doober20.10.2015 01:22:43

<#0>

 

Серега_

Пользователь

Сообщений: 257
Регистрация: 16.07.2015

#27

20.10.2015 01:33:43

Код
А если эту папку на диск с перенести и проверить.Какие файлы найти не может?

Системный файл System.dll, который находится в той же директории что и файл exe.

Код
Полный текст ошибки в студию.

Ошибки как таковой нет, есть сообщение пороги

Прикрепленные файлы

  • 01.jpg (41.31 КБ)

Изменено: Серега_20.10.2015 01:36:03

 

Doober

Пользователь

Сообщений: 2204
Регистрация: 09.04.2013

#28

20.10.2015 03:14:43

Кидаете батник в папку с  density.exe.
Запускаете батник,смотрите результат.
Если положительный,то запускаете батник как

Код
path = ThisWorkbook.Path & "densityЗапуск.bat"

Будьте внимательны,кодировка файла ОЕМ866,используйте  лучше латиницу,если нет опыта

Прикрепленные файлы

  • Запуск.rar (172 Б)

Изменено: Doober20.10.2015 03:19:16

<#0>

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#29

20.10.2015 11:03:56

Цитата
Серега_ написал:
Ошибки как таковой нет, есть сообщение пороги

Так получается, что приложение-то запускается, но по всей видимости не рассчитано оно на подобный вид запуска(может программерская ошибка, может иного пути нет).

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

#30

20.10.2015 12:18:24

Ну если Doober с батником не поможет, останется еще запасной вариант с sendkeys

Открытие книги Excel из кода VBA. Проверка существования книги. Создание новой книги, обращение к открытой книге и ее закрытие. Методы Open, Add и Close.

Открытие существующей книги

Существующая книга открывается из кода VBA Excel с помощью метода Open:

Workbooks.Open Filename:=«D:test1.xls»

или

Workbooks.Open («D:test1.xls»)

В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.

Проверка существования файла

Проверить существование файла можно с помощью функции Dir. Проверка существования книги Excel:

If Dir(«D:test1.xls») = «» Then

    MsgBox «Файл не существует»

Else

    MsgBox «Файл существует»

End If

Или, если файл (книга Excel) существует, можно сразу его открыть:

If Dir(«D:test1.xls») = «» Then

    MsgBox «Файл не существует»

Else

    Workbooks.Open Filename:=«D:test1.xls»

End If

Создание новой книги

Новая рабочая книга Excel создается в VBA с помощью метода Add:

Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:

Workbooks.Add

ActiveWorkbook.SaveAs Filename:=«D:test2.xls»

В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».

Обращение к открытой книге

Обращение к активной книге:

Обращение к книге с выполняемым кодом:

Обращение к книге по имени:

Workbooks(«test1.xls»)

Workbooks(«test2.xls»)

Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.

Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:

Workbooks(«test1.xlsx»).Close

Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:

Workbooks(«test1.xlsx»).Close  SaveChanges:=False

или

Workbooks(«test1.xlsx»).Close  (False)

Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:

Workbooks(«test1.xlsx»).Close  SaveChanges:=True

или

Workbooks(«test1.xlsx»).Close (True)


Фразы для контекстного поиска: открыть книгу, открытие книги, создать книгу, создание книги, закрыть книгу, закрытие книги, открыть файл Excel, открытие файла Excel, существование книги, обратиться к открытой книге.


Предположим, что нужно записать макрос, открывающий часто используемые книги при запуске Excel. Для этого можно создать макрос Auto_Open. Можно также запускать макрос автоматически при открытии книги.

Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Если ее нет, выполните указанные ниже действия.

  1. Откройте вкладку Файл и выберите пункт Параметры, а затем — категорию Настроить ленту.

  2. В разделе Настройка ленты в поле Основные вкладки установите флажок Разработчик.

  3. Нажмите кнопку ОК.

Чтобы при запуске Excel автоматически открывались книги, выполните указанные ниже действия.

  1. Откройте вкладку Разработчик и нажмите кнопку Запись макроса.

    Группа "Код" на вкладке "Разработчик"

  2. В поле Имя макроса введите Auto_Open.

  3. В списке Сохранить в выберите пункт Личная книга макросов.

  4. После этого макрос будет доступен при каждом открытии Excel.

  5. Чтобы было проще вспомнить, что делает макрос, введите его описание в поле Описание. Можно также оставить это поле пустым.

  6. Нажмите кнопку ОК.

  7. Откройте вкладку Файл, выберите пункт Открыть и выберите файлы, с которыми работаете каждый день. Они могут находиться в разных местах. Чтобы выбрать несколько файлов в одной папке, щелкните каждый из них, удерживая нажатой клавишу SHIFT.

  8. Откройте вкладку Разработчик и нажмите кнопку Остановить запись.

  9. При закрытии Excel в конечном итоге будет предложено сохранить изменения в личной книге макросов. Нажмите кнопку «Да», чтобы макрос запускался при каждом запуске Excel.

    Каждый раз при запуске Excel автоматически будут открываться книги, включенные в макрос.

Нужна дополнительная помощь?

Skip to content

На чтение 2 мин. Просмотров 5.2k.

Что делает макрос: Этот макрос открывает диалоговое окно, в котором отображаются только excel-файлы, тем самым позволяет открыть конкретную книгу

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как работает этот код
  4. Как использовать

Как макрос работает

Данный макрос открывает диалоговое окно, как показано на рис, что позволяет пользователю просматривать и открывать файл Excel.

Как открыть конкретную книгу в Excel

Код макроса

Sub Macro7()
'Шаг 1: Определяем переменную.
Dim FName As Variant
'Шаг 2: Метод GetOpenFilename активизирует диалоговое окно.
FName = Application.GetOpenFilename( _
'a – определяем тип файла
FileFilter:="Excel Workbooks,*.xl*", _
'b – заголовок окна
Title:="Выбери файл, который надо открыть", _
'c – множественный выбор
MultiSelect:=False)
'Шаг 3: Если был выбран файл, открыть его!
If FName <> False Then
Workbooks.Open Filename:=FName
End If
End Sub

Как работает этот код

  1. Первое, что делаем — объявляем переменную типа Variant, будет содержать Имя файла, который пользователь выберет. FName — имя нашей переменной.
  2. На шаге 2 мы используем метод GetOpenFilename, чтобы вызвать диалоговое окно, которое позволяет просмотреть содержимое папки и выбрать нужный нам файл. Метод
    GetOpenFilename поддерживает несколько настраиваемых параметров:
    a. FileFilter параметр позволяет указать Тип файла, который мы ищем.
    b. Title позволяет изменить заголовок, который отображается в верхней части диалогового окна.
    c. MultiSelect — параметр множественный выбор позволяет ограничить выбор в один файл.
  3. Если пользователь выбирает файл из диалогового окна, переменная FName берёт Имя файла, который выбрали. Если переменная не пустая, мы используем метод Open из книг
    объекта, чтобы открыть файл.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.
  5. По желанию, можно назначить макрос к кнопке, чтобы открыть файл.

Задача по объединению данных из нескольких Excel-файлов, или подгрузка доп.данных из внешнего файла решается достаточно просто: создается объект Excel, который можно скрыть визуально, затем открывается необходимый файл и выполняются нужные действия. Просто приведу несколько примеров.

Открытие файла Excel

Set objExcel = New Excel.Application
objExcel.Visible = False
Set wb = objExcel.Workbooks.Open(fname)
Set ws = wb.Sheets(1)

В первой строке запускаем новый Excel, затем делаем его невидимым, в 3-й строке открываем файл fname. В последней строке получаем первый лист открытого excel-кого файла.

Альтернативный вариант открытия файла

Set objExcel = New Excel.Application
Set wb = objExcel.Workbooks
wb.Open fname, local:=True
Set ws = wb.Item(1).ActiveSheet

При открытии файла можно использовать доп.параметры (приведу некоторые):

UpdateLinks — обновлять или нет внешние ссылки при открытии файла;
ReadOnly — открытие в режиме только для чтения;
Format — используемый при открытии разделитель (1 — символ tab, 2 — запятые, 3 — пробелы, 4 — точка с запятой, 5 — без разделителя, 6 — пользовательский разделитель, заданный в Delimiter);
Delimiter — пользовательский разделитель (в случае, если Format = 6);
Origin — тип операционной системы (xlMacintosh, xlWindows или xlMSDOS);
Local — использование в Excel языка такого же, как в открываемом файле.

Теперь можно выполнять какие-то действия с открытым файлом, просто обращаясь через wb и ws.

ws.Cells(1, 1).Value = "Test"
ws.Cells(1, 1).Font.Size = 18 ' Поменять размер шрифта
ws.Cells(1, 1).HorizontalAlignment = xlCenter ' 

Записать книгу и закрыть

wb.Save ' Записать с тем же именем
wb.SaveAs Filename:="имя_нового_файла", FileFormat:=xlOpenXMLWorkbookMacroEnabled ' Записать в новый файл
wb.Close ' Закрыть книгу

Для записи текущей книги (где находится макрос), можно использовать:

ActiveWorkbook.SaveAs 

Чтобы сохранить или перезаписать книгу Excel без вопросов, можно применить такой вариант:

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="c:Temp001.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True

У метода SaveAs есть несколько параметров сохранения, с ними можно ознакомиться на сайте Microsoft.

Если нужно, можно закрыть книгу Excel без сохранения изменений таким образом:

wb.Close False

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • В excel макрос запись в текущую ячейку
  • В excel нажав на ячейку выбрать значение
  • В excel листе нет столбца
  • В excel на условную единицу
  • В excel курсор в виде крестика

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии