Памятка для начинающих по коду VBA Excel. Краткий справочник по часто используемым выражениям при написании программного кода.
Краткий справочник (памятка) позволяет быстро найти нужное выражение (оператор, функцию, метод) для копирования и вставки в код VBA Excel при написании программы.
Обращение к ячейке
Способы обращения к диапазону в виде одной ячейки на примере ячейки B5 на активном листе:
1 2 3 4 |
Range("B5") [B5] Cells(5, 2) Cells(5, "B") |
Обращение к ячейке на неактивном листе активной книги:
1 |
Worksheets("Имя листа").Range("B5") = 123 |
Обращение к ячейке в неактивной книге:
1 |
Workbooks("Книга2.xlsm").Worksheets("Имя листа").Range("B5") = 123 |
Обращение к ячейке в неактивной текущей книге с исполняемым кодом:
1 |
ThisWorkbook.Worksheets("Имя листа").Range("B5") = 123 |
"Имя листа"
— это имя на ярлыке листа, которое в проводнике проекта VBA отображается в скобках.
Обращение к диапазону
Способы обращения к диапазону на активном листе:
1 2 3 4 5 6 7 8 |
'смежный диапазон Range("B5:E10") [B5:E10] Range(Cells(5, 2), Cells(10, 5)) Range(Cells(5, "B"), Cells(10, "E")) 'несмежный диапазон Range("B5:E10, G2:I7, D12:F17") Application.Union([B5:E10], [G2:I7], [D12:F17]) |
С помощью метода Application.Union можно объединить в несмежный диапазон и выражения типа Range(Cells(5, 2), Cells(10, 5)).
Способы обращения к диапазону на неактивном листе и в неактивной книге те же, что и для диапазона в виде одной ячейки (смотрите выше).
Обмен значениями
Ячейка-переменная-ячейка
1 2 3 |
Dim x x = [A1] [A2] = x |
Диапазон-массив-диапазон
1 2 3 |
Dim arr arr = Range("A1:E5") Range("A7:E11") = arr |
Аналог Ctrl+стрелка
Аналог сочетания клавиш Ctrl+стрелка — свойство End объекта Range:
1 2 3 |
Dim myRange As Range, a As String Set myRange = Range("D10").End(xlDown | xlToLeft | xlToRight | xlUp) a = Range("D10").End(xlDown | xlToLeft | xlToRight | xlUp).Address |
В качестве аргумента свойства End оставляем одну константу в зависимости от нужного направления.
Последняя строка таблицы
Варианты определения номера последней строки таблицы:
1 2 3 4 |
Dim n as Long n = Range("A1").CurrentRegion.Rows.Count n = Range("A1").End(xlDown).Row n = Cells(Rows.Count, "A").End(xlUp).Row |
Шаблоны для копирования
Краткий справочник по циклам и другим блокам кода. Копируйте шаблоны из памятки для начинающих и вставляйте их в свой код VBA Excel. Используйте свои переменные, условия и операторы.
Оператор With
1 2 3 |
With объект операторы End With |
Функция IIf
1 |
IIf(условие, если True, если False) |
Оператор If…Then…Else
Однострочная конструкция:
1 |
If условие Then операторы |
Многострочная конструкция полная:
1 2 3 4 5 6 7 8 |
If условие Then операторы ElseIf условие Then операторы ---------------- Else операторы End If |
Многострочная конструкция неполная:
1 2 3 4 5 |
If условие Then операторы Else операторы End If |
Оператор Select Case
1 2 3 4 5 6 7 8 9 10 11 |
Select Case выражение Case условие 1 операторы 1 Case условие 2 операторы 2 --------------------- Case условие n операторы n Case Else операторы End Select |
Цикл For… Next
Полная конструкция:
1 2 3 4 5 6 |
Dim i As Long For i = 1 To 20 Step 1 операторы Exit For операторы Next |
Неполная конструкция:
1 2 3 4 |
Dim i As Long For i = 1 To 20 операторы Next |
Цикл For Each… Next
Полная конструкция:
1 2 3 4 5 |
For Each элемент In группа операторы Exit For операторы Next |
Неполная конструкция:
1 2 3 |
For Each элемент In группа операторы Next |
Цикл Do While… Loop
Условие до операторов:
1 2 3 4 5 |
Do While условие операторы Exit Do операторы Loop |
Условие после операторов:
1 2 3 4 5 |
Do операторы Exit Do операторы Loop While условие |
Цикл Do Until… Loop
Условие до операторов:
1 2 3 4 5 |
Do Until условие операторы Exit Do операторы Loop |
Условие после операторов:
1 2 3 4 5 |
Do операторы Exit Do операторы Loop Until условие |
Цикл While… Wend
1 2 3 |
While условие операторы Wend |
Отключение обновлений экрана
Отключение обновлений экрана позволяет ускорить длинную процедуру и скрыть мельтешение (мерцание) экрана во время ее выполнения:
1 2 3 |
Application.ScreenUpdating = False операторы Application.ScreenUpdating = True |
Отмена оповещений и сообщений
Отмена оповещений и сообщений в ходе выполнения процедуры:
1 2 3 |
Application.DisplayAlerts = False операторы Application.DisplayAlerts = True |
Например, при закрытии книги Excel из кода VBA без сохранения не будет появляться диалоговое окно с предложением сохранить книгу перед закрытием.
InputBox и MsgBox
1 2 3 |
Dim a As String a = InputBox("Напишите что-нибудь:") MsgBox a |
Скрыть лист
1 2 3 4 5 |
'Скрыть лист Sheets("Лист1").Visible = False 'Отобразить лист Sheets("Лист1").Visible = True |
Защита листа
1 2 3 4 5 |
'Защитить лист Worksheets("Лист1").Protect 'Снять защиту листа Worksheets("Лист1").Unprotect |
Пользовательская форма
Памятка по работе с формой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'Загрузить (открыть) форму в модальном окне UserForm1.Show 'Загрузить (открыть) форму в немодальном окне UserForm1.Show 0 'Скрыть форму UserForm1.Hide Me.Hide 'Показать скрытую форму UserForm1.Show 'Выгрузить (закрыть) форму Unload UserForm1 Unload Me |
Немодальное окно можно скрыть и закрыть как из модуля формы, так и из других модулей. Модальное окно можно скрыть и закрыть только из модуля формы. Ключевое слово Me
используется только в модуле формы.
Удаление строк и столбцов
1 2 3 4 5 |
'Удалить строку №9 Cells(9, 4).EntireRow.Delete 'Удалить столбец №4 Cells(9, 4).EntireColumn.Delete |
Открыть папку или файл
Открыть папку из кода VBA Excel или любой файл по его расширению в программе по умолчанию для просмотра:
1 2 3 4 5 |
'Открыть папку ThisWorkbook.FollowHyperlink ("C:\Тестовая") 'Открыть файл ThisWorkbook.FollowHyperlink ("C:\Тестовая\Документ1.docx") |
Закрыть все книги
Закрыть все книги Excel без сохранения изменений, кроме текущей книги с кодом:
1 2 3 4 |
Dim myWB As Workbook For Each myWB In Workbooks If Not myWB Is ThisWorkbook Then myWB.Close False Next |
Чтобы закрыть все книги с сохранением изменений, необходимо заменить False на True.
Вы можете сохранить краткий справочник для начинающих программировать в VBA Excel в свою социальную сеть, чтобы эта памятка всегда была под рукой.