Открытие книги 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, существование книги, обратиться к открытой книге.
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.
- Введите или вставьте код во вновь созданном модуле.
- По желанию, можно назначить макрос к кнопке, чтобы открыть файл.
deathogre Пользователь Сообщений: 14 |
Здрасьте. Как программно открыть книгу эксель и сохранить эту книгу (объект) в глобальной переменной? |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#2 13.02.2016 13:53:37 1. Открытие нужной книги запишите макрорекордером — получите готовый код.
|
||
Hugo Пользователь Сообщений: 23253 |
#3 13.02.2016 13:53:58
|
||
deathogre Пользователь Сообщений: 14 |
Мне нужно открыть книгу из другой книги |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#5 13.02.2016 13:55:02
И что? |
||
deathogre Пользователь Сообщений: 14 |
#6 13.02.2016 14:02:59 Объявил глобальную переменную в модуле ЭтаКнига
открыл книгу в модуле АктивХ формы
выдает ошибку на 3 строке, Run-time error 9 Subscript out of range |
||||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Глобальную переменную в стандартный модуль — будет доступна всюду. И модуль не нужно указывать. |
deathogre Пользователь Сообщений: 14 |
Мне нужно в открытую книгу писать изменения, через глобальную переменную хочу обращаться к этой книге |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#9 13.02.2016 14:21:54 Обращайтесь — кто мешает? )
|
||
KL Пользователь Сообщений: 2186 |
#10 13.02.2016 14:53:27 Или даже так:
KL |
||
KL Пользователь Сообщений: 2186 |
Кстати, ChDir для открытия книги таким способом не нужен. Он нужен для функции GetOpenFileName, которая, кстати, тоже уже не нужна, т.к. уже давно есть Application.FileDialog(msoFileDialogOpen) |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Кирилл, а рекордер упорно пишет ChDir )) |
KL Пользователь Сообщений: 2186 |
Юр, ну мало ли что на заборах пишут. Рекордер еще и Select обожает |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#14 13.02.2016 15:16:46 )) |
Simple way to open an Excel workbook using VBA and macros.
Syntax
Workbooks.Open ("File Path")
Replace file path with the path to the file on your computer along with the full file name.
Here is what it looks like in the VBA Editor window:
Note: you do not always have to use the file extension of the file but it is a good practice to do so. In my example, using simply «D:test» would also work.
Notes
There are MANY more options for opening a workbook but this post covers the basic usage of it, which will work for 98% of needed uses for this.
Here is a link to a full explanation on using this method if you need a more complex implementation of it: Workbook Open Method.
Make sure to download the accompanying workbooks to test this out in Excel.
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Similar Content on TeachExcel
Close Excel Workbook using VBA Macros
Tutorial: How to close an Excel workbook using VBA and macros, including how to save the file before…
Macro to get Data from Another Workbook in Excel
Tutorial:
Macro to get data from a workbook, closed or open, over a network or locally on your comp…
Get User Submitted Data from a Prompt in Excel using VBA Macros
Tutorial: How to prompt a user for their input in Excel.
There is a simple way to do this using VBA …
Interactive Clickable Buttons and Interface Without Using VBA/Macros in Excel
Tutorial:
How to make your Excel dashboards and worksheets more interactive and easier to view and …
Loop through a Range of Cells in Excel VBA/Macros
Tutorial: How to use VBA/Macros to iterate through each cell in a range, either a row, a column, or …
Kill Command in Excel (Delete Files Using VBA)
Tutorial:
How to safely remove, delete, kill any Excel file, or other file, using VBA Macros in Exc…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Video
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Здравствуйте! Помогите, пожалуйста!
Кнопка, которой присваивается макрос, находится на листе «Стартовая». На листе «Поиск» в ячейке G1 указано название другой книги. В H1 — название листа этой книги. Как создать макрос, который открывал бы книгу с названием из ячейки G1 и лист в этой книге с названием из ячейки H1?
Огромное спасибо!
как то так
Sub Макрос2()
Set A = [H1]
Workbooks.Open "C:Documents and SettingsMasterМои документы" & [G1] & ".xls"
Sheets(A.Value).Activate
End Sub
до тачивайте под себя.
Макрос подделал под себя. Так как кнопка будет находиться на другом листе, в третью строку добавил Sheets(«Поиск»)., чтобы название книги бралось именно с листа «Поиск». Но теперь при выполнении макроса не работает строка Sheets(A.Value).Activate. В чем моя проблема?
Sub Макрос2()
Set A = [H1]
Workbooks.Open «C:Documents and SettingsMasterМои документы» & Sheets(«Поиск»).[G1] & «.xlsm»
Sheets(A.Value).Activate
End Sub
Разобрался. В итоге:
Sub Макрос2()
Set A = Sheets(«Поиск»).[H1]
Workbooks.Open «C:Documents and SettingsMasterМои документы» & Sheets(«Поиск»).[G1] & «.xls»
Sheets(A.Value).Activate
End Sub
Большое спасибо за помощь!
lovko, оформляйте код тегами.
Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771
И снова проблема.
И в ячейке G1, и в ячейке H1 — формула, которая дает то или иное название книги и листа. Макрос, видимо, видит саму формулу, а не ее значение в виде названия книги и названия листа, поэтому работать не хочет. Можно ли сделать так, чтобы макрос видел не формулу, а ее содержание?
Помогите!!!
Цитировать«C:Documents and SettingsMasterМои документы»
у вас точно такой путь к файлу?
файл прикладываем.
макрос нормально отрабатывает. Ошибка может быть если листа с таким именем нет.
Sub Поиск1()
Set A = Sheets("Поиск").[H1]
Set B = Sheets("Поиск").[G1]
On Error GoTo S
Workbooks.Open "C:Инструкции" & B.Value & ".xlsm"
On Error GoTo S1
Sheets(A.Value).Activate
Exit Sub
S:
MsgBox "По пути C:Инструкции отсутствует книга " & B.Value
Exit Sub
S1:
MsgBox "В книге " & B.Value & ".xlsm лист с именем " & A.Value & " отсутствует."
End Sub
Все отлично работает. Большое спасибо!