Открытие книги Excel из кода VBA. Создайте новую книгу, присвоив ей имя. Доступ к открытой книге и закрытие. Методы Open, Add и Close объекта Workbooks.
- Открытие существующей книги
- Создать новую книгу
- Доступ к открытой книге
- Как закрыть книгу Excel из кода VBA
Открытие существующей книги
Существующая книга открывается кодом Excel VBA с помощью метода Open:
Рабочие папки.Открыть имя файла: = «D: test1.xls»
или
Рабочие папки.Открыть («D: test1.xls»)
Кавычки указывают полный путь к открываемому файлу Excel. Если такого файла не существует, возникнет ошибка.
Проверить наличие файла можно с помощью функции Dir:
Если Dir («D: test1.xls») = «» Then MsgBox «Файл не существует» Else MsgBox «Файл существует» End If
Или, если файл существует, вы можете сразу его открыть:
Если Dir («D: test1.xls») = «» Then MsgBox «Файл не существует» Else Workbooks.Open Filename: = «D: test1.xls» End If
Создание новой книги
Новая книга Excel создается в VBA с помощью метода Add:
Рабочие папки. Добавить
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
Workbooks.Add ActiveWorkbook.SaveAs Имя файла: = «D: test2.xls»
Кавычки указывают полный путь к сохраненному файлу Excel, включая присвоенное имя, в примере это «test2.xls».
Обращение к открытой книге
Ссылаясь на активную книгу:
Активная рабочая тетрадь
Ссылаясь на книгу с исполняемым кодом:
Эта книга
Ссылаясь на книгу по названию:
Рабочие папки («test1.xls») Рабочие папки («test2.xls»)
вы можете ссылаться на книгу только по имени, а чтобы открыть книгу из кода Excel VBA, вам необходимо указать полный путь к файлу.
Как закрыть книгу Excel из кода VBA
Открытая книга закрывается кодом Excel VBA с использованием метода Close:
Рабочие папки («test1.xlsx»). Закрывать
Если закрытая книга была изменена и внесенные вами изменения не были сохранены, при закрытии Excel отобразит диалоговое окно с вопросом: хотите ли вы сохранить изменения в файле test1.xlsx? Чтобы закрыть файл без сохранения изменений и отобразить диалоговое окно, вы можете использовать параметр метода Close — SaveChanges:
Рабочие папки («test1.xlsx»). Закрыть SaveChanges: = False
или
Рабочие папки («test1.xlsx»). Закрыть (Ложь)
Вы также можете закрыть книгу Excel из кода VBA и сохранить изменения с помощью параметра SaveChanges:
Рабочие папки («test1.xlsx»). Закройте SaveChanges: = True
или
Рабочие папки («test1.xlsx»). Близко (Верно)
В этой заметке продолжается ваше знакомство с VBA, приводя примеры того, как управлять книгами и листами Excel с помощью VBA.
Рис. 1. Столбцы и строки скрыты, кроме рабочего диапазона
Скачать заметку в формате Word или pdf, примеры в файле (политика безопасности провайдера не позволяет скачивать файлы Excel с поддержкой макросов)
Сохранение всех рабочих книг
Следующая процедура циклически перебирает все книги в библиотеке рабочих книг и сохраняет все ранее сохраненные файлы.
Публичные субтитры SaveAllWorkbooks()
Тусклая книга как рабочая тетрадь
Для каждой книги в рабочих тетрадях
Если Book.Path «», то Book.Save
Следующая книга
Конец подзаголовка
Обратите внимание, как используется свойство Path. Если свойство Path не задано ни для одной книги, файл еще не сохранен (это новая книга). Эта процедура игнорирует такие книги и архивирует только те, у которых свойство Path не равно нулю.
Сохранение и закрытие всех рабочих книг
Следующая процедура прокручивает коллекцию рабочих книг. Программа сохраняет и закрывает все книги.
Sub Закрыть все книги()
Тусклая книга как рабочая тетрадь
Для каждой книги в рабочих тетрадях
Если Book.Name ThisWorkbook.Name Then
Book.Close сохранить изменения: = True
Конец, если
Следующая книга
ThisWorkbook.Close savechanges: = True
Конец подзаголовка
Обратите внимание, что процедура использует оператор If, чтобы определить, содержит ли данная книга выполняющийся в данный момент код. Это необходимо, потому что, когда вы закрываете книгу, содержащую процедуру, программа автоматически прекращает свое выполнение, а остальные книги не будут сохранены и закрыты.
Частичное сокрытие элементов рабочего листа
Пример в этом разделе скрывает все строки и столбцы на листе, кроме тех, которые находятся в текущем выбранном диапазоне (рисунок 1).
Sub HideRowsAndColumns()
Уменьшить размер row1 as long, row2 as long
Уменьшить цвет col1 до длины, col2 до длины
Если TypeName (Selection) «Range», то выйдите из Sub
‘Если последняя строка или последний столбец скрыты,
‘просмотреть все и выйти
Если строки (Rows.Count) .EntireRow.Hidden или _
Столбцы (Columns.Count) .EntireColumn.Hidden, затем
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Выйти ниже
Конец, если
row1 = Selection.Rows (1) .Row
row2 = row1 + Select.Rows.Count — 1
col1 = Selection.Columns (1) .Column
col2 = col1 + Selection.Columns.Count — 1
Application.ScreenUpdating = False
В случае ошибки Продолжить Далее
‘Скрыть строки
Диапазон (Ячейки (1, 1), Ячейки (строка1 — 1, 1)). Вся строка. Скрытый = Истина
Диапазон (Ячейки (строка2 + 1, 1), Ячейки (Количество строк, _
1)). Целая строка. Скрытый = True
‘Скрыть столбцы
Диапазон (Ячейки (1, 1), Ячейки (1, столбец 1 — 1)). Столбец Целый.Скрытый = Истина
Диапазон (Ячейки (1, col2 + 1), Ячейки (1, _
Столбцы.Счетчик)). CompleteColumn.Hidden = True
Конец подзаголовка
Чтобы отобразить все строки и столбцы, перейдите в видоискатель строк и столбцов (выделено красным на рис. 1) и перейдите в меню: Главная -> Ячейки -> Формат -> Скрыть или Показать -> Показать строки. Повторите этот путь, чтобы просмотреть столбцы (рисунок 2).
Рис. 2. Показать все строки и столбцы
Если выбранный диапазон содержит несвязанные диапазоны, будет виден только первый.
Синхронизация выделенного диапазона на листах рабочей книги
Если вы работаете с книгами с несколькими листами, вы, вероятно, знаете, что Excel не может «синхронизировать» листы в книге. Другими словами, не существует автоматического способа сделать все листы с одинаковым выделением и одинаковыми верхними левыми ячейками. Макрос VBA, показанный ниже, берет активный лист за основу и выполняет следующие действия со всеми остальными листами в книге:
- выберите тот же диапазон, что и на активном листе;
- установите такую же ячейку в левом верхнем углу активного листа (рис. 3).
Рис. 3. Синхронизация выделенного диапазона на листах рабочей книги
Вторичные синхронизирующие таблицы()
‘Дублировать выбранный диапазон активного листа
‘и верхняя левая ячейка активного диапазона на всех листах
Если TypeName (ActiveSheet) «Worksheet», то выйдите из Sub
Dim UserSheet как рабочий лист, sht как рабочий лист
Dim TopRow As Long, LeftCol as Integer
Dim UserSel As String
Application.ScreenUpdating = False
‘Сохранение текущего листа
Установить UserSheet = ActiveSheet
‘Сохранить информацию об активной ячейке
TopRow = ActiveWindow.ScrollRow
LeftCol = ActiveWindow.ScrollColumn
UserSel = ActiveWindow.RangeSelection.Address
‘Прокрутите листы
Для всего, что есть в ActiveWorkbook
Если шт.Видимо то «пропускать скрытые листы
sht. Активировать
Диапазон (UserSel) .Выбрать
ActiveWindow.ScrollRow = TopRow
ActiveWindow.ScrollColumn = LeftCol
Конец, если
Следующий дерьмо
‘Восстановление исходного положения
UserSheet.Activate
Application.ScreenUpdating = True
Конец подзаголовка
Адаптировано из книги Джона Уокенбаха. Excel 2010. Профессиональное программирование на VBA. — М: Диалектика, 2013. — С. 348–351.
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу и вставить скопированные данные в определенную ячейку, сохранить этот файл и закрыть его. Ниже приведен код VBA.
Sub Macro_Name () ‘Выберите диапазон для копирования Range («A1: F52»). Выберите «Копировать то, что выбрано. Selection.Copy ChDir» путь к папке, в которую должен быть скопирован файл «Workbooks.Open Filename: =». Файл заголовка, расположенный в папке, путь к которой указан выше «» Выберите начальную ячейку куда вы хотите вставить скопированный диапазон данных («A6»). Выберите «Вставить ActiveSheet. Вставить данные», чтобы сохранить книгу ActiveWorkbook.Save »Закрывает книгу ActiveWorkbook. Close End Sub
Вариант 2: в открывшейся книге запускаем макрос, чтобы он открывал нужную нам книгу, копируем оттуда нужные нам данные и вставляем в нашу открытую книгу, закрывая файл, из которого эти данные были скопированы
Sub Macro_Name2 () ‘Откройте файл, в который вы хотите скопировать данные из Workbooks.Open Filename: = «C: Data.xlsx»‘ Скопируйте требуемый диапазон в открытую книгу на листе 1 Workbooks («Data.xlsx»). («Лист1»). Диапазон («A16: E16»). Копируем ‘Активируем нужную нам рабочую папку («Book1.xlsm»). Активируйте ‘Выберите и вставьте скопированные данные в ячейку A1 ActiveWorkbook.Worksheets («Sheet1»). Диапазон («A1»). Выберите ActiveSheet.Paste ‘Закройте книгу, из которой мы скопировали данные Workbooks («Data.xlsx»). Закрыть конец подписки
Другой пример. Копирование данных идет из одной активной открытой книги Excel, состоящей из нескольких листов (в нашем примере, 3 листа), в другую книгу, которая хранится в определенном месте. Данные будут введены как значения, тем больше форматов ячеек будет передано.
Спасибо за внимание.