Блокът With - End With във VBA се използва, за да каже на VBA, че ще използваме дадения обект и той трябва да разгледа свойствата на дадения обект само след като използваме точков оператор. Ще видим примери по -късно в тази статия.
Синтаксис с - Край с блок
С [Обект] 'Код за промяна или използване на [Обект]'- '- Край с
Сега, след като знаем синтаксиса на блока With - End With, нека видим неговото използване.
Пример за С - Край с блок
Да речем, че искам да направя няколко промени в диапазон A2: A10. Искам да избера този диапазон, да променя цветовете на запълване, стила на шрифта и т.н. Как бих го направил по принцип? Вероятно така:
Подтест () Диапазон ("A1: A10"). Изберете диапазон ("A1: A10"). Interior.ColorIndex = 8 Диапазон ("A1: A10"). Font.Name = "Алжирски" диапазон ("A1: A10" "). Font.ColorIndex = 12 Диапазон (" A1: A10 "). Font.Underline = xlUnderlineStyleDouble Range (" A1: A10 "). Обхват на копиране (" B1: B10 ") Диапазон (" A1: A10 "). Изчистване End Sub
Горното избира диапазон A1: A10. Променя вътрешния цвят на диапазона на цветен индекс 8. Променя шрифта на алжирски. Променя цвета на шрифта в цветен индекс 12. Подчертава текста в диапазон с двойно подчертаване. След това копира диапазона A1: A10 в диапазон B1: B10 на същия лист. Най -накрая изчиства диапазона A1: A10.
Можете да забележите, че за да извършим всяка операция с обхват A1: A10, трябва да я запишем всеки път. Тогава точковият оператор осъществява достъп до свойствата си. Това намалява скоростта на обработка и увеличава режийните разходи за VBA програмисти. Алтернативата за това е да използвате блок With: Кодът по -долу прави същото като горния код, но по -бързо.
Подтест () С обхват ("A1: A10"). Изберете .Interior.ColorIndex = 8 .Font.Name = "Алжирски". Font.ColorIndex = 12. Font.Underline = xlUnderlineStyleDouble .Copy Range ("B1: B10" ). Изчистете края с End Sub
Нека видим друг пример.
Ако сте създали обект на Outlook Mail, можете да го използвате, за да инициализирате всички негови свойства и да използвате методи.
Set outMail = Outlook.Application.CreateItem (0) С outMail .To = "abcd.mail.com" 'Задължително. Тук дефинирате пощенския идентификатор на дестинацията… cc = "cc.mail.com" 'по избор. Cc имейл имейл, ако искате … BCC = "bcc.mail.com" 'по избор. Bcc имейл поща, ако искате … Subject = subj 'трябва да има. Масажът върху тялото на пощата … Body = msg 'по избор. Масажът върху пощенското тяло … Прикачени файлове. Добавете „C: /exceltip.com \ test.xlsx“. Изпратете края с
Как работи?
Е, когато пишем With Range ("A1: A10"), vba заключва препратката си към обхвата на обекта ("A1: A10"). Така че, когато пишем оператор dot (.), VBA изброява всички членове на този клас диапазони, които ще засегнат само Range на обекти ("A1: A10") или всеки обект, който споменахте. Референтното заключване се освобождава, когато VBA прочете оператора End With.
Вложено с блокове
Можем да имаме блок в друг блок. В горния пример използвахме обект range, за да го изберем. След това използвахме Range.Font няколко пъти за работа с шрифтове. Това отново се повтаря. Горният код може да бъде написан и по следния начин:
Подтест () С обхват ("A1: A10"). Изберете .Interior.ColorIndex = 8 'Използване на друг With в рамките на With With Block With .Font .Name = "Algerian" .ColorIndex = 12. Underline = xlUnderlineStyleDouble End With .Copy Обхват ("B1: B10"). Изчистете края с End Sub
Вътрешният с блок трябва да се отнася до обект, който е под -член на външния обект. Можем да посочим външното с като обект с и вътрешното С като дете с. Когато започнете вътрешно с, обектът трябва да бъде записан с предишния оператор на точка.
След като сте дете, нямате достъп до специфични за родителя свойства. Например кодът по -долу е грешен.
Подтест () С обхват ("A1: A10"). Изберете .Interior.ColorIndex = 8 'Използване на друг With в рамките на блок With .Font .Name = "Algerian" .ColorIndex = 12. Underline = xlUnderlineStyleDouble' Кодът по -долу ще генерира грешка, тъй като методите за копиране и изчистване не принадлежат към класа на шрифта … Обхват на копиране ("B1: B10"). Изчистване на край с край с край Sub
Напълно квалифициран с блок
Ако искам да направя някои промени с шрифта на диапазон A1: A10 на лист 2 в кода, съдържащ работната книга, тогава трябва да използваме напълно квалифициран блок.
Двата кода по -долу ще работят еднакво.
Sub test2 () С 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 test3 () С ThisWorkbook.Sheets (" Shee2 "). Диапазон (" A1: A10 "). Font .Name =" Алжирски ".ColorIndex = 12. Underline = xlUnderlineStyleDouble End With End Sub
Можете да видите разликата. Така че, когато знаете, че ще използвате множество методи и свойства от обект, дайте напълно квалифицирано име в началото. Ако ще използвате дъщерни обекти, използвайте предишния подход. Опитните програмисти използват и двата метода в подходящи ситуации.
Така че да, момчета, така използваме блока With - End With във VBA. Надявам се, че бях достатъчно обяснителен и тази статия ви помогна да разберете концепцията на With - End With. Ако имате някакви съмнения относно тази статия или друга тема, попитайте ме в секцията за коментари по -долу. Ще се радвам да ви помогна.
VBA променливи в Excel| VBA означава Visual Basic за приложения. Това е език за програмиране от Microsoft. Използва се с приложения на Microsoft Office като MSExcel, MS-Word и MS-Access, докато VBA променливите са специфични ключови думи.
Променлив обхват на Excel VBA| Във всички езици за програмиране имаме променливи спецификатори за достъп, които определят от къде може да се получи достъп до определена променлива. Excel VBA не е изключение. VBA също има спецификатори на обхвата.
Аргументи на ByRef и ByVal | Когато един аргумент се предава като аргумент ByRef на различна под -функция или функция, се изпраща препратката към действителната променлива. Всички промени, направени в копието на променливата, ще се отразят в първоначалния аргумент.
Изтриване на листове без подкани за потвърждение с помощта на VBA в Microsoft Excel | Тъй като изтривате листове с помощта на VBA, знаете какво правите. Бихте искали да кажете на Excel да не показва това предупреждение и да изтрие проклетия лист.
Добавяне и запазване на нова работна книга с помощта на VBA в Microsoft Excel 2016| В този код първо създадохме препратка към обект на работна книга. И тогава го инициализирахме с нов обект на работна книга. Ползата от този подход е, че можете лесно да извършвате операции с тази нова работна книга. Като запазване, затваряне, изтриване и т.н.
Показване на съобщение в лентата за състоянието на Excel VBA| Лентата на състоянието в Excel може да се използва като монитор на кодове. Когато вашият VBA код е дълъг и изпълнявате няколко задачи с помощта на VBA, често деактивирате актуализацията на екрана, така че да не виждате този екран да трепти.
Изключете предупредителните съобщения с помощта на VBA в Microsoft Excel 2016| Този код не само деактивира сигналите за VBA, но също така увеличава ефективността на кода във времето. Да видим как.
Популярни статии:
50 преки пътища в Excel за повишаване на вашата производителност | Бъдете по -бързи в задачата си. Тези 50 преки пътища ще ви накарат да работите още по -бързо в Excel.
Функцията VLOOKUP в Excel | Това е една от най -използваните и популярни функции на excel, която се използва за търсене на стойност от различни диапазони и листове.
COUNTIF в Excel 2016 | Пребройте стойностите с условия, използвайки тази невероятна функция. Не е необходимо да филтрирате данните си, за да броите конкретни стойности. Функцията Countif е от съществено значение за подготовката на вашето табло.
Как да използвате функцията SUMIF в Excel | Това е друга основна функция на таблото. Това ви помага да обобщите стойностите при конкретни условия.