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

Как сделать активной книгу excel vba?
На чтение
19 мин.
Просмотров
48
Дата обновления
06.11.2024

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

  1. Открытие существующей книги
  2. Создать новую книгу
  3. Доступ к открытой книге
  4. Как закрыть книгу 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 листа), в другую книгу, которая хранится в определенном месте. Данные будут введены как значения, тем больше форматов ячеек будет передано.

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

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий