|
Серега_ Пользователь Сообщений: 257 |
Здравствуйте. Подскажите, как макросом открыть сторонний файл, в данном случае exe, где сама книга и файл находятся в одной директории? Изменено: Серега_ — 19.10.2015 20:41:50 |
|
knight Пользователь Сообщений: 24 |
Можно сделать это проще с помощью гиперссылки |
|
B.Key Пользователь Сообщений: 633 |
#3 19.10.2015 22:34:59
|
||
|
Серега_ Пользователь Сообщений: 257 |
#4 19.10.2015 22:46:53
Гиперссылку то я создал, но файл не открывается, выходит сообщение, что не найден системный файл, хотя системный файл находится в той же директории. |
||
|
Серега_ Пользователь Сообщений: 257 |
#5 19.10.2015 22:47:17
Открывается блокнот… |
||
|
B.Key Пользователь Сообщений: 633 |
Так блокнот для примера написан |
|
B.Key Пользователь Сообщений: 633 |
Может у Вас там ярлык? и программа запускается с доп параметрами? |
|
Серега_ Пользователь Сообщений: 257 |
#8 19.10.2015 22:58:55
Может что не так
что то вообще молчит. |
||||
|
B.Key Пользователь Сообщений: 633 |
#9 19.10.2015 23:08:05
значит должно быть так
Изменено: B.Key — 19.10.2015 23:09:02 |
||||
|
Серега_ Пользователь Сообщений: 257 |
#10 19.10.2015 23:15:03
Файл excl и папка (density) с файлом density.exe находятся в одной директории и эта директория находится на носителе. Я даже его гиперссылкой открыть не могу, выходит сообщение, что системный файл не обнаружен, который находится тоже в директории с файлом ехе. Изменено: Серега_ — 19.10.2015 23:26:19 |
||
|
Серега_ Пользователь Сообщений: 257 |
#11 19.10.2015 23:25:02 При таком варианте
Выходит сообщение что системный файл не обнаружен.
вообще молчит… |
||||
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
А Вас не наводит на мысль сообщение ОС, что файл не обнаружен? Зачем искать причину в коде, когда причина в другом месте? Как можно открыть файл, если система его просто не видит по Вашему пути? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
|
B.Key Пользователь Сообщений: 633 |
#13 19.10.2015 23:29:36
попробуйте так Изменено: B.Key — 19.10.2015 23:30:08 |
||
|
Серега_ Пользователь Сообщений: 257 |
#14 19.10.2015 23:38:07
Это что создать гиперссылку? |
||
|
Серега_ Пользователь Сообщений: 257 |
#15 19.10.2015 23:38:29
Не находит системный файл System.dll (он в той же директории что и density.exe) Изменено: Серега_ — 19.10.2015 23:39:53 |
||
|
B.Key Пользователь Сообщений: 633 |
а он двойным кликом запускается? |
|
Серега_ Пользователь Сообщений: 257 |
#17 19.10.2015 23:46:18
Да конечно |
||
|
B.Key Пользователь Сообщений: 633 |
В общем если ничего не помогает (бывает такое) надо батник программно писать и потом его запускать. |
|
Серега_ Пользователь Сообщений: 257 |
#19 19.10.2015 23:51:08
Смотри-ка как, думал хоть тут проблем не будет… Решил, создам гиперссылку, а открытие файл запишу макросом, не тут то было. Лады оставим это… B.Key что уделили внимание. |
||
|
B.Key Пользователь Сообщений: 633 |
|
|
Серега_ Пользователь Сообщений: 257 |
#21 19.10.2015 23:59:50
Да нет, это программка определение плотности топлива в зависимости от температуры с построением графика. |
||
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#22 20.10.2015 00:19:26
еще бытует мнение, что если в пути к файлу есть пробелы, то лучше брать в доп.кавычки:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
|
Серега_ Пользователь Сообщений: 257 |
#23 20.10.2015 00:50:30
Если я
Но открыть файл по данной ссылке тоже невозможно также ОС не находит системный файл System.dll… |
||||
|
Doober Пользователь Сообщений: 2204 |
Как вариант, замените объем на англицкие буквы Изменено: Doober — 20.10.2015 01:03:59 |
|
Серега_ Пользователь Сообщений: 257 |
#25 20.10.2015 01:09:00
Не открывает, ту походу что-то все-таки связано с двойным кликом по файлу, где на этот момент происходит поиск или определение системного файла, что дает его впоследствии открыть. Изменено: Серега_ — 20.10.2015 01:09:17 |
||
|
Doober Пользователь Сообщений: 2204 |
#26 20.10.2015 01:18:24 Полный текст ошибки в студию.
Указать таким образом текущую директорию Изменено: Doober — 20.10.2015 01:22:43 <#0> |
||
|
Серега_ Пользователь Сообщений: 257 |
#27 20.10.2015 01:33:43
Системный файл System.dll, который находится в той же директории что и файл exe.
Ошибки как таковой нет, есть сообщение пороги Прикрепленные файлы
Изменено: Серега_ — 20.10.2015 01:36:03 |
||||
|
Doober Пользователь Сообщений: 2204 |
#28 20.10.2015 03:14:43 Кидаете батник в папку с density.exe.
Будьте внимательны,кодировка файла ОЕМ866,используйте лучше латиницу,если нет опыта Прикрепленные файлы
Изменено: Doober — 20.10.2015 03:19:16 <#0> |
||
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#29 20.10.2015 11:03:56
Так получается, что приложение-то запускается, но по всей видимости не рассчитано оно на подобный вид запуска(может программерская ошибка, может иного пути нет). Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
|
B.Key Пользователь Сообщений: 633 |
#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. Можно также запускать макрос автоматически при открытии книги.
Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Если ее нет, выполните указанные ниже действия.
-
Откройте вкладку Файл и выберите пункт Параметры, а затем — категорию Настроить ленту.
-
В разделе Настройка ленты в поле Основные вкладки установите флажок Разработчик.
-
Нажмите кнопку ОК.
Чтобы при запуске Excel автоматически открывались книги, выполните указанные ниже действия.
-
Откройте вкладку Разработчик и нажмите кнопку Запись макроса.
-
В поле Имя макроса введите Auto_Open.
-
В списке Сохранить в выберите пункт Личная книга макросов.
-
После этого макрос будет доступен при каждом открытии Excel.
-
Чтобы было проще вспомнить, что делает макрос, введите его описание в поле Описание. Можно также оставить это поле пустым.
-
Нажмите кнопку ОК.
-
Откройте вкладку Файл, выберите пункт Открыть и выберите файлы, с которыми работаете каждый день. Они могут находиться в разных местах. Чтобы выбрать несколько файлов в одной папке, щелкните каждый из них, удерживая нажатой клавишу SHIFT.
-
Откройте вкладку Разработчик и нажмите кнопку Остановить запись.
-
При закрытии Excel в конечном итоге будет предложено сохранить изменения в личной книге макросов. Нажмите кнопку «Да», чтобы макрос запускался при каждом запуске Excel.
Каждый раз при запуске Excel автоматически будут открываться книги, включенные в макрос.
Нужна дополнительная помощь?
Skip to content
На чтение 2 мин. Просмотров 5.2k.
Что делает макрос: Этот макрос открывает диалоговое окно, в котором отображаются только 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
Как работает этот код
- Первое, что делаем — объявляем переменную типа Variant, будет содержать Имя файла, который пользователь выберет. FName — имя нашей переменной.
- На шаге 2 мы используем метод GetOpenFilename, чтобы вызвать диалоговое окно, которое позволяет просмотреть содержимое папки и выбрать нужный нам файл. Метод
GetOpenFilename поддерживает несколько настраиваемых параметров:
a. FileFilter параметр позволяет указать Тип файла, который мы ищем.
b. Title позволяет изменить заголовок, который отображается в верхней части диалогового окна.
c. MultiSelect — параметр множественный выбор позволяет ограничить выбор в один файл. - Если пользователь выбирает файл из диалогового окна, переменная FName берёт Имя файла, который выбрали. Если переменная не пустая, мы используем метод Open из книг
объекта, чтобы открыть файл.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
- По желанию, можно назначить макрос к кнопке, чтобы открыть файл.
Задача по объединению данных из нескольких 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


