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

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

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

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

Существующая книга открывается из кода VBA Excel с помощью метода 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  

Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:

  Workbooks.Add  ActiveWorkbook.SaveAs Filename:="D:test2.xls"  

В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».

Обращение к открытой книге

Обращение к активной книге:

  ActiveWorkbook  

Обращение к книге с выполняемым кодом:

  ThisWorkbook  

Обращение к книге по имени:

  Workbooks("test1.xls")  Workbooks("test2.xls")  

Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.

Как закрыть книгу Excel из кода VBA

Открытая рабочая книга закрывается из кода 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)  

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

Рис. 1. Столбцы и строки скрыты за исключением рабочего диапазона

Скачать заметку в формате Word или pdf, примеры в архиве (политика безопасности провайдера не позволяет загружать файлы Excel с поддержкой макросов)

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

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

Public Sub SaveAllWorkbooks()
    Dim Book As Workbook
    For Each Book In Workbooks
        If Book.Path "" Then Book.Save
    Next Book
End Sub

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

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

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

Sub CloseAllWorkbooks()
    Dim Book As Workbook
    For Each Book In Workbooks
        If Book.Name ThisWorkbook.Name Then
            Book.Close savechanges:=True
        End If
    Next Book
    ThisWorkbook.Close savechanges:=True
End Sub

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

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

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

Sub HideRowsAndColumns()
    Dim row1 As Long, row2 As Long
    Dim col1 As Long, col2 As Long
    If TypeName(Selection) "Range" Then Exit Sub
'   Если последняя строка либо последний столбец скрыты,
'   отобразить все и выйти
    If Rows(Rows.Count).EntireRow.Hidden Or _
        Columns(Columns.Count).EntireColumn.Hidden Then
        Cells.EntireColumn.Hidden = False
        Cells.EntireRow.Hidden = False
        Exit Sub
    End If
    row1 = Selection.Rows(1).Row
    row2 = row1 + Selection.Rows.Count — 1
    col1 = Selection.Columns(1).Column
    col2 = col1 + Selection.Columns.Count — 1
    Application.ScreenUpdating = False
    On Error Resume Next
'   Скрыть строки
    Range(Cells(1, 1), Cells(row1 — 1, 1)).EntireRow.Hidden = True
    Range(Cells(row2 + 1, 1), Cells(Rows.Count, _
        1)).EntireRow.Hidden = True
'   Скрыть столбцы
    Range(Cells(1, 1), Cells(1, col1 — 1)).EntireColumn.Hidden = True
    Range(Cells(1, col2 + 1), Cells(1, _
        Columns.Count)).EntireColumn.Hidden = True
End Sub

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

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

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

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

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

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

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

Sub SynchSheets()
'   Дублирование выделенного диапазона активного листа
'   и верхней левой ячейки активного диапазона на всех листах
    If TypeName(ActiveSheet) "Worksheet" Then Exit Sub
    Dim UserSheet As Worksheet, sht As Worksheet
    Dim TopRow As Long, LeftCol As Integer
    Dim UserSel As String
    Application.ScreenUpdating = False
'   Запоминание текущего листа
    Set UserSheet = ActiveSheet
'   Сохранение сведений об активной ячейке
    TopRow = ActiveWindow.ScrollRow
    LeftCol = ActiveWindow.ScrollColumn
    UserSel = ActiveWindow.RangeSelection.Address
'   Циклический обход рабочих листов
    For Each sht In ActiveWorkbook.Worksheets
        If sht.Visible Then ' пропуск скрытых листов
            sht.Activate
            Range(UserSel).Select
            ActiveWindow.ScrollRow = TopRow
            ActiveWindow.ScrollColumn = LeftCol
        End If
    Next sht
'   Восстановление исходного положения
    UserSheet.Activate
    Application.ScreenUpdating = True
End Sub

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

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

Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub 

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

Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx"  'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate  'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste  'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub 

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

Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные  'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub 

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

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

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

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

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

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

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

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

Код:

Sub AddNewWorkbook1()  'Добавление новой рабочей книги  Workbooks.Add  'Сохранение рабочей книги  ActiveWorkbook.SaveAs "C:WorkbookName.xls"  'OR  ActiveWorkbook.SaveAs Filename:="C:WorkbookName1.xls"  End Sub  

Объяснение:

  1. Метод добавления рабочей книги  добавит новую книгу
  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"  'OR  wkb.SaveAs Filename:="C:WorkbookName1.xls"  End Sub  

    Вывод:

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

    Инструкции:

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