image

Блок With — End With в VBA используется, чтобы сообщить VBA, что мы собираемся использовать данный объект, и он должен учитывать свойства данного объекта только после того, как мы используем оператор точки. Мы увидим примеры позже в этой статье.

Синтаксис с — Конец с блоком

With [Object]

'Code to alter or use [Object]

'--

'--

End With

Итак, теперь, когда мы знаем синтаксис блока With — End With, давайте посмотрим его использование.

Пример с — Конец с блоком Допустим, я хочу внести несколько изменений в диапазон A2: A10. Я хочу выбрать этот диапазон, изменить его цвета заливки, стиль шрифта и т. Д. Как мне это обычно делать? Наверное так:

Sub test()

Range("A1:A10").Select

Range("A1:A10").Interior.ColorIndex = 8

Range("A1:A10").Font.Name = "Algerian"

Range("A1:A10").Font.ColorIndex = 12

Range("A1:A10").Font.Underline = xlUnderlineStyleDouble

Range("A1:A10").Copy Range("B1:B10")

Range("A1:A10").Clear

End Sub

Вышеуказанное выбирает диапазон A1: A10. Изменяет внутренний цвет диапазона на индекс цвета 8. Изменяет шрифт на алжирский. Изменяет цвет шрифта на цветовой индекс 12. Подчеркивает текст в диапазоне двойным подчеркиванием.

Затем он копирует диапазон A1: A10 в диапазон B1: B10 того же листа. Наконец он очищает диапазон A1: A10.

Вы можете заметить, что для выполнения каждой операции с диапазоном A1: A10 мы должны писать его каждый раз. Затем оператор точки получает доступ к его свойствам. Это снижает скорость обработки и увеличивает накладные расходы программистов VBA. Альтернативой для этого является использование блока With: приведенный ниже код делает то же самое, что и приведенный выше, но быстрее.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

.Font.Name = "Algerian"

.Font.ColorIndex = 12

.Font.Underline = xlUnderlineStyleDouble

.Copy Range("B1:B10")

.Clear

End With

End Sub

image

Посмотрим на другой пример.

Если вы создали объект Outlook Mail, вы можете использовать этот объект для инициализации всех его свойств и использования методов.

Set outMail = Outlook.Application.CreateItem(0)

With outMail

.To = "abcd.mail.com" 'Mandatory. Here you define the destination mail id.

.cc = "cc.mail.com" 'optional. Cc mail id if you want.

.BCC = "bcc.mail.com" 'optional. Bcc mail id if you want.

.Subject = subj 'should have. The massage on mail body.

.Body = msg 'optional. The massage on mail body.

.Attachments.Add "C:/exceltip.com\test.xlsx"

.Send

End With

Как это работает?

Что ж, когда мы пишем With Range («A1: A10»), vba блокирует ссылку на диапазон объекта («A1: A10»). Поэтому всякий раз, когда мы пишем оператор точка (.), VBA перечисляет все члены этого класса диапазона, который влияет только на объект Range («A1: A10») или любой объект, который вы упомянули. Блокировка ссылок снимается, когда VBA читает оператор End With.

Вложенные с блоками. Мы можем иметь блок внутри другого блока. В приведенном выше примере мы использовали объект диапазона для его выбора. Потом несколько раз использовали Range.Font для работы со шрифтами. Это снова повторяется. Приведенный выше код тоже можно записать так:

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

.Copy Range("B1:B10")

.Clear

End With

End Sub

Внутренний блок with должен ссылаться на объект, который является подчиненным членом внешнего объекта. Мы можем ссылаться на внешнее с как на объект с, а внутреннее с как на дочерний элемент. Когда вы начинаете внутренний с, объект должен быть записан с предыдущим оператором точки.

Когда вы станете ребенком, вы не сможете получить доступ к родительским свойствам. Например, приведенный ниже код неверен.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

'The below code will generate error as copy and clear methods does not belong to font class.

