I hate repeating functions, particularly in Excel formulas. Is there any way that I can avoid something like:
=IF( VLOOKUP(A1, B:B, 1, 0) > 10, VLOOKUP(A1, B:B, 1, 0) - 10, VLOOKUP(A1, B:B, 1, 0) )
[The above is just a simple example of the problem, and not a particular formula that I’m working with.]
SandPiper
2,7765 gold badges32 silver badges49 bronze badges
asked Apr 21, 2009 at 10:30
You could define a name for the VLOOKUP part of the formula.
- Highlight the cell that contains this formula
- On the Insert menu, go Name, and click Define
- Enter a name for your variable (e.g. ‘Value’)
- In the Refers To box, enter your VLOOKUP formula:
=VLOOKUP(A1,B:B, 1, 0)
- Click Add, and close the dialog
- In your original formula, replace the VLOOKUP parts with the name you just defined:
=IF( Value > 10, Value - 10, Value )
Step (1) is important here: I guess on the second row, you want Excel to use VLOOKUP(A2,B:B, 1, 0)
, the third row VLOOKUP(A3,B:B, 1, 0)
, etc. Step (4) achieves this by using relative references (A1
and B:B
), not absolute references ($A$1
and $B:$B
).
Note:
For newer Excel versions with the ribbon, go to Formulas ribbon -> Define Name. It’s the same after that. Also, to use your name, you can do «Use in Formula», right under Define Name, while editing the formula, or else start typing it, and Excel will suggest the name (credits: Michael Rusch)
Shortened steps: 1. Right click a cell and click Define name… 2. Enter a name and the formula which you want to associate with that name/local variable 3. Use variable (credits: Jens Bodal)
answered Apr 21, 2009 at 10:52
Tim RobinsonTim Robinson
53.2k10 gold badges119 silver badges137 bronze badges
5
Now you can use the function LET to declare variables within Excel formulas.
This function is available since Jun 2020 for Microsoft 365 users.
Given your example, the formula will be:
=LET(MyFunc,VLOOKUP(A1,B:B,1,0), IF(MyFunc > 10, MyFunc - 10, MyFunc ) )
The 1st argument is the variable name and the 2nd argument is the function or range. You can add more pairs of arguments variable, function/range.
After adding the variables, the last argument will be your formula of interest — calling the variables you just created.
For more information, please access the Microsoft webpage here.
answered Jan 13, 2021 at 14:24
1
You could store intermediate values in a cell or column (which you could hide if you choose)
C1: = VLOOKUP(A1, B:B, 1, 0)
D1: = IF(C1 > 10, C1 - 10, C1)
answered Apr 21, 2009 at 10:35
Patrick McDonaldPatrick McDonald
63.7k14 gold badges106 silver badges118 bronze badges
1
Two options:
VLOOKUP
function in its own cell:=VLOOKUP(A1, B:B, 1, 0)
(in say, C1), then formula referencing C1:=IF( C1 > 10, C1 - 10, C1 )
- create a UDF:
Function MyFunc(a1, a2, a3, a4)
Dim v as Variant
v = Application.WorksheetFunction.VLookup(a1, a2, a3, a4)
If v > 10 Then
MyFunc = v - 10
Else
MyFunc = v
End If
End Function
answered Apr 21, 2009 at 10:34
codeapecodeape
96.9k24 gold badges156 silver badges184 bronze badges
Yes. But not directly.
Simpler way
- You could post Vlookup() in one cell and use its address in where required. — This is perhaps the only direct way of using variables in Excel.
OR
- You could define Vlookup(reference)-10 as a wrapper function from within VBE Macros. Press Alt+f12 and use that function
answered Apr 21, 2009 at 10:40
lprsdlprsd
83.6k47 gold badges135 silver badges168 bronze badges
Defining a NAME containing the lookup is a neat solution, HOWEVER, it always seems to store the sheet name with the cell reference. However, I think if you delete the sheet name in the » quotes but leave the «!», it may work.
answered Aug 25, 2016 at 10:52
0
There isn’t a way to define a variable in the formula bar of Excel. As a workaround you could place the function in another cell (optionally, hiding the contents or placing it in a separate sheet). Otherwise you could create a VBA function.
answered Apr 21, 2009 at 10:39
JeremyJeremy
6,5402 gold badges25 silver badges33 bronze badges
Not related to variables, your example will also be solved by MOD
:
=Mod(VLOOKUP(A1, B:B, 1, 0);10)
eckes
63.5k29 gold badges169 silver badges199 bronze badges
answered Sep 13, 2012 at 14:33
1
I know it’s a little off-topic, but following up with the solution presented by Jonas Bøhmer, actually I think that MOD is the best solution to your example.
If your intention was to limit the result to one digit, MOD is the best approach to achieve it.
ie. Let’s suppose that VLOOKUP(A1, B:B, 1, 0) returns 23. Your IF formula would simply make this calculation: 23 — 10 and return 13 as the result.
On the other hand, MOD(VLOOKUP(A1, B:B, 1, 0), 10) would divide 23 by 10 and show the remainder: 3.
Back to the main topic, when I need to use a formula that repeats some part, I usually put it on another cell and then hide it as some people already suggested.
answered Apr 18, 2013 at 14:32
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Еще…Меньше
Функция LET присваивает имена результатам вычисления. Это позволяет сохранять промежуточные расчеты, значения и определять имена в формуле. Такие имена работают только в области действия функции LET. Как и в программировании переменных, LET выполняется с помощью родного синтаксиса формул Excel.
Чтобы использовать функцию LET в Excel, вам нужно определить пару имен и связанных с ними значений, а также вычисление, которое их использует. Необходимо задать хотя бы одну пару имя-значение (переменную). Функция LETподдерживает до 126 таких пар.
Преимущества
-
Повышенная производительность. Если вы несколько раз записываете в формулу одно и то же выражение, Excel вычисляет результат то же количество раз. Функция LET позволяет вызывать выражение по имени, чтобы выполнить вычисление.
-
Простое чтение и составление Вам больше не нужно помнить, на какой диапазон или ячейку ссылалось выражение, что именно оно делало, а также копировать несколько раз одно выражение. Возможность объявлять и называть переменные позволяет делать формулы более понятными и наглядными для вас и тех, кто будет ими пользоваться.
=LET(имя1, значение_имени1, вычисление_или_имя2, [значение_имени2, вычисление_или_имя3…])
Аргумент |
Описание |
---|---|
имя1 Обязательно |
Первое имя, которое нужно назначить Должно начинаться с буквы. Не может быть выводом формулы или конфликтовать с синтаксисом диапазона. |
значение_имени1 Обязательно |
Значение, которое присваивается аргументу «имя1». |
вычисление_или_имя2 Обязательно |
Одно из следующих значений:
|
значение_имени2 Необязательно |
Значение, присваиваемое аргументу «вычисление_или_имя2». |
вычисление_или_имя3 Необязательно |
Одно из следующих значений:
|
Примечания:
-
Последний аргумент должен быть вычислением, которое возвращает результат.
-
Имена переменных выравниваются по допустимым именам, которые можно использовать в диспетчере имен. Например, «a» является допустимым, а «c» нет, так как оно конфликтует со ссылками на стили R1C1.
Примеры
Пример 1
Рассмотрим простое выражение «СУММ(x; 1)», где x — это именованная переменная, которой можно присвоить значение (в данном случае x присвоено значение 5).
=LET(x, 5, СУММ(x, 1))
При вводе данных в ячейку эта формула возвращает значение 6.
Пример 2
Предположим, что у вас есть необработанные данные о продажах, и вы хотите отфильтровать данные, чтобы показать результаты одного человека, а затем добавить тире в пустые ячейки.
Неотфильтрованные данные |
Отфильтрованные данные |
---|---|
|
|
Хотя это можно сделать и без функции LET, использование функции LET позволяет повысить удобочитаемость формулы, а также в два раза быстрее рассчитать результат, чем без функцииLET.
Образец данных
Если вы хотите проделать это самостоятельно, скопируйте приведенную ниже таблицу в ячейку A1 пустого листа.
Представитель |
Область |
Продукт |
Доход |
Светлана |
Восточный |
Apple |
10,33 ₽ |
Максим |
Южный |
Бананы |
90,90 ₽ |
Светлана |
Западный |
Манго |
10,85 ₽ |
Максим |
Северный |
80,20 ₽ |
|
Максим |
Западный |
Бананы |
10,25 ₽ |
Светлана |
Восточный |
Apple |
70,72 ₽ |
Максим |
Северный |
Манго |
50,54 ₽ |
Исходная формула
=ЕСЛИ(ЕПУСТО(ФИЛЬТР(A2:D8;A2:A8=»Максим»)); «-«;ФИЛЬТР(A2:D8;A2:A8=»Максим»))
Формула с использованием LET
=LET(КритерийФильтра;«Максим»; ФильтрДиапазона; ФИЛЬТР(A2:D8;A2:A8=КритерийФильтра); ЕСЛИ(ПУСТО(ФильтрДиапазона);»-«; ФильтрДиапазона))
Нужна дополнительная помощь?
Главной особенностью программы Excel является возможность выполнять различные вычисления в таблицах с данными. Вычисления могут быть как простыми (с применением элементарных арифметических операций), так и сложными (с применением математических, экономических, статистических или логических функций).
Содержание
- 1
Использование формул - 2
Простейшие формулы - 3
Виды ссылок - 4
Математические операции- 4.1
Математические операторы Excel
- 4.1
Использование формул
Ячейка, помимо текстовых и числовых данных, может содержать формулу . В этом случае в ячейке будет отображаться результат вычисления. Говоря на языке Excel, ячейка будет возвращать результат вычисления. Формула состоит из констант, переменных, а также математических операторов. В качестве переменных в формуле используются адреса ячеек. В саму формулу, соответственно, будет подставляться значение, содержащееся в указанной ячейке.
Простейшие формулы
Рассмотрим простой пример, в котором будем использовать таблицу, представленную на рис. 5.27.
В таблице приведен перечень канцелярских товаров с указанием цены за единицу товара и количества каждого товара. Нам нужно рассчитать стоимость каждого товара и вывести итоговую сумму, то есть вычислить, сколько денег понадобится для закупки всего набора то варов.
Обратите внимание, к ячейкам столбца Цена применен формат Денежный. Данный формат добавляет к указанному числу 2 десятичных знака и обозначение денежной единицы. Такой же формат применен и к ячейкам столбца Стоимость, но на текущий момент эти ячейки пусты. В ячейки столбца Стоимость нужно добавить формулы, вычисляющие стоимость каждого товара. Это очень простые формулы, в которых нужно умножить цену единицы товара на его количество. В качестве переменных будут использоваться ячейки из столбцов Цена и Количество. Итак, начнем.
- Создайте таблицу, аналогичную приведенной на рис. 5.37.
- Выделите ячейку D2, в которой должна рассчитываться стоимость первого товара.
- Введите знак = (равно). Ввод любой формулы начинается с этого знака.
- Щелкните мышью по ячейке B2. Она будет выделена пунктирной рамкой, и адрес указанной ячейки окажется вставлен в формулу.
- Введите знак * (звездочку). Это оператор умножения.
- Щелкните мышью по ячейке C2. Адрес этой ячейки будет вставлен в формулу. Формула в ячейке D2 должна иметь вид =B2*C2.
- Нажмите клавишу Enter, чтобы завершить ввод формулы (рис. 5.38).
Как только вы завершили ввод формулы, в ячейке D2 мгновенно появился результат вычисления. Значение, указанное в ячейке B2, было умножено на значение, указанное в ячейке C2, и результат умножения был возвращен ячейкой D2 (ячейкой, в которой находится формула). Выделите ячейку D2. Обратите внимание, в выделенной ячейке отображается результат вычисления. Но если вы посмотрите на строку формул, то увидите в ней формулу, содержащуюся в ячейке. Таким образом, в этой строке вы можете редактировать формулу. Также обратите внимание, что мы не вводили адреса ячеек в формулу вручную. Вместо этого мы просто выделяли ячейки, адреса которых нужно подставить в формулу. Тем не менее ручной ввод адресов тоже допускается.
Итак, мы создали формулу, высчитывающую стоимость первого товара. Аналогичную формулу нужно добавить и в остальные ячейки столбца D. Но делать это вышеописанным методом нецелесообразно. В нашем примере используется таблица с несколькими строками, но на практике таких строк может быть несколько сотен. Поэтому нам нужно скопировать уже созданную формулу в остальные ячейки столбца D. Делается это просто.
- Выделите ячейку D2, то есть ячейку, в которой содержится формула.
- Нажмите кнопку Копировать в группе Буфер обмена на вкладке Главная (или нажмите сочетание клавиш Ctrl+C). По периметру ячейки появится пунктирная рамка и содержимое ячейки (именно формула, а не возвращенный ей результат), будет помещено в буфер обмена.
- Выделите ячейки D3:D9, то есть ячейки, в которые нужно добавить формулу.
- Нажмите кнопку Вставить в группе Буфер обмена на вкладке Главная (или сочетание клавиш Ctrl+V). Формула будет вставлена во все выделенные ячейки, и в них мгновенно отобразится результат вычисления (рис. 5.39).
Виды ссылок
Теперь рассмотрим одну особенность, которая позволяет тиражировать формулу сразу в несколько ячеек. Выделите ячейку D3 и посмотрите на строку формул. Вы увидите, что в ячейке содержится формула =B3*C3. Выделите ячейку D7 и убедитесь, что в ней содержится формула =B7*C7. Как так получилось, если мы копировали в буфер формулу =B2*C2?
Дело в том, что Excel распознает смещение формулы в другую ячейку и автоматически применяет это смещение ко всем переменным в формуле. Таким образом, программа считает, что, если вы копируете формулу из второй строки (и в формуле участвуют переменные из второй строки) в третью строку, значит, и к переменным в формуле нужно применить аналогичное смещение. То есть адреса ячеек меняются, например, C2 на C3, C4, C5 и т. д. Это свойство позволяет копировать ранее созданную формулу в сотни ячеек одновременно, не заботясь о корректировке переменных. Ссылки, которые автоматически корректируются при копировании формулы в другие ячейки, называются относительными.
Однако в ряде случаев в формуле нужно использовать строго определенную переменную, которая не должна менять своего адреса при копировании формулы в другую ячейку. Предположим, что в нескольких строках должно выполняться однотипное вычисление, но в нем используется переменная из строго заданной ячейки (пусть, например, это будет отдельно расположенная от таблицы ячейка, в которой указан курс валюты). В этом случае необходимо указать абсолютную ссылку.
Предположим, что стоимость товара нужно еще разделить на курс валюты, который указан в единственной отдельно расположенной ячейке E2. Если мы создадим формулу вида =(B2*C2)/E2, то при копировании формулы в третью строку она будет преобразована в =(B3*C3)/E3, что приведет к неверному результату вычисления, поскольку курс валюты указан только в ячейке E2 и нигде больше. Поэтому в формуле =(B2*C2)/E2 нужно заменить относительный адрес ячейки E2 на абсолютный. В абсолютном адресе перед заголовком столбца и номером строки вводится знак $. То есть, чтобы добавить в формулу абсолютный адрес ячейки E2, нужно ввести $E$2, чтобы формула приняла вид =(B2*C2)/$E$2. Теперь при копировании формулы в третью строку, формула будет преобразована в =(B3*C3)/$E$2. Как видите, относительные ссылки в формуле изменились в соответствии со смещением позиции формулы на листе, но ссылка на ячейку с курсом валюты осталась неизменной.
Существуют также смешанные ссылки . Это ссылки, в которых одна из координат является абсолютной, а другая — относительной. Пример: $E2 и E$2. В первом случае столбец в ссылке остается неизменным при любых обстоятельствах, в то время как номер строки может меняться при смещении формулы. Во втором случае, наоборот, строка ссылки закреплена, в то время как столбец в адресе ячейки может меняться. Знак $ для добавления в формулу абсолютной ссылки можно не вводить вручную. При добавлении в формулу ссылки методом выделения соответствующей ячейки, нажмите после выделения ячейки клавишу F4. Каждое нажатие клавиши будет последовательно менять ссылку на абсолютную, смешанную и относительную.
Математические операции
Любая математическая формула в ячейке создается достаточно просто. Вы вводите формулу точно так же, как писали бы ее на бумаге, только вместо переменных подставляете адреса ячеек, в которых они находятся. Предположим, нам нужно создать формулу вида D=1,25*A/(В+С)*2.
Разберем эту формулу. D — это результат вычисления формулы. Этот результат будет выводиться в ячейке, в которой расположена формула. То есть в электронной версии формулы нам данная буква не нужна. 1,25 и 2 — постоянные числа в формуле, то есть константы. Соответственно, они остаются неизменными. А, В и С — переменные. Эти числа могут меняться, что повлияет на результат вычисления. В электронном виде в качестве переменных используются ячейки. Предположим, что переменная А находится в ячейке C2, B — в ячейке D2, а C — в ячейке E2. Таким образом, формула в ячейке Excel будет иметь вид =1,25*C2/(D2+E2)*2.
Согласитесь, все просто. Важно только не запутаться в переменных. Обратите также внимание, что в формулах используются те же правила, что и при выполнении математических операций: операции умножения и деления выполняются в первую очередь, но операции, заключенные в скобки, имеют приоритет. Ниже приведена таблица с математическими операторами, используемыми в Excel. Другие операции, например извлечение квадратного корня или деление с остатком выполняются с помощью функций, которые мы рассмотрим чуть позже.
Математические операторы Excel
Для закрепления материала немного дополним начатый пример. Предположим, что все указанные канцтовары мы закупаем в определенном магазине, где у нас действует скидка. Размер скидки зависит от вида товара, и он нам известен. Нам нужно рассчитать стоимость товаров с учетом скидки. Для этого мы дополним таблицу еще двумя колонками (рис. 5.40).
В колонке Скидка указаны размеры скидки для каждого вида товаров (в процентах). В колонке Стоимость с учетом скидки нужно создать формулу, которая будет высчитывать итоговую стоимость вида товара с вычетом скидки. Формула должна иметь вид =Ст-(Ст/100)*Ск, где Ст — стоимость товара, а Ск — скидка, выраженная в процентах.
- Выделите ячейку F2, то есть первую ячейку в колонке Стоимость с учетом скидки.
- Введите знак = (равно).
- Щелкните мышью по ячейке D2, чтобы подставить в формулу адрес ячейки с возвращенной стоимостью товара.
- Введите знак «минус».
- Введите круглую открывающую скобку.
- Снова щелкните мышью по ячейке D2, чтобы подставить ее в формулу.
- Введите знак деления /.
- Введите 100.
- Введите круглую закрывающую скобку.
- Введите знак умножения *.
- Щелкните мышью по ячейке F2 (первой ячейке в колонке Скидка). Адрес ячейки будет вставлен в формулу. У вас должна получиться формула =D2-(D2/100)*E2 (рис. 5.41).
- Нажмите клавишу Enter, чтобы завершить ввод формулы (рис. 5.42).
В ячейке F2 отображается стоимость товара за вычетом скидки, указанной в ячейке E2. Обратите внимание, в формуле участвует переменная, которая сама по себе является возвращенным результатом. Мы знаем, что в ячейке D2 находится формула, возвращающая стоимость товара, и этот возвращенный результат используется в качестве переменной в формуле в ячейке F2. Нам остается размножить формулу на остальные ячейки столбца Стоимость с учетом скидки.
На чтение 25 мин. Просмотров 12.4k.
Алан Перлис
Постоянная одного человека — переменная другого
Эта статья содержит полное руководство по работе с переменными и использованию VBA Dim.
Первый раздел содержит краткое руководство по использованию оператора
Dim, включая примеры и формат оператора Dim.
Остальная часть поста содержит наиболее полное руководство, которое вы
найдете в VBA Dim Statement.
Если вы заинтересованы в объявлении параметров, вы можете прочитать о
них здесь.
Содержание
- Краткое руководство по использованию VBA Dim Statement
- Полезные ссылки
- Что такое VBA Dim Statement?
- Формат VBA Dim Statement
- Как использовать Dim с несколькими переменными
- Где я должен поместить Dim Statement?
- Использование Dim в циклах
- Могу ли я использовать Dim для присвоения значения?
- Dim действительно требуется?
- Использование Dim с Basic Variables
- Использование Dim с Variants
- Использование Dim с Objects
- Использование Dim с Arrays
- Устранение неполадок ошибок Dim
- Локальные и глобальные переменные
- Заключение
Краткое руководство по использованию VBA Dim Statement
Описание | Формат | Пример |
Базовая переменная |
Dim [имя переменной] As [Тип] |
Dim count As Long Dim amount As Currency Dim name As String Dim visible As Boolean |
Фиксированная строка |
Dim [имя переменной] As String *[размер] |
Dim s As String * 4 Dim t As String * 10 |
Вариант | Dim [имя переменной] As Variant Dim [имя переменной] |
Dim var As Variant Dim var |
Объект использует Dim и New |
Dim [имя переменной] As New [тип объекта] |
Dim coll As New Collection Dim coll As New Class1 |
Объект использует Dim и New |
Dim [имя переменной] As [тип объекта] Set [имя переменной] = New [тип объекта] |
Dim coll As Collection Set coll = New Collection Dim coll As Class1 Set coll = New Class1 |
Статический массив |
Dim [имя переменной] ([первый] To [последний] ) As[Тип] |
Dim arr(1 To 6) As Long |
Динамический массив |
Dim [имя переменной]() As [Тип] ReDim [имя переменной] ([первый] To [последний]) |
Dim arr() As Long ReDim arr(1 To 6) |
Внешняя библиотека (Раннее связывание) * |
Dim [имя переменной] As New [пункт] |
Dim dict As New Dictionary |
Внешняя библиотека (Раннее связывание с использованием Set) * |
Dim [имя переменной] As [пункт] Set [имя переменной] = New [пункт] |
Dim dict As Dictionary Set dict = New Dictonary |
Внешняя библиотека (Позднее связывание) |
Dim [имя переменной] As Object Set [имя переменной] = CreateObject («[библиотека]») |
Dim dict As Object Set dict = CreateObject(«Scripting. Dictionary») |
* Примечание. Для раннего связывания необходимо добавить
справочный файл с помощью меню «Инструменты» -> «Ссылки». Смотрите здесь,
как добавить ссылку на Dictonary.
Полезные ссылки
- Объявление параметров в подпрограмме или функции
- Использование объектов в VBA
- Массивы VBA
- Коллекции VBA
- Словарь VBA
- VBA Workbook
- VBA Worksheet
Что такое VBA Dim Statement?
Ключевое слово Dim — это сокращение от Dimension. Он
используется для объявления переменных в VBA.
Объявление означает, что мы говорим VBA о переменной,
которую будем использовать позже.
Существует четыре типа Dim Statement. Все они очень похожи по синтаксису.
Вот они:
- Basic variable
- Variant
- Object
- Array
Ниже приводится краткое описание каждого типа
- Basic variable — этот тип переменной содержит одно значение. Это такие типы, как Long, String, Date, Double, Currency.
- Variant — VBA решает во время выполнения, какой тип будет использоваться. Вы должны избегать вариантов, где это возможно, но в некоторых случаях требуется их использование.
- Object — это переменная, которая может иметь несколько методов (то есть подпрограмм / функций) и несколько свойств (то есть значений). Есть 3 вида:
Объекты Excel, такие как объекты Workbook, Worksheet и Range.
Пользовательские объекты, созданные с использованием модулей классов.
Внешние библиотеки, такие как Словарь. - Array — это группа переменных или объектов.
В следующем разделе мы рассмотрим формат оператора VBA Dim с
некоторыми примерами каждого из них.
В последующих разделах мы рассмотрим каждый тип более
подробно.
Формат VBA Dim Statement
Формат выражения Dim показан ниже.
' 1. BASIC VARIABLE ' Объявление основной переменной Dim [Имя переменной] As [тип] ' Объявление фиксированной строки Dim [Имя переменной] As String * [размер] ' 2. VARIANT Dim [Имя переменной] As Variant Dim [Имя переменной] ' 3. OBJECT ' Объявление объекта Dim [Имя переменной] As [тип] ' Объявление и создание объекта Dim [Имя переменной] As New [тип] ' Объявление объекта с использованием позднего связывания Dim [Имя переменной] As Object ' 4. ARRAY ' Объявление статического массива Dim [Имя переменной](first To last) As [тип] ' Объявление динамического массива Dim [Имя переменной]() As [тип] Ниже приведены примеры использования различных форматов. Sub Primeri() ' 1. BASIC VARIABLE ' Объявление основной переменной Dim name As String Dim count As Long Dim amount As Currency Dim eventdate As Date ' Объявление фиксированной строки Dim userid As String * 8 ' 2. VARIANT Dim var As Variant Dim var ' 3. OBJECT ' Объявление объекта Dim sh As Worksheet Dim wk As Workbook Dim rg As Range ' Объявление и создание объекта Dim coll1 As New Collection Dim o1 As New Class1 ' Объявление объекта - создайте объект ниже, используя Set Dim coll2 As Collection Dim o2 As Class1 Set coll2 = New Collection Set o2 = New Class1 ' Объявление и присвоение с использованием позднего связывания Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") ' 4. ARRAY ' Объявление статического массива Dim arrScores(1 To 5) As Long Dim arrCountries(0 To 9) As String ' Объявление динамического массива - установите размер ниже, используя ReDim Dim arrMarks() As Long Dim arrNames() As String ReDim arrMarks(1 To 10) As Long ReDim arrNames(1 To 10) As String End Sub
Мы рассмотрим эти различные типы операторов Dim в следующих
разделах.
Как использовать Dim с несколькими переменными
Мы можем объявить несколько переменных в одном выражении Dim.
Dim name As String, age As Long, count As Long
Если мы опускаем тип, то VBA автоматически устанавливает тип как Variant. Мы увидим больше
о Variant позже.
' Сумма является вариантом Dim amount As Variant ' Сумма является вариантом Dim amount ' Адрес это вариант - имя это строка Dim name As String, address ' имя - это вариант, адрес – строка Dim name, address As String
Когда вы объявляете несколько переменных, вы должны указать тип каждой отдельно.
Dim wk As Workbook, marks As Count, name As String
Вы можете поместить столько переменных, сколько захотите, в
одном выражении Dim, но
для удобства чтения рекомендуется оставить его равным 3 или 4.
Где я должен поместить Dim Statement?
Оператор Dim может быть помещен в любое место кода. Тем не менее, он должен предшествовать любой строке, где используется переменная.
Если переменная используется перед оператором Dim, вы получите ошибку
«переменная не определена»
Когда дело доходит до позиционирования ваших Dim утверждений, вы можете сделать это двумя основными способами. Вы можете разместить все свои Dim заявления в верхней части процедуры.
Sub DimVverh() ' Размещение всех Dim statements наверху Dim count As Long, name As String, i As Long Dim wk As Workbook, sh As Worksheet, rg As Range Set wk = Workbooks.Open("C:ДокументыОтчет.xlsx") Set sh = wk.Worksheets(1) Set rg = sh.Range("A1:A10") For i = 1 To rg.Rows.count count = rg.Value Debug.Print count Next i End Sub
ИЛИ вы можете объявить переменные непосредственно перед их
использованием:
Sub DimIsp() Dim wk As Workbook Set wk = Workbooks.Open("C:ДокументыОтчет.xlsx") Dim sh As Worksheet Set sh = wk.Worksheets(1) Dim rg As Range Set rg = sh.Range("A1:A10") Dim i As Long, count As Long, name As String For i = 1 To rg.Rows.count count = rg.Value name = rg.Offset(0, 1).Value Debug.Print name, count Next i End Sub
Я лично предпочитаю последнее, так как оно делает код более
аккуратным, и его легче читать, обновлять и обнаруживать ошибки.
Использование Dim в циклах
Помещение оператора Dim в цикл не влияет на переменную.
Когда VBA запускает Sub (или Function), первым делом он
создает все переменные, которые были объявлены в выражениях Dim.
Следующие 2 фрагмента кода практически одинаковы. Во-первых,
переменная Count объявляется перед циклом. Во втором он объявлен в цикле.
Sub CountPeredCiklom() Dim count As Long Dim i As Long For i = 1 To 3 count = count + 1 Next i ' значение счета будет 3 Debug.Print count End Sub
Sub CountPosleCikla() Dim i As Long For i = 1 To 3 Dim count As Long count = count + 1 Next i ' значение счета будет 3 Debug.Print count End Sub
Код будет вести себя точно так же, потому что VBA создаст переменные при
входе в подпрограмму.
Могу ли я использовать Dim для присвоения значения?
В таких языках, как C ++, C # и Java, мы можем объявлять и назначать переменные в одной строке:
' C++ int i = 6 String name = "Иван"
Мы не можем сделать это в VBA. Мы можем использовать оператор двоеточия для размещения
объявлений и назначения строк в одной строке.
Dim count As Long: count = 6
Мы не объявляем и не присваиваем в одной строке VBA. Что мы
делаем, это помещаем эти две строки (ниже) в одну строку в редакторе. Что
касается VBA, это две отдельные строки, как здесь:
Dim count As Long count = 6
Здесь мы помещаем 3 строки кода в одну строку редактора,
используя двоеточие:
count = 1: count = 2: Set wk = ThisWorkbook
Нет никаких преимуществ или недостатков в назначении и
объявлении в одной строке редактора. Все сводится к личным предпочтениям.
Dim действительно требуется?
Ответ в том, что это не обязательно. VBA не требует от вас
использовать Dim Statement.
Однако не использовать оператор Dim — плохая практика и
может привести к множеству проблем.
Вы можете использовать переменную без предварительного
использования оператора Dim. В этом случае переменная автоматически будет типом
варианта.
Это может привести к таким проблемам, как
- Все переменные являются вариантами (проблемы с
этим см. В разделе «Варианты»). - Некоторые переменные ошибки останутся
незамеченными.
Из-за этих проблем рекомендуется сделать использование Dim
обязательным в нашем коде. Мы делаем это с помощью оператора Option Explicit.
Option Explicit
Мы можем сделать Dim
обязательным в модуле, набрав «Option Explicit» в верхней части модуля.
Мы можем сделать это автоматически в каждом новом модуле,
выбрав Tools-> Options из меню и отметив флажок «Требовать декларацию
переменной». Затем, когда вы вставите новый модуль, «Option Explicit» будет
автоматически добавлен в начало.
Давайте посмотрим на некоторые ошибки, которые могут
остаться незамеченными, если мы не будем использовать Dim.
Ошибки Переменной
В приведенном ниже коде мы используем переменную Total без использования оператора Dim.
Sub BezDim() Total = 6 Total = Total + 1 Debug.Print Total End Sub
Если мы случайно написали Total неправильно, VBA сочтет это
новой переменной.
В приведенном ниже коде мы неправильно написали переменную Total как Totall.
Sub BezDimOshibki() Total = 6 ' Первый Total - это ошибка Totall = Total + 1 ' напечатает 6 вместо 7 Debug.Print Total End Sub
VBA не обнаружит ошибок в коде, и будет напечатано неверное
значение.
Давайте добавим Option Explicit и попробуйте приведенный
выше код снова
Option Explicit Sub BezDimOshibki() Total = 6 ' Первый Total - это ошибка Totall = Total + 1 ' Напечатает 6 вместо 7 Debug.Print Total End Sub
Теперь, когда мы запустим код, мы получим ошибку «Переменная
не определена». Чтобы эта ошибка не появлялась, мы должны использовать Dim для каждой переменной,
которую мы хотим использовать.
Когда мы добавим оператор Dim для Total
и запустим код, мы получим ошибку, сообщающую, что опечатка Totall не была определена.
Это действительно полезно, так как помогает нам найти
ошибку, которая в противном случае осталась бы незамеченной.
Ошибка в ключевом слове
Вот второй пример, который более тонкий.
Когда следующий код выполняется, он должен изменить шрифт в
ячейке A1 на синий.
Однако, когда код запускается, ничего не происходит.
Sub ZadatCvet() Sheet1.Range("A1").Font.Color = rgblue End Sub
Ошибка здесь в том, что rgblue должен быть rgbBlue. Если вы
добавите Option Explicit в модуль, появится ошибка «переменная не определена».
Это значительно облегчает решение проблемы.
Эти два примера очень просты. Если у вас много кода, то
подобные ошибки могут стать кошмаром для отслеживания.
Использование Dim с Basic Variables
VBA имеет те же основные типы переменных, которые
используются в электронной таблице Excel.
Вы можете увидеть список всех типов переменных VBA здесь.
Тем не менее, большую часть времени вы будете использовать следующие:
Тип | Хранение | Диапазон | Описание |
Boolean | 2 байта | ИСТИНА или ЛОЖЬ | Эта переменная может быть ИСТИНА или ЛОЖЬ. |
Long | 4 байта | от -2,147,483,648 до 2,147,483,647 |
Long — это сокращение от Long Integer. Используйте это вместо типа Integer * |
Currency | 8 байт | от -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений |
Аналогично Double, но имеет только 4 знака после запятой |
Double | 8 байт | от -922,337,203,685,477.5808 до 922,337,203,685,477.5807 |
|
Date | 8 байт | С 1 января 100 по 31 декабря 9999 |
|
String | меняется | От 0 до примерно 2 миллиардов |
Содержит текст |
* Первоначально мы использовали бы тип Long вместо Integer,
потому что Integer был 16-разрядным, и поэтому диапазон был от -32 768 до 32
767, что довольно мало для многих случаев использования целых чисел.
Однако в 32-битной (или выше) системе целое число автоматически
преобразуется в длинное. Поскольку Windows была 32-битной начиная с Windows 95
NT, нет смысла использовать Integer.
В двух словах, всегда используйте Long для целочисленного
типа в VBA.
Фиксированный тип строки
В VBA есть один необычный тип базовой переменной, с которым
вы, возможно, не знакомы.
Это фиксированный тип строки. Когда мы создаем нормальную строку в VBA, мы можем добавить текст, и VBA автоматически изменит размер строки для нас.
Sub TipStroki() Dim s As String ' s is "Иван Петров" s = "John Smith" ' s is "Игорь" s = "Tom" End Sub
Фиксированная строка никогда не изменяется. Эта строка
всегда будет иметь одинаковый размер независимо от того, что вы ей назначаете
вот несколько примеров:
Sub FiksStroka() Dim s As String * 4 ' s is "Иван" s = "Иван Перов" ' s = "Игорь " s = "Игорь" End Sub
Использование Dim с Variants
Когда мы объявляем переменную как вариант, VBA решает во время выполнения, какой
тип переменной должен быть.
Мы объявляем варианты следующим образом
' Оба варианта Dim count Dim count As Variant Это звучит как отличная идея в теории. Больше не нужно беспокоиться о типе переменной Sub IspVariants() Dim count As Variant count = 7 count = "Иван" count = #12/1/2018# End Sub
Однако использование вариантов является плохой практикой, и
вот почему:
- VBA
не будет замечать неправильных ошибок типа (т. Е. Несоответствие данных). - Вы не можете получить доступ к Intellisense.
- VBA
угадывает лучший тип, и это может быть не то, что вы хотите.
Тип ошибки
Ошибки твои друзья!
Они могут раздражать и расстраивать, когда они случаются, но
они предупреждают вас о будущих проблемах, которые не так легко найти.
Ошибка несоответствия типов предупреждает вас, когда используются неверные данные.
Например. Представьте, что у нас есть лист оценок учеников.
Если кто-то случайно (или намеренно) заменит метку на текст, данные будут
недействительными.
Если мы используем вариант для хранения меток, то ошибки не
возникнет
Sub MarksVariant() Dim marks As Variant Dim i As Long For i = 1 To 10 ' Прочитайте отметку mark = Sheet1.Range("A" & i).Value Next End Sub
Это не хорошо, потому что в ваших данных есть ошибка, а вы
не знаете об этом.
Если вы зададите переменную Long, VBA сообщит вам об ошибке
«Несоответствие типов», если значения являются текстовыми.
Sub MarksLong() Dim mark As Long Dim i As Long For i = 1 To 10 ' Прочитайте отметку mark = Sheet1.Range("A" & i).Value Next End Sub
Доступ к Intellisense
Intellisense — удивительная особенность VBA. Он дает вам
доступные параметры в зависимости от типа, который вы создали.
Представьте, что вы объявляете переменную листа, используя
Dim
Когда вы используете переменную wk с десятичной точкой, VBA
автоматически отобразит доступные опции для переменной.
Вы можете увидеть Intellisense на скриншоте ниже
Если вы используете Variant как тип, то Intellisense будет
недоступен
Это потому, что VBA не будет знать тип переменной до времени
выполнения.
Использование Dim с Objects
Если вы не знаете, что такое Objects, вы можете прочитать
мою статью об VBA Objects здесь.
Есть 3 типа объектов:
- Объекты Excel
- Объекты модуля класса
- Внешние объекты библиотеки
Примечание. Объект VBA Collection используется аналогично тому, как мы используем объект Class Module. Мы используем новое, чтобы создать его.
Давайте посмотрим на каждый из них по очереди.
Объекты Excel
Объекты Excel, такие как Рабочая книга, Рабочий лист,
Диапазон и т. Д., Не используют Новый, поскольку они автоматически создаются
Excel. Смотрите, «когда New не требуется».
При создании или открытии книги Excel автоматически создает
связанный объект.
Например, в приведенном ниже коде мы открываем рабочую
книгу. VBA создаст объект, а функция Open вернет книгу, которую мы можем
сохранить в переменной
Sub OtkrWorkbook() Dim wk As Workbook Set wk = Workbooks.Open("C:ДокументыОтчет.xlsx") End Sub
Если мы создадим новый лист, произойдет похожая вещь. VBA
автоматически создаст его и предоставит доступ к объекту.
Sub DobavSheet() Dim sh As Worksheet Set sh = ThisWorkbook.Worksheets.Add End Sub
Нам не нужно использовать ключевое слово New для этих объектов Excel.
Мы просто присваиваем переменную функции, которая либо
создает новый объект, либо дает нам доступ к существующему.
Вот несколько примеров назначения переменных Workbook, Worksheet и range
Sub DimWorkbook() Dim wk As Workbook ' назначить wk новой книге Set wk = Workbooks.Add ' назначить wk первой открытой книге Set wk = Workbooks(1) ' назначить wk рабочей книге Отчет.xlsx Set wk = Workbooks("Отчет.xlsx") ' назначить wk активной книге Set wk = ActiveWorkbook End Sub
Sub DimWorksheet() Dim sh As Worksheet ' Назначить sh на новый лист Set sh = ThisWorkbook.Worksheets.Add ' Назначьте sh на крайний левый лист Set sh = ThisWorkbook.Worksheets(1) ' Назначьте sh на лист под названием «Клиенты» Set sh = ThisWorkbook.Worksheets("Клиенты") ' Присвойте sh активному листу Set sh = ActiveSheet End Sub
Sub DimRange() ' Получить рабочий лист клиента Dim sh As Worksheet Set sh = ThisWorkbook.Worksheets("Клиенты") ' Объявите переменную диапазона Dim rg As Range ' Присвойте rg диапазону A1 Set rg = sh.Range("A1") ' Назначьте rg в диапазоне от B4 до F10 Set rg = sh.Range("B4:F10") ' Присвойте rg диапазону E1 Set rg = sh.Cells(1, 5) End Sub
Если вы хотите узнать больше об этих объектах, вы можете ознакомиться со следующими статьями: Workbook VBA, Worksheet VBA и Cell и Range VBA.
Использование Dim с Class Module Objects
В VBA мы используем Class Modules для создания наших собственных пользовательских объектов. Вы можете прочитать все о Class Modules здесь.
Если мы
создаем объект, нам нужно использовать ключевое слово New.
Мы можем сделать это в операторе Dim или в операторе Set.
Следующий код создает объект, используя ключевое слово New в выражении Dim:
' Объявить и создать Dim o As New class1 Dim coll As New Collection
Использование New в выражении Dim означает, что каждый раз
при запуске нашего кода будет создаваться ровно один объект.
Использование Set дает нам больше гибкости. Мы можем создать
много объектов из одной переменной. Мы также можем создать объект на основе
условия.
Этот следующий код показывает, как мы создаем объект Class Module, используя Set. (Чтобы создать модуль класса, перейдите в окно проекта, щелкните правой кнопкой мыши соответствующую книгу и выберите «Вставить модуль класса». Подробнее см. «Создание Simple Class Module».)
' Объявить только Dim o As Class1 ' Создать с помощью Set Set o = New Class1
Давайте посмотрим на пример использования Set. В приведенном ниже коде мы хотим
прочитать диапазон данных. Мы создаем объект только в том случае, если значение
больше 50.
Мы используем Set для создания объекта Class1. Это потому, что количество нужных нам объектов зависит от
количества значений более 50.
Sub IspSet() ' Объявите переменную объекта Class1 Dim o As Class1 ' Читать диапазон Dim i As Long For i = 1 To 10 If Sheet1.Range("A" & i).Value > 50 Then ' Создать объект, если условие выполнено Set o = New Class1 End If Next i End Sub
Я сохранил этот пример простым для ясности. В реальной версии этого кода мы бы заполнили объект Class Module данными и добавили его в структуру данных, такую как Collection или Dictionary.
Вот пример реальной версии, основанной на данных ниже:
' Class Module - clsStudent Public Name As String Public Subject As String ' Стандартный модуль Sub ChitatBalli() ' Создать коллекцию для хранения объектов Dim coll As New Collection ' Current Region получает соседние данные Dim rg As Range Set rg = Sheet1.Range("A1").CurrentRegion Dim i As Long, oStudent As clsStudent For i = 2 To rg.Rows.Count ' Проверьте значение If rg.Cells(i, 1).Value > 50 Then ' Создать новый объект Set oStudent = New clsStudent ' Читать данные на объект студента oStudent.Name = rg.Cells(i, 2).Value oStudent.Subject = rg.Cells(i, 3).Value ' добавить объект в коллекцию coll.Add oStudent End If Next i ' Распечатайте данные в Immediate Window, чтобы проверить их Dim oData As clsStudent For Each oData In coll Debug.Print oData.Name & " studies " & oData.Subject Next oData End Sub
Чтобы узнать больше о Set вы можете заглянуть сюда.
Объекты из внешней библиотеки
Действительно полезная часть VBA — это то, как у нас есть
доступ к внешним библиотекам. Это открывает целый новый мир тому, что мы можем
сделать.
Примерами являются библиотеки Access, Outlook и Word,
которые позволяют нам взаимодействовать с этими приложениями.
Мы можем использовать библиотеки для различных типов
структур данных, таких как Словарь, Массив, Стек и Очередь.
Существуют библиотеки для очистки веб-сайта (библиотека
объектов Microsoft HTML), использования регулярных выражений (регулярные
выражения Microsoft VBScript) и многих других задач.
Мы можем создать эти объекты двумя способами:
- Раннее связывание
- Позднее связывание
Давайте посмотрим на это по очереди.
Раннее связывание
Раннее связывание означает, что мы добавляем справочный
файл. Как только этот файл добавлен, мы можем рассматривать объект как объект
модуля класса.
Мы добавляем ссылку, используя Tools-> Reference, а затем
проверяем соответствующий файл в списке.
Например, чтобы использовать словарь, мы ставим флажок
«Microsoft Scripting Runtime»
Как только мы добавим ссылку, мы можем использовать словарь
как объект модуля класса
Sub RanSvyaz() ' Используйте только Dim Dim dict1 As New Dictionary ' Используйте Dim и Set Dim dict2 As Dictionary Set dict2 = New Dictionary End Sub
Преимущество раннего связывания заключается в том, что у нас
есть доступ к Intellisense. Недостатком является то, что это может вызвать
конфликтные проблемы на других компьютерах.
Лучше всего использовать раннюю привязку при написании кода,
а затем использовать позднюю привязку при распространении кода другим
пользователям.
Позднее связывание
Позднее связывание означает, что мы создаем объект во время
выполнения.
Мы объявляем переменную как тип «Объект». Затем мы
используем CreateObject для создания объекта.
Sub PozdSvyaz() Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") End Sub
Использование Dim с Arrays
В VBA есть два типа массивов:
- Статический — размер массива задается в
операторе Dim и не может изменяться. - Динамический — размер массива не указан в
выражении Dim. Это устанавливается позже с помощью оператора ReDim
' Статический массив ' Магазины 7 длинных - от 0 до 6 Dim arrLong(0 To 6) As Long ' Магазины 7 длинных - от 0 до 6 Dim arrLong(6) As String
Динамический массив дает нам гораздо больше гибкости. Мы
можем установить размер во время выполнения кода.
Мы объявляем динамический массив, используя инструкцию Dim,
и устанавливаем размер позже, используя ReDim.
' Динамический массив ' Объявите переменную Dim arrLong() As Long ' Установить размер ReDim arrLong(0 To 6) As Long
Использование ReDim
Большая разница между Dim и ReDim
заключается в том, что мы можем использовать переменную в выражении ReDim. В операторе Dim размер должен быть
постоянным значением.
Sub IspSet() ' Объявите переменную Dim arrLong() As Long ' Спросите пользователя о размере Dim size As Long size = InputBox("Пожалуйста, введите размер массива.", Default:=1) ' Установите размер на основе пользовательского ввода ReDim arrLong(0 To size) As Long End Sub
На самом деле мы можем использовать оператор Redim без
предварительного использования оператора Dim.
В первом примере вы можете видеть, что мы используем Dim:
Sub IspDimReDim() ' Использование Dim Dim arr() As String ReDim arr(1 To 5) As String arr(1) = "Яблоко" arr(5) = "Апельсин" End Sub
Во втором примере мы не используем Dim:
Sub IspTolkoReDim () ' Использование только ReDim ReDim arr(1 To 5) As String arr(1) = "Яблоко" arr(5) = "Апельсин" End Sub
Преимущество состоит в том, что вам не нужно тусклое
утверждение. Недостатком является то, что это может сбить с толку тех, кто
читает ваш код. В любом случае это не имеет большого значения.
Вы можете использовать ключевое слово Preserve с ReDim для сохранения существующих данных при изменении размера массива. Вы можете прочитать больше об этом здесь.
Вы можете найти все, что вам нужно знать о массивах в VBA здесь.
Устранение неполадок ошибок Dim
В таблице
ниже приведены ошибки, с которыми вы можете столкнуться при использовании Dim. См. Ошибки VBA для
объяснения различных типов ошибок.
Ошибка | Тип | Причина |
Массив уже рассчитан |
Компиляция | Использование Redim для статического массива. |
Ожидаемый: идентификатор |
Синтаксис | Использование зарезервированного слова в качестве имени переменной. |
Ожидаемый: новый тип имени |
Синтаксис | Тип отсутствует в выражении Dim. |
Переменная объекта или переменная блока не установлена |
Время выполнения | New не был использован для создания объекта. |
Переменная объекта или переменная блока не установлена |
Время выполнения | Set не использовался для назначения переменной объекта. |
Пользовательский тип не определен |
Компиляция | Тип не распознан. Это может произойти, если ссылочный файл не добавлен в меню «Инструменты-> Ссылка» или имя модуля класса написано неправильно. |
Недопустимый оператор вне блока Type |
Компиляция | Имя переменной отсутствует в выражении Dim |
Переменная не определена |
Компиляция | Переменная используется перед Dim-строкой. |
Локальные и глобальные переменные
Когда мы используем Dim в процедуре (то есть подпрограмме или функции), она считается
локальной. Это означает, что это доступно только с этой процедурой.
Глобальные переменные объявляются вне процедур. В
зависимости от типа, они могут быть доступны для всех процедур в одном и том же
модуле или для всех процедур во всех модулях в текущей рабочей книге.
В приведенном ниже коде мы объявили count как глобальную переменную:
' Глобальная Dim count As Long Sub UseCount1() count = 6 End Sub Sub UseCount2() count = 4 End Sub
Что произойдет, если у нас будет глобальная переменная и
локальная переменная с одинаковым именем?
На самом деле это не вызывает ошибку. VBA дает приоритет локальной декларации.
' Глобальная Dim count As Long Sub UseCount() ' Локальная Dim count As Long ' Относится к локальному счету count = 6 End Sub
Подобная ситуация может привести только к проблемам, так как
трудно отследить, какой счет используется.
Вообще глобальных переменных следует избегать, где это
возможно. Они делают код очень трудным для чтения, потому что их значения могут
быть изменены в любом месте кода. Это затрудняет обнаружение и устранение ошибок.
Важно знать и понимать глобальные переменные как вы,
поскольку вы можете встретить их в существующем коде.
Dim против Private
В VBA есть ключевое слово Private.
Если мы используем ключевое слово Private с переменной или
подфункцией / функцией, то этот элемент доступен только в текущем модуле.
Использование Dim и Private для переменной дает тот же
результат
' Доступно во всем этом модуле Private priCount As Long Dim dimCount As Long Sub UseCount() ' Доступно только в этом разделе Private priName As String Dim dimName As String End Sub
В VBA принято использовать Private для глобальных переменных
и Dim для локальных
' Доступно во всем этом модуле Private priCount As Long Sub UseCount() ' Только локальный Dim dimName As String End Sub
Local OnlyThere
в VBA есть 2 других
типа объявлений, которые называются Public и Global.
Ниже приводится краткое изложение всех 4 типов:
- Dim
— используется для объявления локальных переменных, т. Е. В процедурах. - Private
— используется для объявления глобальных переменных и процедур. Эти переменные
доступны только для текущего модуля. - Public
— используется для объявления глобальных переменных и процедур. Эти переменные
доступны во всех модулях. - Global
— старая и устаревшая версия Public.
Может использоваться только в стандартных модулях. Он существует только для обратной
совместимости.
Заключение
На этом мы заканчиваем статью о VBA Dim Statement. Если у вас есть
какие-либо вопросы или мысли, пожалуйста, дайте мне знать в комментариях ниже.