Как использовать С … End с блоком в VBA Excel?
Блок 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
Посмотрим на другой пример.
Если вы создали объект 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]
| Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.