.Copy Range("B1:B10")

.Clear

End With

End With

End Sub

Полная квалификация с блоком. Если я хочу внести некоторые изменения в шрифт диапазона A1: A10 листа 2 в коде, содержащем книгу, тогда мы должны использовать полностью квалифицированный блок.

Следующие два кода будут работать одинаково.

Sub test2()

With ThisWorkbook

With .Sheets("Sheet2")

With .Range("A1:A10")

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End With

End With

End With

End Sub
'Fully qualified with block

Sub test3()

With ThisWorkbook.Sheets("Shee2").Range("A1:A10").Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End Sub

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

Так что да, ребята, вот как мы используем блок With — End With в VBA. Я надеюсь, что я достаточно объяснил, и эта статья помогла вам понять концепцию With — End With. Если у вас есть какие-либо сомнения относительно этой статьи или любой другой темы, спросите меня в разделе комментариев ниже. Я буду рад вам помочь.

Статьи по теме:

link: / general-themes-in-vba-vba-variables-in-excel [переменные VBA в Excel] | * VBA означает Visual Basic для приложений.

Это язык программирования от Microsoft. Он используется с приложениями Microsoft Office, такими как MSExcel, MS-Word и MS-Access, тогда как переменные VBA являются конкретными ключевыми словами.

link: / general-themes-in-vba-excel-vba-variable-scope [Область переменных Excel VBA] | * Во всех языках программирования у нас есть спецификаторы доступа к переменным, которые определяют, откуда можно получить доступ к определенной переменной. Excel VBA — не исключение. VBA тоже имеет спецификаторы области видимости.

link: / cells-range-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-интервью-question [ByRef and ByVal Arguments] | Когда аргумент передается как аргумент ByRef в другую подпрограмму или функцию, отправляется ссылка на фактическую переменную. Любые изменения, внесенные в копию переменной, будут отражены в исходном аргументе.

link: / files-workbook-and-worksheets-in-vba-delete-sheet-without-confirm-prompts-using-vba-in-microsoft-excel [Удалять листы без запросов подтверждения с помощью VBA в Microsoft Excel] | Поскольку вы удаляете листы с помощью VBA, вы знаете, что делаете.

Вы хотите, чтобы Excel не показывал это предупреждение и не удалял этот проклятый лист.

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Добавить и сохранить новую книгу с помощью VBA в Microsoft Excel 2016] | В этом коде мы сначала создали ссылку на объект книги. А затем мы инициализировали его новым объектом книги. Преимущество этого подхода заключается в том, что вы можете легко выполнять операции с этой новой книгой. Например, сохранение, закрытие, удаление и т. Д. Display A Message On Строка состояния Excel VBA * | Строку состояния в Excel можно использовать как монитор кода. Когда ваш код VBA длинный и вы выполняете несколько задач с помощью VBA, вы часто отключаете обновление экрана, чтобы не видеть мерцания экрана.

link: / general-themes-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Отключить предупреждающие сообщения с помощью VBA в Microsoft Excel 2016] | * Этот код отключает не только VBA предупреждения, но также увеличивает временную эффективность кода. Посмотрим как.

Популярные статьи:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-повышения-продуктивность [50 сочетаний клавиш Excel для повышения производительности] | Выполняйте свою задачу быстрее. Эти 50 ярлыков заставят вас работать в Excel еще быстрее.

link: / формулы-и-функции-введение-функции-vlookup [Функция ВПР в Excel] | Это одна из самых используемых и популярных функций Excel, которая используется для поиска значений из разных диапазонов и листов. link: / tips-countif-in-microsoft-excel [COUNTIF в Excel 2016] | Подсчитайте значения с условиями, используя эту удивительную функцию. Вам не нужно фильтровать данные для подсчета определенных значений.

Функция Countif важна для подготовки вашей приборной панели.

link: / excel-formula-and-function-excel-sumif-function [Как использовать функцию СУММЕСЛИ в Excel] | Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.