Как сделать активной книгу excel vba?

Автор: | 01.06.2022

Откройте книгу Excel из кода VBA. Создайте новую книгу, дайте ей имя. Ссылаясь на открытую и закрывающуюся книгу. Методы Open, Add и Close объекта Workbooks.

  1. Откройте существующую книгу
  2. Создать новую книгу
  3. Ссылка на открытую книгу
  4. Как закрыть книгу Excel из кода VBA

Открытие существующей книги

Существующая рабочая книга открывается из кода Excel VBA с помощью метода Open:

Workbooks.Open Filename:=»D:test1.xls»

или

Workbooks.Open(«D:test1.xls»)

В кавычках указан полный путь к открытому файлу Excel. Если этот файл не существует, произойдет ошибка.
Проверить наличие файла можно с помощью функции Dir:

If Dir(«D:test1.xls») = «» Then MsgBox «Файл не существует» Else MsgBox «Файл существует» End If

Или, если файл существует, вы можете открыть его сразу:

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 с поддержкой макросов)

Сохранение всех рабочих книг

Следующая процедура перебирает все книги в коллекции Workbooks и сохраняет каждый ранее сохраненный файл.

Общедоступная подпрограмма SaveAllWorkbooks()
    Dim Book как рабочая тетрадь
    Для каждой книги в рабочих тетрадях
        Если Book.Path «» Тогда Book.Save
    Следующая книга
Под конец

Обратите внимание, как используется свойство Path. Если свойство Path не задано ни для одной книги, значит файл еще не сохранен (это новая книга). Эта процедура игнорирует такие книги и сохраняет только те, для свойства Path которых задано ненулевое значение.

Сохранение и закрытие всех рабочих книг

Следующая процедура проходит по коллекции Workbooks. Программа сохраняет и закрывает все книги.

Подпрограмма ЗакрытьВсеКниги()
    Dim Book как рабочая тетрадь
    Для каждой книги в рабочих тетрадях
        Если Книга.Имя ЭтаКнига.Имя Тогда
            Book.Close savechanges:=True
        Это закончится, если
    Следующая книга
    ThisWorkbook.Close savechanges: = True
Под конец

Обратите внимание, что процедура использует оператор If, чтобы определить, содержит ли текущая рабочая книга код, который выполняется в данный момент. Это необходимо, поскольку при закрытии рабочей книги, содержащей процедуру, программа автоматически завершает свое выполнение, а остальные рабочие книги не сохраняются и не закрываются.

Частичное сокрытие элементов рабочего листа

Пример в этом разделе скрывает все строки и столбцы в электронной таблице, кроме тех, которые находятся в текущем выбранном диапазоне (рис. 1).

SubHideRowsAndColumns()
    Затемнить ряд 1 такой длины, ряд 2 такой же длины
    Тусклый col1 Так долго, col2 Так долго
    Если TypeName(Selection) «Range», то выйдите из Sub
‘ Если последняя строка или последний столбец скрыты,
‘ показать все и выйти
    Если Rows(Rows.Count).EntireRow.Hidden ИЛИ _
        Столбцы (Columns.Count).EntireColumn.Hidden Then
        Cells.EntireColumn.Hidden = Ложь
        Cells.EntireRow.Hidden = Ложь
        Выход вторичного
    Это закончится, если
    row1 = Выбор.Строки(1).Строка
    строка2 = строка1 + Selection.Rows.Count — 1
    col1 = Выбор.Столбцы(1).Столбец
    col2 = col1 + Selection.Columns.Count — 1
    Application.ScreenUpdating = Ложь
    При ошибке Возобновить Далее
‘скрыть строки
    Диапазон (Ячейки (1, 1), Ячейки (строка 1 — 1, 1)). Весь ряд. Скрытый = Истина
    Диапазон (Ячейки (строка2 + 1, 1), Ячейки (Строки. Количество, _
        1)).EntireRow.Hidden = Истина
‘Скрыть столбцы
    Диапазон (Ячейки (1, 1), Ячейки (1, столбец 1 — 1)). Весь столбец. Скрытый = Истина
    Диапазон (Ячейки (1, col2 + 1), Ячейки (1, _
        Колонки.Количество)).EntireColumn.Hidden = True
Под конец

Чтобы отобразить все строки и столбцы, встаньте на перекрестие строк и столбцов (выделено красным на рис. 1) и перейдите в меню: Главная -> Ячейки -> Формат -> Скрыть или показать -> Показать строки. Повторите этот путь, чтобы отобразить столбцы (рис. 2).

Рис. 2. Показать все строки и столбцы

Если выбранный диапазон включает несвязанные диапазоны, останется видимым только первый диапазон.

Синхронизация выделенного диапазона на листах рабочей книги

Если вы работаете с многостраничными книгами, вы, вероятно, знаете, что Excel не может «синхронизировать» листы в книге. Другими словами, нет автоматического способа сделать так, чтобы все рабочие листы имели одинаковые выбранные диапазоны и верхние левые ячейки. Показанный ниже макрос VBA берет активный лист за основу и выполняет следующие действия на всех других листах в книге:

  • выберите тот же диапазон, что и на активном листе;
  • устанавливает ту же самую верхнюю левую ячейку, что и на активном листе (рис. 3).

Рис. 3. Синхронизируйте выбранный диапазон на листах книги

Вторичные листы синхронизации()
‘ Дублировать выбранный диапазон активного листа
‘ и верхняя левая ячейка активного диапазона на всех листах
    Если TypeName(ActiveSheet) «Worksheet», то выйдите из Sub
    Dim UserSheet как рабочий лист, sht как рабочий лист
    Dim TopRow как long, LeftCol как целое число
    Затемнить UserSel как строку
    Application.ScreenUpdating = Ложь
‘Сохранить текущий лист
    Установить лист пользователя = активный лист
‘Сохранение информации об активной ячейке
    TopRow = ActiveWindow.ScrollRow
    LeftCol = ActiveWindow.ScrollColumn
    UserSel = ActiveWindow.RangeSelection.Address
‘ Пройтись по листам
    Для каждого листа в ActiveWorkbook.Worksheets
        Если шт.Видимо То ‘пропускать скрытые листы
            шт.Активировать
            Диапазон(Селусер).Выбрать
            ActiveWindow.ScrollRow = Верхний ряд
            ActiveWindow.ScrollColumn = LeftCol
        Это закончится, если
    Следующее дерьмо
‘Восстановление исходного положения
    UserSheet.Активировать
    Заявление. Обновление экрана = Истина
Под конец

По книге Джона Уокенбаха. Excel 2010. Профессиональное программирование VBA. — М: Диалектика, 2013. — С. 348-351.

 

Задача состоит в том, чтобы скопировать определенный диапазон с текущего листа, открыть другую книгу и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.

Sub Macro_Name() ‘Выберите диапазон для копирования Range(«A1:F52»). Выберите ‘Копировать выбранный Selection.Copy ChDir «путь к папке, в которую будет скопирован файл» Workbooks.Open Filename:= » Назовите файл находится в папке с указанным выше путем» ‘Выберите начальную ячейку, в которую вы хотите вставить скопированные данные

Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, копирует оттуда нужные нам данные и вставляет их в нашу открытую книгу, закрывая файл, из которого эти данные были скопированы

Sub Macro_Name2() ‘Откройте файл, в который вы хотите скопировать данные из Workbooks.Open Filename:=»C:Data.xlsx» ‘Скопируйте требуемый диапазон в открытой книге на листе 1 Workbooks(«Data.xlsx») .Worksheets («Лист1») .Range(«A16:E16»).Copy ‘Активируем нужную нам книгу Workbooks(«Book1.xlsm»).Activate ‘Выбираем и вставляем скопированные данные в ячейку A1 ActiveWorkbook.Worksheets(» Sheet1″) .Range(«A1») .Select ActiveSheet.Paste ‘Закрыть книгу, из которой мы скопировали данные Workbooks(«Data.xlsx»).Close End Sub

