Открытие книги Excel из кода VBA. Создание новой книги, присвоение ей имени. Обращение к открытой книге и закрытие. Методы Open, Add и Close объекта Workbooks.
Открытие существующей книги
Существующая книга открывается из кода VBA Excel с помощью метода Open:
1 |
Workbooks.Open Filename:="D:\test1.xls" |
или
1 |
Workbooks.Open ("D:\test1.xls") |
В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
Проверить существование файла можно с помощью функции Dir:
1 2 3 4 5 |
If Dir("D:\test1.xls") = "" Then MsgBox "Файл не существует" Else MsgBox "Файл существует" End If |
Или, если файл существует, можно сразу его открыть:
1 2 3 4 5 |
If Dir("D:\test1.xls") = "" Then MsgBox "Файл не существует" Else Workbooks.Open Filename:="D:\test1.xls" End If |
Создание новой книги
Новая рабочая книга Excel создается в VBA с помощью метода Add:
1 |
Workbooks.Add |
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
1 2 |
Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:\test2.xls" |
В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере – это «test2.xls».
Обращение к открытой книге
Обращение к активной книге:
1 |
ActiveWorkbook |
Обращение к книге с выполняемым кодом:
1 |
ThisWorkbook |
Обращение к книге по имени:
1 2 |
Workbooks("test1.xls") Workbooks("test2.xls") |
Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.
Как закрыть книгу Excel из кода VBA
Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:
1 |
Workbooks("test1.xlsx").Close |
Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close – SaveChanges:
1 |
Workbooks("test1.xlsx").Close SaveChanges:=False |
или
1 |
Workbooks("test1.xlsx").Close (False) |
Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:
1 |
Workbooks("test1.xlsx").Close SaveChanges:=True |
или
1 |
Workbooks("test1.xlsx").Close (True) |
А что делать если открываемая книга
спрашивает, стоит ли ей обновляться
и выполнение кода приостанавливается,
пока пользователь не нажмёт кнопку?
Как скрывать это сообщение?
пытался писать
или
– не помогает
Если речь идет об обновлении связей между книгами, то попробуйте так:
Здравствуйте.
А как поступить, если имя книги заранее неизвестно. Есть-ли в VBA что-нибудь вроде диалогового окна “Открыть книгу”.
Или, допустим, поиск всех книг в определённой папке.
Здравствуйте, Вячеслав!
Для выбора книги в определённой папке используйте Стандартный диалог выбора файлов Application.GetOpenFilename.