Открытие книги 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, существование книги, обратиться к открытой книге.
SpagoR Пользователь Сообщений: 39 |
Ребят, как можно макросом закрыть все книги кроме активной? Просто при работе предыдущего макроса открывает 50 книг, обрабатывает информацию из них и потом они остаются открытыми. Мне же нужно их закрыть и продолжить работу над активным файлом |
sva Пользователь Сообщений: 1027 |
Sub cl() |
> при работе предыдущего макроса открывает 50 книг, обрабатывает информацию из них и потом они остаются открытыми А почему макрос не закрывает книгу после того как обработал ее? |
|
SpagoR Пользователь Сообщений: 39 |
{quote}{login=Казанский}{date=07.12.2011 07:04}{thema=}{post}> при работе предыдущего макроса открывает 50 книг, обрабатывает информацию из них и потом они остаются открытыми А почему макрос не закрывает книгу после того как обработал ее? Ну вот собственно я и хочу чтобы он закрывал их) просто это макрос массового открытия из папки. Sub Get_All_Files() Dim x As Variant Range(«A1»).Select sFiles = Dir End Sub ____________________________________ Ну и собственно в догонку вопрос — как убрать диалоговое окно выбора папки и сделать чтобы оно автоматически открывало файлы из конкретной папки? |
sva Пользователь Сообщений: 1027 |
Как-то так: Range(«A1»).Select sFiles = Dir End Sub |
SpagoR Пользователь Сообщений: 39 |
{quote}{login=sva}{date=07.12.2011 07:48}{thema=}{post}Как-то так: Range(«A1»).Select sFiles = Dir End Sub{/post}{/quote} выдает ошибку на строчке |
sva Пользователь Сообщений: 1027 |
|
SpagoR Пользователь Сообщений: 39 |
{quote}{login=sva}{date=07.12.2011 07:57}{thema=}{post}Какую?{/post}{/quote} Run-time error ‘1004’: ‘Andora.xls’ could not be found. Check the spelling of the file name and verify that file location is correct. If you are trying to open the file from your list of most recently used files on the File menu, make sure that the file has not been renamed, moved, or deleted. ____________________________________- И ещё, путь к файлу выглядит так: Тоесть файл находится не на моем жестком диске, а на корпоративном сервере. |
sva Пользователь Сообщений: 1027 |
Тогда, что за файл Andora.xls Excel пытается открыть? |
SpagoR Пользователь Сообщений: 39 |
{quote}{login=sva}{date=07.12.2011 08:11}{thema=}{post}Тогда, что за файл Andora.xls Excel пытается открыть?{/post}{/quote} Да правильный файл. В папке по вышеуказанному адресу лежит 49 файлов с названиями стран. Этот макрос должен все их открыть. Если делать по тому варианту который я предоставил, то всё нормально открывает (при выборе папки вручную). Если же прописать путь к файлу как вы показали, то выбивает ошибку. |
sva Пользователь Сообщений: 1027 |
Путь должен выглядеть так: |
SpagoR Пользователь Сообщений: 39 |
{quote}{login=sva}{date=07.12.2011 08:23}{thema=}{post}Путь должен выглядеть так: не помогает |
sva Пользователь Сообщений: 1027 |
Тогда, не знаю в чем может быть проблема. Может кто из знатоков подскажет. |
AKSENOV048 Пользователь Сообщений: 523 |
#14 07.12.2011 23:02:10 предположение… <#0> |
If you are working with multiple Excel files at once, you often find yourself dealing with warning messages when trying to close them. Although it is a good thing to be warned about saving to not lose changes in a workbook, it may become annoying quickly. Thanks to VBA, you can create a macro to close them all, preferably save as well. In this guide, we’re going to show you how to close all workbooks in Excel with VBA.
Preparation
You cannot close all workbooks if your code closes the workbook which includes the code, right? You need to store your code in a special file named Personal.xlsb. Personal.xlsb is a special macro file also known as Personal Macro Workbook. This file will be created automatically when you record a macro in it deliberately. Once created, this workbook will be opened in the background whenever you start Excel.
To check whether the file has been created correctly, open a blank workbook, and activate the View tab in the Ribbon. If the Unhide button is disabled, then your Personal.xlsb file has not been created.
You can easily create it by recording a macro.
- Click Record Macro in the Developer tab or Status Bar. If the Developer tab is hidden, see How to display the Excel Developer tab for using advanced features.
- Select Personal Macro Workbook from the Store macro in list
- Click the OK button to start recording a macro.
- If you do not want to record any action, you can click the Stop Macro button right away.
Once the macro recording stops, Excel creates the Personal.xlsb file. You can either use the Unhide command to make it visible or open the VBA window and access it through there.
Write your macros in Personal.xlsb and save the file in the VBA window.
Macro
All you need is to loop through each workbook and execute Close method for the active workbook. A simple For Each loop to iterate all workbook objects in a parent Workbooks object is enough.
You can determine if the workbooks are saved or not by populating the Close method’s SaveChanges argument. The default value of this argument is False which indicates no saving. Set it as True to save changes in your workbooks.
Do not forget to save Personal.xlsb file by the Save button or command in the VBA window.
Close all workbooks without saving changes
Sub CloseAllWorkbooks() 'Define a workbook variable Dim wb As workbook 'Loop through all workbooks and close them For Each wb In Workbooks wb.Close Next wb End Sub
Close all workbooks without saving changes
Sub CloseAllWorkbooksAndSave() 'Define a workbook variable Dim wb As workbook 'Loop through all workbooks, save and close them For Each wb In Workbooks wb.Close SaveChanges:=True Next wb End Sub
Skip to content
Как закрыть сразу все книги
На чтение 2 мин. Просмотров 1.5k.
Что делает макрос: Данный макрос позволяет закрыть все открытые рабочие книги одновременно.
Содержание
- Как макрос работает
- Код макроса
- Как работает этот код
- Как использовать
Как макрос работает
В этом макросе, коллекция Workbooks перебирает все открытые рабочие книги. По мере того, как макрос проходит через каждую книгу, он сохраняет и закрывает их.
Код макроса
Sub ZakritVseKnigi() 'Шаг 1: Объявляем переменные Dim wb As Workbook 'Шаг 2: Перебираем все открытые книги For Each wb In Workbooks 'Шаг 3: Закрываем wb.Close 'Шаг 4: Сохраняем изменения SaveChanges:=True Next wb End Sub
Как работает этот код
- Объявляем переменную, которая представляет собой объект книга. Это позволит перебирать все открытые книги.
- С помощью цикла просто проходит через все открытые книги.
- Закрываем книгу (Excel затем выдаст сообщение с предложением сохранить изменения).
- Сохраняем изменения. Если Вы не хотите, чтобы их сохраняли, нужно изменить аргумент Savechanges значение с True на false.
Как использовать
Лучшее место, чтобы сохранить этот макрос — это ваша книга личных макросов. Таким образом, макрос всегда будет доступен для вас. Книга личных макросов загружается при запуске Excel. В окне VBE проекта, он назван personal.xlsb.
- Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
- Щелкните правой кнопкой мыши personal.xlb в окне Project.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
Если вы не видите personal.xlb в окне проекта, он еще не существует. Вы должны записать макрос, используя книгу личных макросов в качестве конечного пункта.
Чтобы записать макрос в личной книге макросов, выберите пункт: Личная книга макросов в диалоговом окне записи макроса перед началом записи. Просто записать пару кликов, а затем остановить запись. Вы можете сбросить записанный макрос и заменить его с этим.
Bastis 1 / 1 / 0 Регистрация: 22.09.2009 Сообщений: 39 |
||||
1 |
||||
Закрытие книг..30.06.2011, 15:46. Показов 15124. Ответов 30 Метки нет (Все метки)
Есть файл. Из него надо переписать необходимые данные в новый файл. Файл успешно создается, все записывается и закрывается. Но когда я затем в дальнейшем открываю этот новый записанный файл, и хочу закрыть только его, закрываются ВСЕ книги….
в чем баг?
0 |
Заблокирован |
|
30.06.2011, 15:57 |
2 |
Bastis,
0 |
Bastis 1 / 1 / 0 Регистрация: 22.09.2009 Сообщений: 39 |
||||||||
30.06.2011, 16:02 [ТС] |
3 |
|||||||
создаю
дальше записываю и закрываю
0 |
1562 / 1114 / 165 Регистрация: 23.07.2010 Сообщений: 6,454 |
|
30.06.2011, 16:12 |
4 |
В каком модуле закрывается книга?
0 |
1 / 1 / 0 Регистрация: 22.09.2009 Сообщений: 39 |
|
30.06.2011, 16:20 [ТС] |
5 |
эм… отдельный модуль. в этом модуле все процедуры выполняются.
0 |
pincet 1562 / 1114 / 165 Регистрация: 23.07.2010 Сообщений: 6,454 |
||||||||
30.06.2011, 16:24 |
6 |
|||||||
Да нет, правильно. Странно просто, у меня открыты несколько книг, что из одной
что из другой
Закрывается только нужная
0 |
Заблокирован |
|
30.06.2011, 16:26 |
7 |
Но когда я затем в дальнейшем открываю этот новый записанный файл у вас в кодах нету этого. Файл открывается с помощью команды Open.
0 |
1 / 1 / 0 Регистрация: 22.09.2009 Сообщений: 39 |
|
30.06.2011, 16:28 [ТС] |
8 |
у вас в кодах нету этого. Файл открывается с помощью команды Open. вот в этом то и загвоздка… я его открываю и закрываю вручную а не программно!
0 |
pincet 1562 / 1114 / 165 Регистрация: 23.07.2010 Сообщений: 6,454 |
||||
30.06.2011, 16:34 |
9 |
|||
Есть файл. Из него надо переписать необходимые данные в новый файл. Файл успешно создается, все записывается и закрывается. Но когда я затем в дальнейшем открываю этот новый записанный файл, и хочу закрыть только его, закрываются ВСЕ книги….
в чем баг? Странно конечно, но как книгу закрываете — Файл-Закрыть или программно (Close) Добавлено через 4 минуты
0 |
1 / 1 / 0 Регистрация: 22.09.2009 Сообщений: 39 |
|
30.06.2011, 16:35 [ТС] |
10 |
Странно конечно, но как книгу закрываете — Файл-Закрыть или программно (Close) файл-закрыть
0 |
Заблокирован |
|
30.06.2011, 16:37 |
11 |
Bastis,
0 |
1562 / 1114 / 165 Регистрация: 23.07.2010 Сообщений: 6,454 |
|
30.06.2011, 16:44 |
12 |
Обычно их там два Добавлено через 1 минуту
Bastis, Ой ли? Добавлено через 5 минут
0 |
Заблокирован |
|
30.06.2011, 16:46 |
13 |
Ой ли? у меня так.
0 |
1 / 1 / 0 Регистрация: 22.09.2009 Сообщений: 39 |
|
30.06.2011, 16:58 [ТС] |
14 |
у меня 2010 офис стоит
0 |
1562 / 1114 / 165 Регистрация: 23.07.2010 Сообщений: 6,454 |
|
30.06.2011, 17:00 |
15 |
тогда источники в студию
0 |
Заблокирован |
|
30.06.2011, 17:04 |
16 |
Bastis, Сделайте скрин-шот, куда вы нажимаете, что все книги закрываются.
0 |
Gibboustooth 735 / 203 / 11 Регистрация: 23.06.2011 Сообщений: 440 |
||||
30.06.2011, 17:12 |
17 |
|||
В состоянии, когда после нажатия на крестик закрываются все книги, создайте процедуру
поставьте туда курсор и нажмите 2 раза F8. Если есть какая-то процедура, которая закрывает все книги, она вылезет.
1 |
1 / 1 / 0 Регистрация: 22.09.2009 Сообщений: 39 |
|
30.06.2011, 17:19 [ТС] |
18 |
вот так вот нажимаю, так же как думаю и пользователи для которых предназначается Миниатюры
0 |
Заблокирован |
|
30.06.2011, 17:22 |
19 |
Bastis,
0 |
1562 / 1114 / 165 Регистрация: 23.07.2010 Сообщений: 6,454 |
|
30.06.2011, 17:24 |
20 |
сделайте скриншот, куда вошла бы панель задач Windows (если информация не коммерческая)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
30.06.2011, 17:24 |
Помогаю со студенческими работами здесь Создайте файл каталог книг. Найдите специальность, по которой имеется наибольшее число книг Получить все возможные варианты комплектов из 60 книг, если посылки комплектуются по 10, 15 и 20 книг (поиск ошибки) int main()
Бинарные файлы. Вывести названия книг определенного автора, изданных до 2000 года. Определить долю книг Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 20 |