Другой пример — копирование диапазонов данных из многостраничной активной открытой книги Excel (3 листа в нашем примере) в другую книгу, хранящуюся в определенном месте. Данные будут вставлены как значения, плюс будут переданы форматы ячеек.

=False, Transpose:=False ‘Второй лист abook.Worksheets(«Лист2»).Активировать диапазон(«A1:I23»).Копировать bookconst.Worksheets(«Лист2»).Активировать диапазон(«A1 :I23 «).Выбрать ‘выбрать диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ‘вставить только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone , _ SkipBlanks:=False, Transpose:=False ‘Третий лист abook.Worksheets(«Лист3»).Активировать диапазон(«A1:I23»).Копировать bookconst.Worksheets(«Лист3»).Активировать диапазон(«A1:I23»). «).Select ‘выбрать диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ‘вставить только выбранные форматы ячеек

Если статья была вам полезна, буду признателен, если вы поделитесь ею со своими друзьями с помощью кнопок ниже.

Спасибо за внимание.

 

Иногда нам может понадобиться открыть или создать новую книгу с помощью VBA. Вы можете установить только что созданную книгу как объект, чтобы упростить обращение к вашей книге для других задач.

Решение(ия):

  Следующие макросы откроют или создадут новую книгу с помощью метода Add.

Создать новую книгу в Excel VBA — примеры:

  • Создать новую книгу
  • Создайте объект для вновь созданной книги
Создать новую книгу

  Вы можете использовать следующий код, чтобы создать новую книгу и сохранить ее на диск C с помощью метода «Добавить».

Код:

Sub AddNewWorkbook1() ‘Добавить новую книгу Workbooks.Add ‘Сохранить книгу ActiveWorkbook.SaveAs «C:WorkbookName.xls» ‘ИЛИ ActiveWorkbook.SaveAs Имя файла:=»C:WorkbookName1.xls» End Sub

Объяснение:

  1. Метод add workbook добавит новую книгу
  2. Метод «Сохранить как книгу» сохранит активную книгу в указанном месте с указанным именем файла

Вывод. Вы должны увидеть недавно открытую книгу вместе с существующей книгой.

 

как сделать книгу excel vba активной

 

Инструкции:

 

  1. Откройте книгу Excel
  2. Нажмите Alt + F11, чтобы открыть редактор VBA.
  3. Вставьте новый модуль из меню «Вставка
  4. Создайте приведенный выше код и вставьте его в окно кода
  5. Нажмите F5, чтобы увидеть вывод
  6. Вы должны увидеть недавно открытую книгу, как показано выше.
  7. Сохранить файл как макрос
Создание объекта для вновь созданной книги

  Вы можете установить только что созданную книгу в качестве объекта, чтобы вы могли легко обращаться к своей книге для других задач.

Код:

sub AddNewWorkbook2() Dim wkb as Workbook ‘Добавить новую книгу Set wkb = Workbooks.Add ‘Сохранить книгу wkb.SaveAs «C:WorkbookName.xls» ‘ИЛИ wkb.SaveAs Filename:=»C:WorkbookName1.xls» End Sub

Производство:

  Вы должны увидеть недавно открытую книгу вместе с существующей книгой.

Инструкции:

  1. Откройте книгу Excel
  2. Нажмите Alt + F11, чтобы открыть редактор VBA.
  3. Вставьте новый модуль из меню «Вставка
  4. Создайте приведенный выше код и вставьте его в окно кода
  5. Нажмите F5, чтобы увидеть вывод
  6. Вы должны увидеть недавно открытую книгу, как показано выше.
  7. Сохранить файл как макрос

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *