Найти тему
VBA Excel с нуля

VBA Excel № 52. With и End With в VBA.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Зачем использовать With и End With в VBA?

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

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

Синтаксис With и End With выглядит следующим образом:

With объект

' Код, в котором используется объект

End With

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Где:

- объект - это объект, с которым вы хотите работать в блоке кода.

End With используется для завершения блока With. Все операторы With должны заканчиваться End With.

Примеры использования With и End With

Пример 1: Работа с объектом Range в Excel (путь к книге может быть разным)

Sub ПримерСWith()

Dim Книга As Workbook

Set Книга =
Workbooks.Open("C:\Users\Lenovo\OneDrive\Desktop\Пример.xlsx")

With Книга.Sheets("Лист1").Range("A1:B10")

.Font.Bold = True

.Interior.Color = RGB(255, 0, 0)

.Borders.LineStyle = xlContinuous

End With

Книга.Save

Книга.Close

End Sub

Скриншот с моего ноутбука
Скриншот с моего ноутбука

В этом примере мы открываем книгу Excel, выбираем определенный лист и диапазон ячеек с помощью With. Затем мы применяем форматирование (жирный шрифт, цвет фона и границы) к этому диапазону без необходимости повторно указывать Книга.Sheets("Лист1").Range("A1:B10").

Без With это выглядело бы так:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

В итоге в книге «Пример» произошли следующие изменения:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Пример 2: Избегание повторений при работе с объектами

Sub ИзбеганиеПовторений()

Dim Клетка As Range

Set Клетка = ActiveSheet.Range("A1")

With Клетка

.Value = "Значение 1"

.Font.Bold = True

End With

' Без использования With:

' ActiveSheet.Range("A1").Value = "Значение 1"

' ActiveSheet.Range("A1").Font.Bold = True

End Sub

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Этот пример показывает, как можно избежать повторения объекта ActiveSheet.Range("A1") при изменении его значения и форматировании с использованием With.

В следующей статье рассмотрим конструкцию For Next в VBA.