vikttur Пользователь Сообщений: 47199 |
При выводе на лист данных из формы (контролов много): With Worksheets(«лист») Понадобилось обратиться к процедуре при выполнении кода из другой формы. Выношу макрос в общий модуль: With Worksheets(«лист») Но их же много, строчек этих, и в каждой ссылка на форму ufrmA… Вот бы: With Worksheets(«лист») Была надежда, что различит «листовое» и «форменное». Но нет, не хочет. Можно ли? |
ikki Пользователь Сообщений: 9709 |
You can nest With statements by placing one With block within another. However, because members of outer With blocks are masked within the inner With blocks, you must provide a fully qualified object reference in an inner With block to any member of an object in an outer With block. с буржуинским у меня плоховато, но я понял так: With Worksheets(«лист») фрилансер Excel, VBA — контакты в профиле |
vikttur Пользователь Сообщений: 47199 |
Не-е-е… Подозреваю, что никак… Обидно, понимаешь |
Да что же за скупость такая: экономить на ссылках ? Dim Sh As Worksheet |
|
vikttur Пользователь Сообщений: 47199 |
Жадный я. И Уокенбах тоже жадный С.М., спасибо, понял ошибку, которая вынудила создать тему: я не так задавал тип переменной (As Range). |
nerv Пользователь Сообщений: 3071 |
>Была надежда, что различит «листовое» и «форменное». Но нет, не хочет. [С.М.] |
vikttur Пользователь Сообщений: 47199 |
#7 12.03.2012 11:10:12 nerv, а как же предложение (в теме о книге) о «правильности» кода? Отвечать не нужно, вопрос «в пустоту». У каждого свои представления о порядке в коде. У меня пока такие Хотел создать тему по этому поводу, но вовремя подсказали ссылку на статью «Стиль оформления кода на vb»: http://bit.pirit.info/forum/viewtopic.php?t=2793 |
Применение оператора With для упрощения кода VBA Excel и ускорения его работы. Синтаксис оператора With, параметры, поясняющие примеры.
Оператор With предназначен для выполнения последовательности операторов (строк кода) для отдельного объекта или пользовательского типа данных.
Применение оператора With упрощает написание и восприятие кода VBA Excel, а также ускоряет его работу.
Синтаксис
Синтаксис оператора With в VBA Excel:
With object [statements] End With |
Параметры
Параметры оператора With:
Параметр | Описание |
---|---|
object | Имя объекта или пользовательского типа данных. |
statements | Один или несколько операторов (строк кода), которые выполняются в отношении указанного объекта. |
Примеры
В следующей процедуре выполняется несколько идущих подряд операторов (строк кода) в отношении одного и того же объекта Range("A1:E5")
:
Sub Primer1() Range(«A1:E5»).Value = «Тест» Range(«A1:E5»).Interior.Color = vbMagenta Range(«A1:E5»).Font.Size = 14 Range(«A1:E5»).Font.Color = vbYellow Range(«A1:E5»).Font.Italic = True Range(«A1:E5»).Borders.LineStyle = True End Sub |
Если в процедуре выполняется несколько идущих подряд операторов в отношении одного и того же объекта, то оператор With позволяет указать объект только один раз:
Sub Primer2() With Range(«A1:E5») .Value = «Тест» .Interior.Color = vbMagenta .Font.Size = 14 .Font.Color = vbYellow .Font.Italic = True .Borders.LineStyle = True End With End Sub |
Такое написание кода делает его более понятным, а выполнение – более быстрым.
Конструкции с оператором With можно вкладывать одну в другую:
Sub Primer3() With Range(«A1:E5») .Value = «Тест» .Interior.Color = vbMagenta With .Font .Size = 14 .Color = vbYellow .Italic = True End With .Borders.LineStyle = True End With End Sub |
Такой код удобен, когда необходимо выполнить ряд операторов по отношению к некоторому объекту [Range("A1:E5")
], а также по отношению к одному из содержащихся в нем объектов [Range("A1:E5").Font
].
Примечания
Примечания от разработчика:
- После входа в блок With параметр object изменить нельзя. Следовательно, один оператор With не может быть использован для изменения нескольких объектов.
- Во вложенном блоке With необходимо указывать полные ссылки на любые элементы объекта из внешнего блока With.
- Не рекомендуется использовать переходы в блоки With или из них.
Home / VBA / VBA With Statement (With – End With)
Key Points
- Use the VBA With Statement to minimize the code.
- You can use a single object at a time while using the With Statement.
What is VBA With Statement
VBA With is a statement to specify an object for once and then run multiple statements for it. In simple words, by using the “WITH” statement to specify an object, and after that, you can access all the properties and methods in one go. It starts with the “With” and ends with “End With”.
Syntax of VBA With Statement
Following is the syntax that you need to use for using With statement in VBA:
With [OBJECT]
[Statement]
End With
- With: It’s the starting keyword for the statement that tells VBA that you are specifying the object mentioned.
- Object: Here, you need to specify the object that you want to use.
- Statement: A statement(s) that you want to run with the specified object.
- End With: It’s the ending keyword for the statement.
Example to understand the VBA With Statement
Let’s take an example to understand with the statement in depth. Let’s say you want to change, the font color, size, and font name of cell A1. For doing all these three things you need to access three different properties of VBA font and the code would be:
Range("A1").Font.Color = RGB(0, 0, 255)
Range("A1").Font.Size = 16
Range("A1").Font.Name = "Consolas"
But here we going to use the With Statement instead of the above code. To use the VBA With Statement, you can use the following steps:
- First, type the keyboard “With”.
- After that, use the VBA Range to specify the cell A1 with using the font object to specify the font object.
- Next, you need to enter the code for all three properties and the values that you want to apply.
- In the end, use the keyword “End With” to end the statement.
Here’s the code that you have just written.
Sub MyMacro()
With Range("A1").Font
.Color = RGB(0, 0, 255)
.Size = 16
.Name = "Consolas"
End With
End Sub
Now let’s have a look at both codes and try to understand what is the difference that we have got by using the “With” statement.
In the first code, you have used the font object three times and then further used the property that you want to access and want to make changes to it.
But in the second code, you have used the With statement and specified the font object at once. And then three lines of code within the “With” statement to access all three properties.
When you use the “With” statement and specify an object, it tells VBA that all the statements that you have written need to run with the object mentioned. It not only gives you a structured code but also makes a macro run faster and gives it greater efficiency.
Nested With Statement
I told you in the starting that you can only specify a single object to use the With statement. But there is a way to use more than one or even multiple objects with it. That’s by using VBA LOOPS, and we are going to use FOR EACH LOOP to loop through multiple objects and use the “With”.
Let me tell you an example; you need to loop through all the worksheets and do apply all the following things to all the cells in each worksheet.
- Font Size: 16
- Font: Verdena
And in the workbook, you have five worksheets, as I have in the following example:
Use the following steps to write a nested “With” statement.
- First, you need to declare a variable to use a worksheet object.
- After that, as I said, you need to use For Each Loop. So, you need to write a code with the loop that can loop through all the worksheets.
- Now, enter the with statement which can apply font setting that we have discussed above. For referrring to all the cells in the worksheet you can use the “Cells” while specifing the object.
Here’s the full code that you have just written.
Sub MyMacro()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
With Cells
.Font.Size = 16
.Font.Name = "Verdena"
End With
Next ws
End Sub
������������� ��������� With
������������� ��������� With
� ����� ��� ������ �� ������ ������������ ������������� ���������� � �������� ������, � ����� ������������ ������ ������������� ��������� ���������, �� ���������� ������� ����� � �����. ��, �����������, ���� ����� ����� ��������.
���� � ��������� ���� � ��� �� ������ ������������ � ���������� ������ ���� �� ������ ����������, �� �������� With ��������� ������� ������ ������ ���� ���. ��� �� ������ ������� ��� �� ������������� �������� ��� ������� ��� ������� �� ����������, �� � ������ ����������� ��� ����� ��������, � ��� ���������� ����� �������. ��������:
With obj�������������������
.Name = "����� ������������� ������" ' ��������� �������� Name
.DisplayName ' ����� ������ DisplayName
sng������ = .Area ' ��������� �������� �������� Area
int���������� = .Rotate(60) ' ����� ������ Rotate (�������)
' � ���������� ������������� �� �������� � ����������
End With
��� ������, ����������� With. . .End With ����� �������� ���������, � ������� �������� � ��������������� ��������, ���������� ������. �������� �������� �� ��, ��� ������ ����������� �� ������ ���� — �������� � ��� ��������� ����������� ������ ���� ���.
�����������, ������������ With, ����� ���������� ���� � ������. ��� ������, ����� ����� ��������� ��� �������� � �� ��������� � ���������� �������, � �� ��������� � ������ �� ������������ � ��� ��������. ������ ������������� ��������� �������� ������������ ����. � ��� ����������� ����� ��������� �������� � �������� Block � AutoCAD. �� ��������� ��������� With �������������� ���� �� ����������� ��������, ������������ � ������� Block.
����������� � ������� ��� ������� �����������.
With Block.Item("������")
' ������ Block � ������ "������" ������ ���������:
' ��������������� Block � ������� �������� Name
.Name = "�������"
' �������� ����� �������� � ���, � ������� �������� Count
int������������� = .Count
' �������� ����� AddCircle
' ��� ������ = 0 � ��� ������� = 5
AddCircle (0#, 5#)
With.Item (1)
' ��� ��������� ��������� With ��������� �� ������
' ����������� ������ � ������� Block
' ����������� ������ ������������ � ������� ������ Move
.Move (15, 20)
' ���������� �������� Color ����� ������������ �������
.Color = 221
End With
End With
������ ������ �� ������������, ��� �� ������ ������������ ��������, ������������ ���������� ��� �������� �������, � �������� ���������� � ������ ����������. ��������, �� ������� ��������� With ����� ���� �� �������� ��������� �������� ������������ ����:
Int��������� = InputBox (" ������� �����, �������� " _
& "���� ������� ������� � ����� " & .Name)
If .Count > 12000
MsgBox "�� ���� ���� ������ ������!"
End If
������-��, ����������� ���������� VBA (������� ����������, ��������������� ��� ���������� ������� ���������� ���������) ��������� ����� 8, �� ���� �� ����� �������� �� ���������� �����, ������ ��� ��� ������������ ������ � ���������. ��� ������ ���� ����� For. .Loop, � VBA ��������� For Each. . .Next ������������ ��������� ����������, ����������� �� ���� �������� � ��������� ���������. ������, ���� ��� ��������� �������� ����� ������, ����� ���� ���� ������������ �������� �� ����, � For
Each. . . Next ����� � �������������. ��� ���������:
For Each ������� In ������
(��������� ��� ���������� ��� ������ ������� �����)
Next �������
�������� ��������� � ������������� For Each. . .Next � For. . .Next �������� ��, ��� ����� ��� �� ��������� ��������� ����� ���������� ���������� �����- ��� �� ��� ������� VBA. � ��������� For Each � ������� ���������� ������� ������������ ��� ������� � ���������, � � ������� ��������� ������ �������� ���������, � ������� ����� ��������.
��������� ������� ������ �������� � AutoCAD, ��� ��������� Blocks �������� ���������� �������� Block � ������ ������ Block �������� �������������� ����� ����������� �������� ���� Cone (�����) ��� 3DFace (���������� �����������). � ���� ��������� ������������ ���� ����� ���� ������������ ��� ������� ������� Block �� ��������� Blocks:
Dim objB As Block
For Each objB In Blocks
Debug.Print objB.Name
Next objB
����, ��� ���� ������ ��� �� ��������������, �� �� ������ ������ ��� ������������� ����. ��������� For Each. . .Next ����� �������� ����� ���������� ��������, ��������� ����� ������ ������� � ������� ��������, �������� � ���������.
����� ��� ����� ������������ ���� � ������� � ������, ������ ���� ��� �� ����������.
����� ��������� ������������ �������� �� ��������� � ������ ����������� ������� � ���������, ����������� ������ ��������� For Each. . .Next �������� If. . .Then.
����� ������� If… Then ��������� ������ ����� �����, ������ ������ ������ ������������, � ����� ������� ����� �� ����� ��������� �������� Exit For.
����� ����������� � ��������� Blocks �� AutoCAD, ���������� ��������� ������:
Dim obj� As Block
For Each objK In Blocks
If objK.Name = "������"
objK.Delete
Exit For
End If
Next objK
� ���� ������� ��������� ����������� If. . . Then ������������ ��� ����, ����� ���������� ������ Block � ������ «������» ����� ���� �������� Block � ��������� Blocks.
����� ����- � ������ ����� ����- ��� ������ Block ������, ����������� ��������� ������ ��������� If… Then. «�����������» ����� ���������, ������� �������, � ������� �� ����������, ������� ������� ������ Block. ������ ���������. ���� ������ �� �����, ������� Exit For ��������� ���, � ��������� ����� ���������� ���� ������.
With Statement in Excel VBA
In this article, we will see an outline on Excel VBA With. With is a statement in programming languages. It is one of the most commonly used statement which is used with an END statement. The object which is referred to is mentioned after the with keyword and the whole process is ended with End With statement. A VBA With Statement cannot be without an end with a statement so it is mandatory to close the series of statements. The key feature of the with the statement is that we can access the properties of the object without referring to the object multiple times. The method to access the properties of the object lies in the dot keyword. When we put a dot keyword we can see a multiple number of options to access the properties of the object. Let us learn how to use With statement in some of the examples below.
How to Use With Statement in Excel VBA?
We will learn how to use the With Statement in Excel by using the VBA Code.
You can download this VBA With Excel Template here – VBA With Excel Template
VBA With – Example #1
Let us first begin with a basic example in which we will use the With statement for accessing the range value of an object and then assign a custom value to it. For this, follow the steps below:
Step 1: Insert a new module inside Visual Basic Editor (VBE). Click on Insert tab > select Module.
Step 2: Define a new subprocedure within the inserted module that can hold your macro.
Code:
Sub Example1() End Sub
Step 3: Since we are beginning with the most basic with statement.
Code:
Sub Example1() With Range("A1") End Sub
Step 4: When we type a dot (.) we can see a range of different functions associated with the object.
Code:
Sub Example1() With Range("A1") .Value = 15 End Sub
Step 5: Always remember to close the with statement with an End statement.
Code:
Sub Example1() With Range("A1") .Value = 15 End With End Sub
Step 6: Now, run this code by hitting the Run button or F5.
VBA With – Example #2
In this example, we will see how to change one of the fonts or the color of the property of the object. I have some data in Sheet 2 in the cells A1 to C3 in normal black color and I want to change the text font to blue using With Statement. First, let us see the current data in sheet 2 as follows. For this, follow the steps below:
Step 1: Now in the same module declare another subprocedure as follows.
Code:
Sub Example2() End Sub
Step 2: Also we have now more than one sheet in this workbook so let us activate sheet 2 with the following code.
Code:
Sub Example2() Worksheets("Sheet2").Activate End Sub
Step 3: Now declare a variable as Range data type which will store the range for our data as shown below and set the range to the range which has our data in sheet 2.
Code:
Sub Example2() Worksheets("Sheet2").Activate Dim Rng As Range Set Rng = Range("A1:C3") End Sub
Step 4: Access the Font property of the Rng variable using the with statement with the following code shown below.
Code:
Sub Example2() Worksheets("Sheet2").Activate Dim Rng As Range Set Rng = Range("A1:C3") With Rng.Font End Sub
Step 5: Now we can use the dot (.) operator to change the color of the range using the following code and change the color of the text in the cell range.
Code:
Sub Example2() Worksheets("Sheet2").Activate Dim Rng As Range Set Rng = Range("A1:C3") With Rng.Font .Color = vbBlue End Sub
Step 6: Now let us end the with statement with the END WITH statement as follows.
Code:
Sub Example2() Worksheets("Sheet2").Activate Dim Rng As Range Set Rng = Range("A1:C3") With Rng.Font .Color = vbBlue End With End Sub
Step 7: When we execute the code we get the following result in sheet 2.
VBA With – Example #3
In this very basic example, we will see another font feature to manipulate using the With statement. For this example, we have similar text in cells B2 to D5 and they are in normal fonts. We want to change the font to Bold and Italic using the With statement. First, let us look at the data in sheet 3 as follows. For this, follow the steps below:
Step 1: Now in the same module declare another subprocedure as follows.
Code:
Sub Example3() End Sub
Step 2: Also we have now more than one sheet in this workbook so let us activate sheet 3 with the following code.
Code:
Sub Example3() Worksheets("Sheet3").Activate End Sub
Step 3: Now declare a variable as Range data type which will store the range for our data as shown below and set the range to the range which has our data in sheet 3.
Code:
Sub Example3() Worksheets("Sheet3").Activate Dim Rng As Range Set Rng1 = Range("B2:D5") End Sub
Step 4: Access the Font property of the Rng variable using the with statement.
Code:
Sub Example3() Worksheets("Sheet3").Activate Dim Rng As Range Set Rng1 = Range("B2:D5") With Rng1.Font End Sub
Step 5: Now again we use the dot (.) operator in the code to change the font to Bold and Italic.
Code:
Sub Example3() Worksheets("Sheet3").Activate Dim Rng As Range Set Rng1 = Range("B2:D5") With Rng1.Font .Bold = True .Italic = True End Sub
Step 6: Let us end the Statements using the End statement as shown below.
Code:
Sub Example3() Worksheets("Sheet3").Activate Dim Rng As Range Set Rng1 = Range("B2:D5") With Rng1.Font .Bold = True .Italic = True End With End Sub
Step 7: When we execute the above code we can see the result in sheet 3 as follows.
As with the above examples, we can see how important with statement is in our day to day coding. Also, it removes the repetitive steps involved when we are trying to access the properties of an object. We can also use Loop statements in the With statements to define the criteria which we want to access for the object.
How to Use VBA With (Real Example)?
We have seen the basic uses of With statement in the above examples. Now let us use With statement for a real-life problem. We will make a code that will ask for a Name from user and Age, the code will then check the name in the list and paste the value of age beside the corresponding name. The data is in sheet 4 as follows.
So the code we will be using for this as shown below and we will execute it and then understand it step by step.
Code:
Sub Example4() Dim ws As Worksheet Dim FoundCell As Range Dim Name As String, FindThis As String, Age As Integer, k As Integer Set ws = Worksheets("Sheet4") Name = InputBox("Enter The name") Age = InputBox("Enter The Age") FindThis = Name Set FoundCell = ws.Range("A:A").Find(What:=FindThis) k = FoundCell.Row With ws Cells(k, 2).Value = Age End With End Sub
When we execute the code we get the following two pop-ups:
When we press OK for Age we can see the result displayed in Sheet 4 as follows.
Now let us understand the code step by step:
- When we ask the user to input the name the code finds it in column A.
- When the value provided by the user is found the row for the value is stored in a variable.
- Now in the With statement, we use the Cells Properties to change the values adjacent to the cells found with the values with the age provided by the user.
Things to Remember
There are few things which we need to remember about With statement in VBA:
- With Statement starts with referencing the Object property.
- With Statements are always ended with End With Statement.
- The properties of the object are accessed by the dot (.) keyword.
With Statements can also be used with the Loop statements.
Recommended Articles
This is a guide to VBA With. Here we discuss How to Use the With Statement in Excel VBA along with practical examples and downloadable excel template. You can also go through our other suggested articles –
- VBA Collection
- VBA Square Root
- VBA SendKeys
- VBA Name Worksheet