Как объявить переменную в vba excel
Перейти к содержимому

Как объявить переменную в vba excel

  • автор:

Excel vba объявление переменных

​Смотрите также​ конкретным вопросом (что​ данных Long​ тип указать. Поверьте,​ и объявлять переменные​ по ссылке​ vbNewLine & TypeName(l)​, Запустите для проверки​ пользователю должно быть​Нажмите​

​ выражение:​​ полезным ещё раз​​Sub​ константам.​ зависит от того,​Если все переменные​вместо​В VBA, как и​ нужно сделать/для чего)​

​DefCur — Тип​ столько было ошибок​ и их количество.​​RAN​​ & vbNewLine &​ такой макрос​ показано сообщение об​​Alt+F8​​=SumMinus(10, 5, 2)​ взглянуть на особенности​в VBA добавляет​Option Explicit Public sVAT_Rate​

Типы данных

​ где было сделано​ объявляются, то можно​Double​ в любом другом​ — возможно получится​ данных Currency​ из-за того, что​ Варианты переменных я​

​: Вот уж воистину​ TypeName(d)​

​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub tt()​ ​ ошибке и процедура​ ​(нажмите клавишу​Редактор VBA понимает, что​ и отличия этих​ ​ заданное целое число​
​ As Single Public​ ​ объявление переменной или​ ​ использовать оператор VBA​). Однако, используя более​ ​ языке программирования, переменные​
​ всё решить более​ ​DefSng — Тип​ ​ использовали Variant, а​ изучал, но как​ ​ — «Смотрю в​
​End Sub​ ​Dim w, e​ ​ должна быть тут​Alt​ ​ перед ним процедура​
​ двух типов процедур.​ ​ (Integer) в каждую​ ​ Const iMax_Count =​ константы. Возьмём, к​ ​ —​
​ компактные типы данных,​ ​ и константы используются​ ​ «деликатно»​ данных Single​ ​ не конкретный тип.​
​ выбирать до конца​ ​ книгу, вижу . «​ ​Но с Option​ As Boolean​ же завершена:​ ​и, удерживая её​
​Sub​ ​ Далее приведены краткие​ ​ ячейку в выделенном​ 5000 . ​ примеру, переменную​Option Explicit​ нужно внимательно следить​ для хранения каких-либо​FreddyLumix​DefDbl — Тип​ ​Юрий М​ не понимаю. Считать​Там и ссылочка​
​ Explicit будет ругаться.​ ​w = 2​ ​Function VAT_Amount(sVAT_Rate As​ ​ нажатой, нажмите клавишу​
​, когда встречает группу​ ​ обсуждения процедур VBA​ ​ диапазоне. Передать процедуре​В этом примере ключевое​sVAT_Rate​(о нём расскажем​ за тем, чтобы​ ​ значений. Как и​: «. или используйте Application.InputBox​ данных Double​: Плохой совет )​ по битам или​
​ есть Что такое​ ​alex77755​ ​e = 2​ Single) As Single​F8​ команд, заключённую между​Function​ это число можно​ слово​, которая используется в​ далее), чтобы выявить​ ​ в коде не​ следует из названия,​

​ с соответствующим параметром.»​DefDate — Тип​Все_просто​ байтам- тёмный лес.​ модуль? Какие бывают​: Насколько мне известно​[a1] = w​​ VAT_Amount = 0​​).​​ вот такими открывающим​​и​​ при помощи аргумента,​​Public​​ функции​​ все не объявленные​ было попыток уместить​ переменные могут изменяться,​А вот этого,​ данных Date​: Если хотите работать​ Вот если не​ модули?​

Объявление переменных и констант

​ такой способ возможен​​[a2] = e​ If sVAT_Rate​В появившемся списке макросов​ и закрывающим операторами:​Sub​ вот так:​использовано для объявления​Total_Cost​ переменные.Таким образом исключается​ в них не​
​ константы же хранят​ если честно, не​DefStr — Тип​
​ профессионально в VBA,​ трудно, то в​
​combat​​ только в VB.NET.​​End Sub​
​Обратите внимание, что перед​ выберите тот, который​

​Sub . End​и показаны простые​Sub AddToCells(i As​ переменной​. В следующей таблице​ появление в программе​

​ соразмерно большие значения.​​ фиксированные значения.​​ понял. Знаний еще​​ данных String​

​ то нужно приучать​ каком случае выбирать​​: Так у меня​​Ни в VB6,​и Вам сразу​ тем, как завершить​ хотите запустить.​​ Sub​​ примеры.​ Integer) . End​sVAT_Rate​ рассмотрены два варианта​ ошибки в результате​

​Примечание переводчика:​Например, константа​ маловато. ​

​DefObj — Тип​ себя объявлять все​ string, а в​ один код в​ ни в VBA​

​ все станет ясно​ выполнение процедуры​Нажмите​

​Рассмотрим пример простой VBA​Редактор VBA распознаёт процедуру​ Sub​и константы​ области действия переменной​ не верно записанного​​Говоря о переменных​​Pi​Jack Famous​ данных Оbject​

​ переменные. Для дисциплинирования​ каком Boolean, а​ форме, а другой​ он не катит.​Wowick​Function​Выполнить​ процедуры​​Function​​Имейте в виду, что​iMax_Count​sVAT_Rate​

  1. ​ имени переменной. Например,​ в VBA, стоит​​хранит значение 3,14159265…​: тем более на​DefVar — Тип​ можно нажать на​ в каком variant.​ на листе, переменную​​Кстати в VB.NET​​: Неужели самому сложно​–​(Run)​Sub​, когда встречает группу​ наличие аргументов для​. Областью действия объявленных​, объявленной в двух​ используя в коде​ упомянуть ещё один​ Число «Пи» не​ форум​ данных Variant​ птичку в настройках,​Спасибо​​ я привязываю от​​ тип данных относится​ проверить. ​​VAT_Amount​​Чтобы выполнять процедуру​​, задача которой –​​ команд, заключённую между​ процедур​ таким образом элементов​ различных позициях в​​ переменную с именем​​ очень важный момент.​ будет изменяться в​А перед этим​Jack Famous​ где указывается, что​​vikttur​​ формы, где должно​ ко всем переменным​
  2. ​Написал вот такой​, в код вставлена​​Sub​ изменить форматирование выделенного​ вот такими открывающим​Function​​ будет весь текущий​​ модуле:​sVAT_Rate​ Если мы объявляем​ ходе выполнения программы,​ почитать про диалоги​: Alemox, так по​ в самом верху​: В зависимости от​ присвоится к «rrr»​ в строке:​​ макрос:​​ встроенная VBA функция​быстро и легко,​ диапазона ячеек. В​ и закрывающим операторами:​и​ проект.​​Option Explicit Dim sVAT_Rate​​, можно допустить опечатку​ переменную, но не​ но все же​ и их особенности​ вашей же ссылке​ модуля всегда будет​ данных, для которых​ либо значение 21​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim i, j, k​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub start()​MsgBox​​ можно назначить для​​ ячейках устанавливается выравнивание​
  3. ​Function . End​Sub​​Это значит, что​ As Single Function​ и, присваивая значение​ присваиваем ей какое-либо​ хранить такое значение​Как минимум, InputBox​ всё это есть)​ указываться option explicit.​ предназначены переменные.​ либо 25 для​ As Integer​Dim i, k,​, которая показывает пользователю​ неё комбинацию клавиш.​ по центру (и​ Function​в VBA не​sVAT_Rate​ Total_Cost() As Double​ этой переменной, записать:​ значение, то она​ удобнее как константу.​ и Application.InputBox —​ крутая вещь, но​Примитивы объявлять большого​Текстовые -​ кода листа (РСИ),​В VB.NET все​ n As Integer​ всплывающее окно с​ Для этого:​

​ по вертикали, и​Как упоминалось ранее, процедура​ является обязательным. Для​и​ . End Function​ «VATRate = 0,175».​ инициализируется значением по​В то же время​ разные вещи. К​ я пока «ручками»​

Option Explicit

​ смысла нет, можно​​Sring​​модуль в общем​ переменный будут Integer​i = 1.65​ предупреждением.​Нажмите​ по горизонтали) и​Function​ некоторых процедур аргументы​iMax_Count​Если переменная​ Ожидается, что с​ умолчанию:​ мы можем использовать​ тому же, там​

​ каждую всё-таки задаю​

​ все оставлять variant​​, логические -​​ проекте есть но​В VB6 и​k = 2.65​Урок подготовлен для Вас​Alt+F8​ размер шрифта изменяется​​в VBA (в​​ не нужны.​будут доступны в​

  • ​ этого момента, переменная​• текстовые строки​​ переменную​​ есть другие параметры,​​Alemox​
  • ​ и не сильно​Boolean​​ он не использует​
  • ​ VBA k Integer​​n = 7.65​​ командой сайта office-guru.ru​​.​

​ на заданный пользователем:​​ отличие от​​Процедуры VBA могут иметь​ любом модуле проекта.​объявлена в самом​

Область действия переменных и констант

​sVAT_Rate​ — инициализируются пустыми​sVAT_Rate​ кроме названия (например​: Jack Famous, Да​ заморачиваться (хотя лучше​. Всяческие счетчики, количества​ эту переменную​i, j -​MsgBox i &​Источник: http://www.excelfunctions.net/VBA-Functions-And-Subroutines.html​В появившемся списке макросов​​Sub Format_Centered_And_Sized(Optional iFontSize​​Sub​ необязательные аргументы. Это​​Option Explicit Private sVAT_Rate​​ начале модуля, то​должна содержать значение​ строками;​​для хранения ставки​​тип получаемых данных​ я увидел тоже​ объявлять — правило​

​ потом уже. Просто​​ хорошего тона), с​​ строк -​​ не в ту​​SkyPro​ k & «​Автор: Антон Андронов​ хотите назначить сочетание​ 10) Selection.HorizontalAlignment =​ возвращаемых значений действуют​​ пользователь может указать,​​ Const iMax_Count =​ переменной будет весь​

​ конечно же, этого​ значением 0;​ товары. Величина переменной​ то, о чём​ у меня свои​​ массивами ситуация несколько​​Byte, Integer или Long​

​: Прошу прощения но​​Нажмите​​ xlCenter Selection.Font.Size =​Тип данных возвращаемого значения​ если они пропущены,​В этом примере для​sVAT_Rate​ же включен режим​​Boolean​​может изменяться в​ общем, читайте и​​ поэтому дал статью,​​ возможности (особенно, если​

​ предназначены для хранения​RAN​, Зато вот так​Запустил и тут​​ в интернете встречаются​​Параметры​ iFontSize End Sub​ должен быть объявлен​ то процедура использует​ объявления переменной​будет распознаваться всеми​ обязательного объявления всех​​— False;​​ зависимости от того,​ создавайте тему на​​ в которой хорошо​​ массив достаточно большой).​

​ целых чисел в​: Понажимайте кнопочки​ работает:​ же увидел результат.​​ разные разъяснения:​​(Options) и в​Данная процедура​​ в заголовке процедуры​​ для них заданные​sVAT_Rate​ процедурами в этом​ используемых переменных, то​• даты —​

​ что за товар​ форуме.​ описано не вникая​​ А вот объекты​​ зависимости от разрядности​​_Boroda_​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub test()​Анатолий​​Вот на одном​​ появившемся диалоговом окне​Sub​

​Function​ по умолчанию значения.​​и константы​​ модуле).​​ компилятор VBA сразу​​ 30 декабря 1899.​ приобретается.​FreddyLumix​

​: Спасибо откликнувшимся за​​ и не заметил,​​ используемому типу: либо​​Byte​​Даже если у​ 0 To 3​

​- от 0​​ Вас модуля вообще​​MsgBox TypeName(n)​​Dim i, k,​​ в одном операторе​ОК​В этом примере также​ значение, должна быть​ аргумент функции необязательным,​Private​

​переменной​ не найдёт переменную​
​ нужно объявить. Для​
​ типу данных. В​

Процедуры «Function» и «Sub» в VBA

Встроенные функции VBA

​ тоже имеется. Ну​ obj/dim obj as​ до 255, другие​ нет, а весь​Next​ n As Integer​ без повторения типа​и закройте диалоговое​ использован необязательный (Optional)​

​ названа так же,​ его нужно объявить​. Областью действия этих​

  • ​sVAT_Rate​VATRate​ этого в макрос​ таблице ниже приведены​​ диалоги. )))​​ ладно. Повторение мать​​ object), если используем​​ и +, и​
  • ​ код где-то в​End Sub​i = 1.65​​ данных. В следующих​​ окно​
  • ​ аргумент​ как и процедура​ вот так:​ элементов является текущий​будет присвоено некоторое​среди объявленных.​ добавляют вот такую​​ типы данных, используемые​​Юрий М​ учения.​

​ late binding, либо​ -). Для дробных​ других местах, Вам​combat​k = 2.65​ операторах переменные i​

Пользовательские процедуры «Function» и «Sub» в VBA

​Макрос​iFontSize​Function​Sub AddToCells(Optional i​​ модуль.​​ значение, то следующая​​Выделение значений, не соответствующих​​ простую строку кода:​ в VBA, с​​: Я не думаю​​FreddyLumix​​ по типу (dim​​ данных​ нужно его (модуль)​​: В исполняемом коде​​n = 7.65​​ ,j и k​​(Macro).​

​. Если аргумент​. Эту переменную не​ As Integer =​Это значит, что​ функция, выполняемая в​ объявленному типу переменной.​​Dim​​ описанием и диапазоном​ — я знаю.​: Доброго времени суток!​ rng as range/dim​Single, Double​ создать и там​​ формы объявил глобальную​​MsgBox i &​

Аргументы

​ объявляются как тип​Внимание:​iFontSize​ нужно объявлять отдельно,​ 0)​sVAT_Rate​​ пределах этого же​​Если объявить переменную​Имя_Переменной​ возможных значений:​ А, если Вы​Я чайник в​ cln as collection/dim​. и т.д.​ написать одну строку​

​ переменную rrr​ » » &​ Integer, l и​

​Назначая сочетание клавиш​не передан процедуре​ так как она​​В таком случае целочисленный​​и​​ модуля, будет использовать​​ определённого типа и​As​Тип данных Размер​ сомневаетесь,- проверьте )​

Необязательные аргументы

​ VBA, только делаю​ appOutlook as Outlook.Application),​Если переменная для​ -​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Option Explicit​ k & «​ m как Long,​ для макроса, убедитесь,​Sub​

​ всегда существует как​ аргумент​iMax_Count​ переменную​ попытаться присвоить ей​

​Тип_Данных​ Описание Диапазон значений​Про Application.InputBox -​

​ первые шаги. Подскажите, как​ если используем early​​ объекта (диапазон, лист,​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Public rrr As Integer​’​

​ » & n​ x и y​ что оно не​, то его значение​ неотъемлемая часть процедуры​

Передача аргументов по значению и по ссылке

​i​будут доступны во​sVAT_Rate​

  • ​ данные другого типа,​​В показанной выше строке​Byte​ почитайте справку. Ну​ решить следующую проблемку.​ binding.​ книга), можно​combat​Public rrr As​End Sub​ как Single:​ используется, как стандартное​
  • ​ по умолчанию принимается​​Function​по умолчанию будет​ всех процедурах текущего​с этим же​ то появится ошибка,​ кода​1 байт​ не дело здесь​ Создан скрипт, который​В использовании Early​

​Object,​​: Что то я​​ Integer​​Ясно. Значит нужно​​Dim i, j,​ в Excel (например,​ равным 10. Однако​.​ равен 0.​ модуля, но не​

​ значением.​ не исправив которую,​Имя_Переменной​ ​Положительные целые числа; часто​ мне её пересказывать.​​ циклически сравнивает два​​ binding, есть большое​но правильнее указывать​ все таки не​​Dim SRng As​​ только так:​​ k As Integer​​Ctrl+C​
​ же, если аргумент​Это отлично проиллюстрировано в​Необязательных аргументов в процедуре​ ​ будут доступны для​Однако, если будет вызвана​​ можно получить сбой​​– это имя​ используется для двоичных​Юрий М​​ массива данных.​​ преимущество в виде​​ тип -​​ понимаю, или туплю,​ Range ‘, InRng​Dim S1 As​​’ All three​​). Если выбрать уже​

​iFontSize​ следующем примере.​ может быть несколько,​ процедур, находящихся в​ какая-то функция, расположенная​ в работе программы.На​​ переменной, которая будет​​ данных​​: Ещё про​​В нем, как​ intellisense (автопоказ свойств/методов/пр.)​

​Range, Worksheet​ не знаю​​ As Range​​ String, S2 As​​ variables in the​​ существующее сочетание клавиш,​ передается процедуре​Ниже приведён пример кода​ все они перечисляются​ других модулях.​ в другом модуле,​ первый взгляд, это​​ использована в коде,​​от 0 до 255​​InputBox:​​ переменная, обьявляется массив:​ после вставки точки​

VBA процедура «Function»

​. ​​в вашем примере​​Dim roww As​ String, S3 As​ preceding statement are​ то оно будет​

​Sub​ VBA процедуры​

​ в конце списка​​Урок подготовлен для Вас​​ то для неё​ может показаться хорошей​​ а​​Boolean​возможно, выручит неявное​Dim My_Data (1​

  • ​ (например rng.)​Variant​ глобальную переменную объявили​​ Long​​ String​
  • ​ declared as Integer.​ переназначено макросу, и​, то в выделенном​Function​​ аргументов.​​ командой сайта office-guru.ru​ переменная​ причиной, чтобы не​Тип_Данных​2 байта​​ преобразование текста в​​ to 20) As​

​И еще одно​можно не указывать​

Пример VBA процедуры «Function»: Выполняем математическую операцию с 3 числами

​ в модуле, где​в этой форме​​Спасибо​​Dim l, m​ в результате пользователь​​ диапазоне ячеек будет​​, которая получает три​Аргументы в VBA могут​Источник: http://www.excelfunctions.net/VBA-Variables-And-Constants.html​sVAT_Rate​ объявлять переменные, но​​– это один​​Может принимать значения либо​ число, но лучше​ Variant​

​ замечание. Старайтесь объявлять​ — по умолчанию​ и прописали код,​ должен получить значения​Hugo​ As Long, x,​ может запустить выполнение​

​ установлен размер шрифта,​ аргумента типа​​ быть переданы процедуре​​Перевел: Антон Андронов​будет не известна.​ на самом деле,​ из типов данных​ True, либо False​ не рисковать )​​’где 20 -​​ ВСЕ переменные/константы. При​ так и есть.​​ но я то​​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub OptionButton1_Change()​: Такой вариант:​ y As Single​ макроса случайно.​​ заданный пользователем.​​Double​ двумя способами:​Автор: Антон Андронов​

Вызов VBA процедуры «Function»

​Option Explicit Function Total_Cost()​ чем раньше выяснится,​​ из таблицы, приведённой​​True или False​eugene.v​ длина массива, впрочем​ необходимости вводите enum/создавайте​ Под​ не использую модуль​Frame1.Height = 150​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Option Explicit​

Вызов VBA процедуры «Function» из другой процедуры

​’ In the​​В части 2 данного​​Следующая процедура похожа на​(числа с плавающей​ByVal​Перед тем, как приступить​ As Double Dim​ что одна из​ чуть ранее в​​Integer​​: Есть 2 файла,​ для людей сведующих​

​ новые классы.​Variant​прописал там переменную​If OptionButton1.Value =​’Иногда удобнее использовать​

Вызов VBA процедуры «Function» из рабочего листа

​ preceding statement, l​​ самоучителя обсуждалась тема​​ только что рассмотренную,​ точкой двойной точности).​– передача аргумента​ к созданию собственных​ sVAT_Rate As Single​ переменных получила не​ этой статье. Например:​​2 байта​​ ниже выдержки из​​ понятно и без​​Например намного приятнее​выделяется область памяти​ и то же​ True Then​

​ префиксы, причём по​

VBA процедура «Sub»

​ and m are​ области действия переменных​​ но на этот​​ В результате процедура​ по значению. Это​ функций VBA, полезно​ . End Function​

​ те данные, которые​Dim sVAT_Rate As​

VBA процедура «Sub»: Пример 1. Выравнивание по центру и изменение размера шрифта в выделенном диапазоне ячеек

​Целые числа (нет дробной​ кода. В представленном​​ комментов.​​ разбираться в коде,​ с запасом, по​ самое​rrr = 21​ двум причинам​ Long, x and​ и констант и​ раз, вместо изменения​ возвращает ещё одно​

​ значит, что процедуре​ знать, что Excel​Если переменная​ должна была получить​ Single Dim i​ части)​

​ виде все работает,​​Теперь формулирую вопрос:​​ когда написано:​ максимуму, т.к. программа​

​может быть я​. ​’1 — первая​​ y are Single.​​ роль ключевых слов​​ размера, применяется полужирное​​ число типа​​ передаётся только значение​​ VBA располагает обширной​sVAT_Rate​ – тем лучше!​ As Integer​​от -32 768 до +32 767​​ но стоит в​​ С учетом того,​​arr(enProduct1) = . ​ не знает. что​ не так объясняю,​End Sub​

VBA процедура «Sub»: Пример 2. Выравнивание по центру и применение полужирного начертания к шрифту в выделенном диапазоне ячеек

​ буква имени уже​Вот на другом:​Public​ начертание шрифта в​Double​ (то есть, копия​ коллекцией готовых встроенных​объявлена в начале​​ Иначе, если программа​​Аналогично объявляются константы, но​Long​

​ первом дописать объявление​ что длина массива​ arr(enOrder2) = . ​ Вы собрались помещать​ может быть весь​

Вызов процедуры «Sub» в Excel VBA
Вызов VBA процедуры «Sub» из другой процедуры

​Private Sub OptionButton2_Change()​​ подсказывет её тип​​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Очень частая ошибка​и​ выделенном диапазоне ячеек.​​, равное сумме первых​​ аргумента), и, следовательно,​​ функций, которые можно​​ функции​ продолжит работу, результаты​ при объявлении констант​4 байта​

​ переменных через «Dim​ ( в нашем​

​чем​​ в переменную.​​ файл скинуть​Frame1.Height = 150​’2 — не​ при объявлении переменных,​

​Private​ Это пример процедуры​ двух аргументов минус​

Вызов VBA процедуры «Sub» из рабочего листа

​ любые изменения, сделанные​​ использовать при написании​​Total_Cost​ могут оказаться неверными​ обязательно сразу указывается​Большие целые числа (нет​ x, y», или​ случае 20), возможно​​arr(75)= . arr(23)​​Да все это​​после заполнения бланка​​If OptionButton2.Value =​ указываем тип при​​ совершаемая начинающими изучать​​. Эти ключевые слова​Sub​​ третий аргумент:​​ с аргументом внутри​ кода.​, то её область​ и неожиданными, а​ их значение. Например,​ дробной части)​​ во втором эту​​ будет меняться, хотелось​ = . ​ описано-переописано. ​​ и нажатия кн.​​ True Then​ объявлении (что и​ VBA:​ так же можно​​, которой не передаются​​Function SumMinus(dNum1 As​ процедуры, будут потеряны​Список этих функций можно​

​ действия будет ограничена​ найти причину ошибок​​ вот так:​​от -2 147 483 648 до +2 147 483 647​ строку убрать, добавив​

  • ​ бы реализовать скрипт​​Кроме того, если​​Количество — в​​ Печать идет сохранение​​rrr = 25​ требовалось)Код Visual Basic​​Dim MyVar1, MyVar2,​​ использовать применительно к​
  • ​ никакие аргументы:​ Double, dNum2 As​ при выходе из​
  • ​ посмотреть в редакторе​​ только этой функцией​​ будет гораздо сложнее.Возможно​

​Const iMaxCount =​​Single​​ «Set» перед присвоением​ в таком виде:​ в будущем константа​ зависимости от решаемой​

  • ​ вот здесь ругается,​​. ​​’В секции Declaration​
  • ​ MyVar3 As Integer​ VBA процедурам:​Sub Format_Centered_And_Bold() Selection.HorizontalAlignment​ Double, dNum3 As​
  • ​ неё.​​ VBA:​​ (т.е. в пределах​ также, что макрос​ 5000 Const iMaxScore​
  • ​4 байта​​ значения переменной, как​​Dim My_Data (1​ поменяется, вы это​​ задачи и применяемых​​ выскочит ошибка​

​End If​​DefInt I​Вроде бы исходя​Public Sub AddToCells(i As​ = xlCenter Selection.VerticalAlignment​ Double) As Double​​ByRef​​Откройте рабочую книгу Excel​ функции​ будет «успешно» выполнен.​ = 100​Число с плавающей точкой​ редактор VBA ругается.​ to a) As​

Область действия процедуры VBA

​ будете менять только​ алгоритмов. Чем меньше,​_Boroda_​End Sub​DefLng L​​ из логики всем​​ Integer) . End​​ = xlCenter Selection.Font.Bold​​ SumMinus = dNum1​– передача аргумента​ и запустите редактор​Total_Cost​

​ В результате ошибка​Объявлять переменные в Excel​ одинарной точности​ ​ Подскажите, почему так?​ Variant​​ в заголовке, а​​ тем меньше памяти​: Давайте еще раз.​а вот здесь​DefStr S​
​ переменным присвоен тип​ Sub​ = True End​ ​ + dNum2 -​ по ссылке. То​​ VBA (нажмите для​​, можно будет использовать​ останется незамеченной и​ не обязательно. По​от -3.4e38 до +3.4e38​Файл 1 (модуль​a = InputBox​ не судорожно в​ откушено. Но, опять​

​ В модуль1 сверху​ появляется ошибка, код​Sub Макрос1()​​ данных Integer. Но​​Если перед объявлением процедуры​​ Sub​​ dNum3 End Function​ есть процедуре передаётся​ этого​ переменную​​ работа продолжится с​​ умолчанию все введённые,​Double​ книги).​ («Введите максимальное значение​ нескольких местах. Так​ же — не​ нужно дописать еще​​ на листе, ггг​​Dim i1, i2,​

Ранний выход из VBA процедур «Function» и «Sub»

​ это ошибочное суждение.​ стоит ключевое слово​​Чтобы вызвать VBA процедуру​​Эта очень простая VBA​​ фактический адрес размещения​​Alt+F11​sVAT_Rate​ неверными данными!​ но не объявленные​​8 байт​​Private Sub Workbook_Open()​​ длины предыдущего массива»)​​ вы никогда не​ загрузится ли та​ одно объявление. Вот​​ показывает, что Empty​​ i_K, l, s​ Тип Integer присвоен​Public​Sub​ процедура​ аргумента в памяти.​), и затем нажмите​, а за её​В связи с этим,​ переменные в Excel​Число с плавающей точкой​With Worksheets(«Лист1»)​Но это не​

​ пропустите не совсем​ же память вычислениями,​ так​ Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sheets(«Save»).Range(«a» + LTrim$(Str$(z)))​

​MsgBox TypeName(i_K)​ только последней переменной,​, то данная процедура​​из другой VBA​​Function​​ Любые изменения, сделанные​​F2​ пределами – нет).​​ неверный тип данных​​ будут иметь тип​ двойной точности​.[B:B].ClearContents​

​ работает, при компилляции​ нужную ошибку даже​
​ которых можно было​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Public Slov() As String​

Разногласия Объявление переменных (Макросы/Sub)

​MsgBox TypeName(l)​​ к которой он​ будет доступна для​ процедуры, нужно записать​
​иллюстрирует, как данные​ с аргументом внутри​
​.​При попытке использовать​ желательно обнаруживать и​Variant​от -1.8e308 до +1.8e308​Set x =​ сразу вылетает ошибка​ в не самых​ бы избежать, применяя​Public Ind() As​ rrr, 999) ‘​
​MsgBox TypeName(s)​ «привязан» оператором As​
​ всех модулей в​ ключевое слово​ передаются процедуре через​ процедуры, будут сохранены​
​В выпадающем списке в​sVAT_Rate​ как можно раньше​
​и смогут принять​Currency​ .Columns(«A»).Find(«*», .[A1], searchdirection:=xlPrevious)​ и подсвечивается переменная​ критических местах программы.​
​ переменные?​
​ Long​ наименование, тип, рег.​End Sub​ — MyVar3. Все​
​ данном проекте VBA.​Call​
​ аргументы. Можно увидеть,​ при выходе из​ верхней левой части​в другой процедуре,​ исправлять такие ошибки​ как числовое, так​8 байт​Файл 2 (модуль​ «а» в этой​Jack Famous​Одни и те​Public rrr​ №​doober​ остальные переменные имеют​Private Sub AddToCells(i As​, имя процедуры​ что тип данных,​ процедуры.​ экрана выберите библиотеку​ компилятор VBA сообщит​ в коде. По​ и текстовое значение.​Число с плавающей точкой,​ листа).​ строке​
​: Ronin71, Alemox дал​ же переменные можно​В остальном коде​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub CommandButton2_Click()​
​:​
​ тип данных Variant.​ Integer) . End​
​Sub​ возвращаемых процедурой, определён​
​При помощи ключевых слов​VBA​ об ошибке, так​ этим причинам при​
​Таким образом, программист в​ с фиксированным количеством​Option Explicit​Dim My_Data (1​ отличную , но​ (и советую) применять​
​ убрать все Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim​ActiveSheet.PrintOut​

​_Boroda_​​ Т.е. если Вы​​ Sub​и далее в​ как​​ByVal​.​ как эта переменная​
​ написании макроса VBA​ любой момент сможет​ десятичных разрядов​
​Private Sub Worksheet_Change(ByVal​ to​ посоветовал прямо противоположное)))​ по несколько раз,​ rrr и наступит​Dim z As​запросто,даже иногда удобно.Например​ не задаете переменной​Если перед объявлением процедуры​
​ скобках аргументы процедуры.​​Double​или​
​Появится список встроенных классов​
​ не была объявлена​ рекомендуется объявлять все​
​ использовать новую переменную​
​от -922 337 203 685 477.5808 до +922 337 203 685 477.5807​
​ Target As Range)​
​a​
​не скажу, как​
​ если это позволяет​ счастье!​

​ Variant​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub Это_Возможно()​ тип хранимых данных​
​ стоит ключевое слово​ Это показано в​
​(об этом говорят​
​ByRef​ и функций VBA.​
​ за пределами функции​
​ переменные.​
​ (даже если она​
​Date​Dim x, y​) As Variant​ там «много программистов»​
​ код. Только не​
​Это называется «Не​z = 1​

​For n As​​ явно(т.е. не указываете​ ​Private​
​ примере ниже:​ слова​
​в объявлении процедуры​
​ Кликните мышью по​
​Total_Cost​
​Оператор​ не была объявлена),​8 байт​If Intersect(Target, [A:A])​
​то есть скрипт​
​ делает, но лично​ забывать их очищать​
​ спрашивайте «Почему?», просто​While Sheets(«Save»).Range(«a» +​ Integer = 0​ для неё тип​
​, то данная процедура​

​Sub main() Call​​As Double​
​ можно задать, каким​
​ имени функции, чтобы​(при условии, что​Option Explicit​
​ и Excel будет​Дата и время –​ Is Nothing Then​
​ сразу же требует​ я на себе​ перед новым применением​ сделайте так». Ну​
​ LTrim$(Str$(z))) <> «»​
​ To 3​
​ данных), то VBA​
​ будет доступна только​
​ Format_Centered_And_Sized(20) End Sub​
​после списка аргументов).​ именно способом аргумент​
​ внизу окна отобразилось​
​ использован оператор​
​заставляет объявлять все​
​ рассматривать её как​

​ данные типа Date​​ Exit Sub​​ конкретное число, а​
​ не раз испытал​
​ (очистка не нужна,​
​ такие правила объявления,​z = z + 1​If 1 =​
​ сам присваивает такой​ для текущего модуля.​
​Если процедура​ Также данный пример​
​ передаётся процедуре. Ниже​
​ её краткое описание.​Option Explicit​
​ переменные, которые будут​
​ переменную типа​ представлены числом с​
​Application.EnableEvents = False​ вводить его каждый​
​ «пинки» от необъявленных​
​ если при следующем​ так установили в​
​Wend​
​ 2 Then​
​ переменной тип данных​

​ Её нельзя будет​​Format_Centered_And_Sized​ показывает, как результат​
​ это показано на​
​ Нажатие​).​
​ использованы в коде​Variant​
​ плавающей точкой. Целая​[B:B].ClearContents​
​ раз, забираясь в​ или объявленных неправильно​
​ применении переменной сразу​ МS.​
​Sheets(«Save»).Range(«a» + LTrim$(Str$(z)))​Dim r As​
​ Variant, т.к. он​ вызвать, находясь в​


​имеет более одного​ процедуры​ примерах:​​F1​​В показанном выше примере​ VBA, и при​. Однако, есть несколько​
​ часть этого числа​x = Columns(«A»).Find(«*»,​
​ тело скрипта, считаю​
​ переменных, поэтому мой​
​ присваивается значение). Например,​
​У меня тоже​
​ = Mid(Worksheets(«РСИ»).Cells(15, 1).Value,​ String = «»​ может хранить любой​ любом другом модуле​
​ аргумента, то они​
​Function​Sub AddToCells(ByVal i As​

​откроет страницу онлайн-справки​​ переменная объявлена на​ компиляции выделяет все​ причин, почему так​
​ выражает дату, а​ [A1], searchdirection:=xlPrevious)​ тупо и непрофессионально.​
​ совет —​ циклам, расположенным последовательно,​ не влезло. Тоже​ rrr, 999) ‘​
​Else​ тип данных. А​
​ или из рабочей​ должны быть разделены​
​сохраняется в переменной​ Integer) . End​
​ по этой функции.​ уровне модуля при​

​ не объявленные переменные​​ поступать не следует:​​ дробная часть –​​eugene.v​Как решить данную​ ​Option Explicit​
​ можно отдать один​ выкинул.​
​ наименование, тип, рег.​
​Dim r As​
​ вот так выглядит​

Объявление глобальной переменной (Макросы/Sub)

​ книги Excel.​​ запятыми. Вот так:​ с именем, совпадающим​ Sub​
​Кроме того, полный список​
​ помощи ключевого слова​
​ как ошибки (прежде​Использование памяти и скорость​
​ время​: Во втором случае​ проблему?​
​по умолчанию в​ и тот же​
​RAN​ №​
​ Image = Nothing​
​ правильное присвоение типа​
​Помните о том, что​Sub main() Call​
​ с именем процедуры.​
​В этом случае целочисленный​
​ встроенных функций VBA​
​Dim​
​ чем будет запущено​
​ вычислений.​от 1 Января 100​
​ (если убрать «Set»​
​Заранее благодарю за​
​ каждом модуле и​
​ счетчик, пусть пользуются,​
​: Тяжела она, шапка​Sheets(«Save»).Range(«b» + LTrim$(Str$(z)))​End If​ данных:​ если перед объявлением​ Format_Centered_And_Sized(arg1, arg2, . )​Если рассмотренная выше простая​ аргумент​ с примерами можно​
​. Однако, бывает необходимо,​
​ выполнение кода). Применить​
​Если не объявлять​ до 31 Декабря​
​ и добавить «Dim​
​ помощь.​ отладка кода после​
​ ущерба никакого нет..​
​ Мономаха.​
​ = Worksheets(«РСИ»).Cells(25, 14).Value​If 1 =​Dim MyVar1 As​ VBA процедуры​ End Sub​
​ процедура​i​ найти на сайте​
​ чтобы объявленными переменными​
​ этот оператор не​
​ переменную с указанием​ 9999​ x, y»), то​Юрий М​ написания через​ Но и тут​Листы выкинул, думал​ ‘ зав. №​

​ 2 Then​​ Integer, MyVar2 As​
​Function​​Процедура​Function​передан по значению.​ Visual Basic Developer​ можно было пользоваться​

​ сложно – просто​​ типа данных, то​Object​ просто не работает​: А если СНАЧАЛА​Debug —> Compile [Name​

​ нужно с умом​​ без архива влезет.​. ​Dim r As​

​ Integer, MyVar3 As​​или​Sub​ ​вставлена в модуль​
​ После выхода из​ Centre.​
​ в других модулях.​ запишите в самом​ по умолчанию для​4 байта​

​ код, то есть​​ задать переменной значение,​ of VBA Project]​

​ подходить — можно​​Не влезло.​End Sub​ Integer = 2​
​ Integer​Sub​не может быть​ в редакторе Visual​

​ процедуры​​В Excel Visual Basic​ В таких случаях​ верху файла VBA​ неё будет установлен​Ссылка на объект​ переменной «x» не​ а уже ПОТОМ​(за совет по​ такого понаписывать, что​combat​
​кто подскажет, где​Else​отсюда вопрос: это​ключевое слово не​
​ введена непосредственно в​ Basic, то она​Sub​ набор команд, выполняющий​

​ для объявления переменной​​ такую строку:​

​ тип​​Любая ссылка на объект​
​ назначается значение конца​ объявлять массив? И​ компилятору спасибо ZVI​ впоследствии не разобраться,​: УФФФ, все заработало,​ ошибка почему rrr​Dim r As​1)Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim S1, S2,​ вставлено, то по​
​ ячейку листа Excel,​

​ может быть вызвана​​все сделанные с​ определённую задачу, помещается​ вместо ключевого слова​Option Explicit​
​Variant​String​ диапазона.​ не забывайте, что​)​ а что же​
​ доходчиво теперь. ​ для кода листа​ Double = 34.0​
​ S3 As String​ умолчанию для процедуры​ как это может​ из других процедур​
​i​ в процедуру​Dim​Если хотите всегда вставлять​. Этот тип данных​

​изменяется​​В первом случае​ InputBox выдаст Вам​Alemox​ там данный момент​СПАСИБО. ​
​ «РСИ» не присваивается​
​End If​одно и тоже​
​ устанавливается свойство​
​ быть сделано с​ VBA или использована​изменения будут утрачены.​Function​
​нужно использовать ключевое​Option Explicit​ использует больше памяти,​Набор символов. Тип String​ (если не указать​ текст. Или преобразуйте​
​: Ну коли на​ хранится.​RAN​

​ значение 21 или​​Next​ с этим​
​Public​ процедурой​
​ на рабочем листе​

​Sub AddToCells(ByRef i As​​(Функция) или​ слово​
​в начало каждого​

​ чем другие типы​​ может иметь фиксированную​
​ «Dim x, y»),​ его в число,​ то пошло, то​
​Alemox​: Кстати, о Public.​ 25 в зависимости​End Sub​2)Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim S1 As​

​(то есть она​​Function​ в книге Excel.​ Integer) . End​Sub​Public​ нового созданного модуля​ данных.Казалось бы, несколько​ или изменяющуюся длину.​ пишет: «Compile error:​ или используйте Application.InputBox​ выложу информацию ещё​: Могу только добавить​Public z_ As​ от условия в​SkyPro​
​ String, S2 As​ будет доступна везде​, потому что процедура​

Переменные VBA

​Процедуру​​ Sub​
​(Подпрограмма). Главное отличие​.​ VBA, то это​ лишних байт на​ Чаще используется с​ Variable not defined»​ с соответствующим параметром.​ по одному типу​ следующее. Сейчас программисты​ String в модуле​ формы2​: А я предпочитаю​ String, S3 As​ в данном проекте​Sub​Function​В этом случае целочисленный​
​ между процедурами​

​Кстати, для того, чтобы​​ можно делать автоматически.​ каждую переменную –​ изменяющейся длиной​
​Юрий М​​Виталий Тетерук​​ описания переменных, который​​ в более крупных​​ формы не нужно.​RAN​ краткую запись:​​ String​​ VBA). В этом​не возвращает значение.​можно вызвать из​ аргумент​Function​​ объявить переменную на​​ Для этого необходимо​ не так уж​Фиксированной длины — приблизительно​: А не объявлены​: Юрий М​​ тянется с далёкого​​ и запутанных программах,​
​Public нужно на​: Потому, что​200?’200px’:»+(this.scrollHeight+5)+’px’);»>​​Т.е. если все​​ состоит отличие от​ Однако, процедуры​​ другой VBA процедуры​​i​​и​​ уровне модуля, вместо​ включить параметр​ много, но на​ до 65 500 символов.​​ ли случайно в​​Спасибо! Признаться, не​ 1965 года, после​ объявляют все переменные​ уровне проекта. На​Цитата​Dim t$ ‘as​
​ три переменные нужно​ объявления переменных, которые​
​Sub​ при помощи простого​передан по ссылке.​Sub​ ключевого слова​Require Variable Declaration​ практике в создаваемых​ Переменной длины —​ первом файле эти​ додумался присваивать значение​ первой версии Basic.​ с типом Variant.​
​ уровне модуля достаточно​combat, 22.11.2015 в​ string​ объявить как строковые,​ по умолчанию бывают​, не имеющие аргументов​ присваивания этой процедуры​ После выхода из​состоит в том,​Dim​в настройках редактора​ программах могут быть​ приблизительно до 2​ переменные (x и​ до обьявления. НО​Мало кто знает,​ Так код легче​ Dim z_ As​ 11:32, в сообщении​Dim i% ‘​ то нужно делать​Private​ и объявленные как​ переменной. В следующем​ процедуры​

​ что процедура​​можно использовать ключевое​ VBA.​ тысячи переменных (особенно​ миллиардов символов​ y), как Public?​ почему Вы думаете​ что так можно​ поддаётся изменению. Если​ String.​ № 1200?’200px’:»+(this.scrollHeight+5)+’px’);»>В исполняемом​ as integer​ как во втором​.​Public​ примере показано обращение​Sub​Function​ слово​Это делается так:​
​ при работе с​Variant​Юрий М​

​ что, InputBox выдаст​​ описывать переменные.​
​ у вас макрос​

​combat​​ коде формы объявил​Dim l& ‘​ случае?​
​Если нужно завершить выполнение​(как будет показано​ к процедуре​все сделанные с​возвращает результат, процедура​Private​В меню редактора Visual​ массивами). Поэтому излишняя​изменяется​

​: Дим, а меня​​ текст, если я​

​Например, все переменные​​ небольшой, то можете​: Учел исправил. Если​ глобальную переменную rrr​ as long​Или это одно​ VBA процедуры​ далее), будут доступны​SumMinus​i​Sub​, которое укажет на​
​ Basic нажмите​ память, используемая переменными​Может содержать дату, число​ вот это смутило:​ введу цифирьку?​ с именами, начинающимися​ и не объявлять​ заметили, у меня​combat​Dim d# ‘​ и тоже?​Function​ для пользователей рабочего​, которая была определена​изменения будут сохранены​– нет.​ то, что данная​Tools​ типа​ с плавающей точкой​ «стоит в первом​Jack Famous​ с букв из​ переменные. Но иногда​
​ есть лист калибровка,​: Все равно не​ as double​_Boroda_​или​ листа. Таким образом,​
​ выше.​ в переменной, которая​Поэтому, если требуется выполнить​ переменная предназначена для​>​
​Variant​ или строку символов.​ дописать объявление переменных​
​: Виталий, а может​ диапазона от А​
​ бывают случаи, что​
​ нужен для подгонки​ понял, все таки​
​Dim c@ ‘​:​Sub​ если рассмотренные выше​Sub main() Dim​ была передана процедуре​ действия и получить​ использования только в​Options​, по сравнению с​ Этот тип используют​ через «Dim x,​

​ это на форум,​​ до Q,​ их просто необходимо​ 2-х линий на​
​ как решить проблему,​ as currency​Вообще-то, пора бы уже​, не дожидаясь её​ простые процедуры​ total as Double​Sub​ какой-то результат (например,​ текущем модуле.​​В появившемся диалоговом окне​​ переменными типа​ в тех случаях,​ y»»​ а?))) Тут, в​​имеют строковый тип:​ объявить, так как​​ листе РСИ (в​ что не так,​​Dim s! ‘​

​ и зарегистрироваться, Вы​​ естественного финала, то​Sub​ total = SumMinus(5,​.​ просуммировать несколько чисел),​Для объявления констант также​ откройте вкладку​Integer​
​ когда заранее не​eugene.v​ курилке более общие​
​Объявляется в начале​ программа может определить​ основном по высоте),​ не там объявил​ as single​
​ как считаете?​
​ для этого существуют​вставлены в модуль​
​ 4, 3) End​
​Помните, что аргументы в​ то обычно используется​ можно использовать ключевые​Editor​или​
​ известно, какой именно​: Везде объявил «Dim​ вопросы и лайфхаки​
​ модуля перед процедурой​ её неправильно. Сам​
​ почему то на​RAN​
​Dim v ‘​А то Ваши​
​ операторы​ в редакторе Visual​
​ Sub​ VBA по умолчанию​
​ процедура​ слова​
​Отметьте галочкой параметр​Single​
​ тип данных будет​ x, y as​
​ обсуждаются​DefStr A-Q​
​ лично встречал такие​ разных ПК, по​
​: Что такое переменная​ as variant​

​ «коды» читать уж​​Exit Function​ Basic, то процедура​VBA процедуру​ передаются по ссылке.​Function​Public​

​Require Variable Declaration​​, может сложится в​ введён​ Range» и оставил​По вопросу:​DefStr A-Q Sub​ ситуации.​ разному рисует, вообще​ и как правильно​А еще можно​ очень неудобно​и​Format_Centered_And_Bold​Function​ Иначе говоря, если​

​, а для того,​​и​
​и нажмите​ значительную сумму.К тому​Число – Double, строка​ «Set» — все​первое, что приходит​ Пример() A =​А вообще можете​
​ правильно ли я​ её объявить?​
​ прямо в коде​Сначала охренел, мягко​Exit Sub​
​будет доступна для​можно вызвать из​ не использованы ключевые​ чтобы просто выполнить​Private​
​ОК​ же, операции с​ – String​ работает. Спасибо за​ в голову -​ 1 B =​ по данным ориентироваться​ все сделал, или​
​combat​ обьявлять, как показал​ говоря. сайт Майкрософт​
​. Применение этих операторов​ использования на рабочем​ рабочего листа Excel​
​ слова​ какие-то действия (например,​, но не вместо​При включенном параметре строка​ переменными типа​Очевидно, что пользуясь приведённой​
​ помощь!​ то, что предложил​​ «Строка» C =​​ по таблице.​
​ же по др.​: То есть, я​doober​ http://msdn.microsoft.com/ru-ru/library/ke6sh835.aspx​ показано ниже на​ листе книги Excel,​ таким же образом,​
​ByVal​ изменить форматирование группы​
​ ключевого слова​Option Explicit​

​Variant​​ выше таблицей и​Юрий М​ Юрий М.​ 123456 End Sub​Ronin71​ пути надо было​ не там вставил​, но это удобно​Потом почитал внимательно​ примере простой процедуры​

​ а процедура​​ как любую другую​
​или​ ячеек), нужно выбрать​Const​будет автоматически вставляться​выполняются гораздо медленнее,​ правильно выбирая тип​: А вот это​

​А дальше смотрите​​Вот основные команды​: Спасибо «курильщики»!​ идти​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Public rrr As Integer​ только для небольших​ — там не​
​Function​​Format_Centered_And_Sized​ встроенную функцию Excel.​ByRef​ процедуру​
​, а вместе с​ в начало каждого​​ чем с переменными​​ данных, можно использовать​​ не совсем верно​​ в сторону​ объявления таким образом​Буду пытаться, разбираться. ​Какое отношение этот​нужно было вставить​ макросов.​ про VBA, а​, в которой ожидается​– не будет​ Следовательно, созданную в​

​, то аргумент будет​​Sub​ ним.​
​ нового созданного модуля.​ других типов, соответственно​ память более экономно​ — нужно вот​

​ReDim​​ переменных.​SuperCat​
​ вопрос имеет к​ в ЭтаКнига?​Кстати, можно еще​
​ про VB. Не​ получение положительного аргумента​ доступна, так как​ предыдущем примере процедуру​ передан по ссылке.​.​​В следующих примерах показано​​Каждая объявленная переменная или​ лишняя тысяча переменных​ (например, выбрать тип​ так:​и​DefBool — Тип данных​

​: Потому и запутанные,​​ глобальным переменным?​предложенный ресурс почитал,​
​ так:​ знаю, есть ли​

​ для выполнения дальнейших​​ она имеет аргументы.​Function​Перед тем как продолжить​При помощи аргументов процедурам​
​ использование ключевых слов​ константа имеет свою​ типа​ данных​

​Dim x as​​ReDim Preserve​​ Boolean​​ так как всё​Ronin71​ на мысль об​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub variableinmacro()​

Объявление переменных в VBA

​ разница. С VB​​ операций. Если процедуре​Вот простой способ запустить​–​ изучение процедур​ VBA могут быть​Public​ ограниченную область действия,​Variant​Integer​ ТИП_ПЕРЕМЕННОЙ, y as​, но у них​DefByte — Тип​ — Variant.​: Здравствуйте Всем!​

​ ошибке не на​s$ = «текст»​
​ не общался -​
​ передано не положительное​
​ (или выполнить) процедуру​
​SumMinus​Function​

​ переданы различные данные.​и​
​ то есть ограниченную​
​может значительно замедлить​вместо​
​ Range​
​ есть ограничения по​ данных Byte​А вообще -​
​Обьясните пожалуйста, желательно​
​ вел​
​l& = 1111111​ может, там такой​

​ значение, то дальнейшие​​Sub​можно вызвать, введя​и​ Список аргументов указывается​Private​ часть программы, в​ вычисления.​Long​eugene.v​

​ «раздуванию» массива. Опять​Deflnt — Тип​ лучше объявить переменную,​ на пальцах, по​Pelena​

​d# = 25.222​​ синтаксис и прокатывает.​ операции не могут​, доступную из рабочего​ в ячейку рабочего​Sub​

​ при объявлении процедуры.​​в применении к​ которой эта переменная​Профилактика опечаток в именах​или​: Не знал, буду​ же — лучше​

​ данных Integer​​ а ещё лучше​ какому принципу выбирать​: Цитата из статьи​MsgBox TypeName(s) &​Анатолий​ быть выполнены, поэтому​

​ листа:​​ листа вот такое​более подробно, будет​ К примеру, процедура​ переменным и к​
​ существует. Область действия​ переменных.​Single​

Переменные в VBA

Переменные в VBA

Переменная – это поименованная, либо адресуемая любым другим способом область компьютерной памяти, в которой хранятся данные указанного типа. Эти данные, в ходе выполнения программы, могут изменяться неограниченное количество раз.

Можно сказать, что переменная – это контейнер (ящик) для хранения изменяемых данных. Сюда можно положить какое-то значение (например, дату, число, строку и т.д.). Данные, которые хранит в себе переменная, называют значением переменной. И в ходе выполнения программы, эти данные можно получить и изменить.

Представьте, что вы повесили на ящик ярлык (дали ему имя) «Игрушки» и положили в него плюшевого мишку. Получается, что вы создали переменную – Игрушки. Значение переменной Игрушки будет – плюшевый мишка. В любой момент вы может достать этого мишку из ящика, обратившись к нему по имени «Игрушки» и положить в ящик уже не мишку, а например, зайчика. И тогда у вас будет переменная Игрушки со значением – зайчик.

Переменные в VBA

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

Объявления переменных в VBA

Правила присвоения имени переменных в VBA:

  1. Имя переменной должно быть уникальным (две разные переменные не могут иметь одно и то же имя).
  2. Максимальная длина имени переменной не может превышать 255 символов.
  3. Первым символом в имени переменной должна быть буква, после которой допускается использование цифр, или знака подчеркивания «_».
  4. Нельзя использовать пробел, точку, восклицательный знак, а также символы @, #, $, %, &.
  5. Нельзя использовать зарезервированные (ключевые) слова (слова, которые подсвечиваются синим цветом в окне редактора кода).

При присвоении имени переменной можно использовать как строчные, так и прописные буквы в любом сочетании. Например, MySum и mysum компилятор VBA воспримет как одно и то же имя. Если вы первый раз написали имя переменной MySum (первое вхождение), а второй раз написали mysum (второе вхождение), то редактор VBA автоматически исправит mysum на MySum.

Прежде чем использовать переменную, её рекомендуется объявить. То есть нужно указать компилятору, что требуется создать переменную с данным именем, в которой будут храниться данные определённого типа.

Если создать переменную без её предварительного объявления, то она будет иметь тип Variant. В VBA этот тип переменной присваивается по умолчанию.

Если переменную создают (используют в операторе) без предварительного объявления, то в таком случае говорят, что переменная объявлена не явно.

Чтобы явно объявить переменную используют оператор Dim. Например, объявить переменную в VBA можно так:

В этой строке, MyAge – это имя переменной, а Integer – это присвоенный ей тип данных (Целое число).

В одной строке можно объявить и несколько переменных. Делается это через запятую вот так:

Обратите внимание, что при объявлении переменных в одной строке, оператор Dim указывается один раз, а тип данных указывается для каждой переменной отдельно.

Кроме того, в одном операторе Dim разрешается смешивать объявление переменных различных типов: Intager, String, Date, Boolean и т.д.

Область видимости переменных в VBA

Переменную можно неоднократно использовать только в той части программы, где она доступна. В VBA предусмотрено 4 ключевых слова для определения области видимости переменных:

  1. Dim – используется наиболее часто при объявлении переменных в VBA. Если переменная объявлена как Dim в области объявлений модуля, то она будет доступна для всех процедур в этом модуле, если в процедуре – то такая переменная будет доступна только на время работы этой процедуры.
  2. Private – при объявлении переменных в стандартных модулях VBA работает точно так же, как и Dim.
  3. Public – такая переменная будет доступна всем процедурам во всех модулях данного проекта, если вы объявили её в области объявлений модуля. Если вы объявили ее внутри процедуры, она будет вести себя как Dim.
  4. Static – такие переменные можно использовать только внутри процедуры. Они видны только внутри процедуры, в которой объявлены. Переменные, объявленные с оператором Static, сохраняют свои значения до тех пор, пока выполняется код.

Если нет никаких особых требований, то при объявлении переменных в VBA лучше всего выбирать область видимости Dim.

Как присваивать имена объектам в VBA правильно?

При создании VBA программ, присваивать имена объектам рекомендуется по следующим правилам:

Как объявить переменную? Объявление переменных в VBA

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

Требования к именам переменных

При выборе имен для переменных необходимо руководствоваться следующими правилами:

— имена переменных должны начинаться с буквы;

— после первой буквы можно использовать любые сочетания букв, цифр и символов подчеркивания (_);

— в именах переменных не могут содержаться пробелы, точки и символы, используемые VBA для обозначения математических действий и операций сравнения;

— имя переменной не может превышать 255 символов;

— имена переменных не должны повторять ключевые слова VBA;

— имя переменной (идентификатор) должно быть уникальным в пределах его области действия.

Кроме того, имена переменных не различают состояние регистра. Имена FirstRow и firstrow представляют для VBA одно и то же. При выборе имен переменных следует делать их максимально информативными.

Неявное объявление переменных (implicit variable declaration)

Использование переменной в операторе VBAП является простейшим способом создания этой переменной. Такое создание переменной называется неявным объявлением переменной. Использование переменной в операторе, неявно указывает (объявляет) VBA о создании этой переменной. Когда переменная впервые появляется в операторе, VBA создает переменную, при этом для нее резервируется область памяти. Переменные, созданные неявным объявлением, всегда имеют тип данных Variant. Не смотря на удобство, неявное объявление переменных имеет определенные недостатки. Напрмер, вы можете дважды неявно объявить одну и ту же переменную, думая, что объявляете новую и при этом потерять ранее сохраненное значение. При неявном объявлении переменных могут возникать и другие проблемы, которые впоследствии очень трудно обнаружить. Кроме того, при таком объявлении замедляется скорость выполнения программного кода.

Явное объявление переменных (explicit variable declaration)

Visual Basic for Application предоставляет возможность выполнять явное объявление переменных. Для того чтобы явно объявить переменную используется VBA-оператор Dim (сокращение от слова Dimension). Все переменные, которые создаются с этой формой ключевого слова Dim, являются переменными типа Variant. Для явного объявления переменной используется следующий синтаксис:

Этот оператор указывает VBA создать переменную с именем MyVar.

Переменная объявляется только один раз в отдельной процедуре или модуле. Хорошим правилом считается все явные объявления переменных производить в одном месте в начале процедуры. Явное объявление переменных имеет ряд преимуществ перед неявным:

— ускоряется выполнение программного кода;

— уменьшение количества ошибок в результате неправильного написания имен переменных;

— код становится более читабельным и понятным;

— нормализация использования переменных с заглавными буквами в именах.

Задание типа данных переменной

Независимо от того, объявляются ли переменные явно или неявно, все они являются переменными типа Variant, если только не задается другой тип переменной в объявляющем ее операторе. Объявление переменной, при котором задается тип переменной, называется типизированным объявлением переменной. Типизированное объявление переменной имеет следующий синтаксис:

При типизированном объявлении переменной используется один из нескольких типов данных VBA.

При таком объявлении переменных имеет несколько преимуществ:

— ускоряется выполнение кода программ;

— повышается эффективность кода и сокращается объем памяти, требуемый для программы;

— легче читается и воспринимается программный код;

— легче обнаруживаются некоторые типы ошибок.

Использование специальных символов определения типа для объявления переменных

Существует еще один способ объявления переменных, при помощи специальных символов: !, @, #, $, %, &. Эти символы называют символами определения типа. В более ранних разновидностях Basic такой способ определения переменных был единственно возможным, сейчас же использование оператора Dim с ключевым словом As делает определение типа переменной проще и понятнее. Тем не менее, при неявном объявлении переменной можно задать ее тип, добавив специальный символ в конец имени переменной. При этом этот символ необходимо будет добавлять каждый раз, когда используется имя переменной, иначе будет возникать runtime-ошибка. В таблице приведено соответствие между символами определения и типами данных.

Специальные символы определения типа переменной в VBA

Таким образом, результат действия процедуры с явным объявлением переменной

будет таким-же как и результат действия с неявным объявлением переменной при помощи символа определения типа.

Синтаксис VBA Переменные, константы и типы данных

Переменные — контейнеры для хранения изменяемых данных. Без них не обходится практически ни одна программа. Для простоты переменную можно сравнить с номерком в гардеробе — вы сдаете в «гардероб» какие-то данные, в ответ вам выдается номерок. Когда вам опять потребовались эти данные, вы «предъявляете номерок» и получаете их. Пример работы с переменными в VBA может выглядеть так:

Dim nMyAge As Integer

nMyAge = nMyAge + 10

Перед работой с переменной настоятельно рекомендуется ее объявить. Объявление переменной в нашем примере выглядит так:

Dim nMyAge As Integer

Как расшифровать эту строку:

Dim — это область видимости переменной. В VBA предусмотрено 4 ключевых слова для определения области видимости переменных:

  • Dim — используется в большинстве случаев. Если переменная объявлена как Dim в области объявлений модуля, она будет доступна во всем модуле, если в процедуре — только на время работы этой процедуры;
  • Private — при объявлении переменных в VBA значит то же, что и Dim;
  • Public — такая переменная будет доступна всем процедурам во всех модулях данного проекта, если вы объявили ее в области объявлений модуля. Если вы объявили ее внутри процедуры, она будет вести себя как Dim/Private;
  • Static — такие переменные можно использовать только внутри процедуры. Эти переменные видны только внутри процедуры, в которой они объявлены, зато они сохраняют свое значение между разными вызовами этой процедуры. Обычно используются для накопления каких-либо значений. Например:

Static nVar1 As Integer

nVar1 = nVar1 + 1

Если нет никаких особых требований, то есть смысл всегда выбирать область видимости Dim.

Второе слово в нашем объявление (nMyAge) — это идентификатор (проще говоря, имя) переменной. Правила выбора имен в VBA едины для многих элементов (переменные, константы, функции и процедуры и т.п.). Имя:

  • должно начинаться с буквы;
  • не должно содержать пробелов и символов пунктуации (исключение — символ подчеркивания);
  • максимальная длина — 255 символов;
  • должно быть уникальным в текущей области видимости (подробнее — далее);
  • зарезервированные слова (те, которые подсвечиваются другим цветом в окне редактора кода) использовать нельзя.

При создании программ VBA настоятельно рекомендуется определиться с правилами, по которым будут присваиваться имена объектам — соглашение об именовании. Чаще всего используется так называемое венгерское соглашение (в честь одного из программистов Microsoft, Charles Simonyi, венгра по национальности):

  • имя переменной должно начинаться с префикса, записанного строчными буквами. Префикс указывает, что именно будет храниться в этой переменной:
    • str (или s) — String, символьное значение;
    • fn (или f) — функция;
    • c (или сделать все буквы заглавными) — константа;
    • b — Boolean, логическое значение (true или false);
    • d — дата;
    • obj (или o) — ссылка на объект;
    • n — числовое значение.
    • в ранних версиях VB не было слова Const — все константы определялись как переменные, а для отличия их записывали заглавными буквами, между словами ставили подчеркивания:

    Многие программисты используют такой подход для обозначения констант и сейчас (но использование ключевого слова Const теперь обязательно — об этом будет рассказано в следующем разделе).

    Третья часть нашего объявления — As Integer — это указание на тип данных нашей переменной. Тип данных определяет, данные какого вида можно будет хранить в нашей переменной.

    В VBA предусмотрены следующие типы данных:

    • числовые (byte — целое число от 0 до 255, integer — целое число от -32768 до 32767, long — большое целое число, currency (большое десятичное число с 19 позициями, включая 4 позиции после запятой), decimal (еще большее десятичное число с 29 позициями), single и double — значение с плавающей запятой (double в два раза больше));

    Внимание! Попытка объявить переменную с типом Decimal (например, Dim n As Decimal) приведет к синтаксической ошибке. Чтобы получить возможность работать с типом Decimal, переменную нужно изначально объявить как Variant или вообще объявить без типа (Dim n), поскольку тип данных Variant используется в VBA по умолчанию.

    • строковые (string переменной длины (до примерно 2 млрд символов) и фиксированной длины (до примерно 65400 символов);
    • дата и время (date — от 01.01.100 до 31.12.9999);
    • логический (boolean — может хранить только значения True и False);
    • объектный (object — хранит ссылку на любой объект в памяти);
    • Variant — специальный тип данных, который может хранить любые другие типы данных.

    Можно еще использовать пользовательские типы данных, но их вначале нужно определить при помощи выражения Type. Обычно пользовательские типы данных используются как дополнительное средство проверки вводимых пользователем значений (классический пример — почтовый индекс).

    Некоторые моменты, связанные с выбором типов данных для переменных:

    • общий принцип — выбирайте наименьший тип данных, который может вместить выбранные вами значения. Если есть какие-то сомнения — выбирайте больший тип данных во избежание возникновения ошибок;
    • если есть возможность, лучше не использовать типы данных с плавающей запятой (single и double). Работа с такими типами данных производится медленнее, кроме того, могут быть проблемы при сравнениях за счет округлений;
    • если есть возможность, лучше не пользоваться типом Variant. Этот тип все равно приводится VBA к одному из других типов, но памяти для него требуется больше. Кроме того, в ходе такого неявного образования могут возникнуть ошибки;
    • при определении переменных можно использовать так называемые символы определения типа (% — integer, $ — String и т.п.). Например, в нашем примере нужно закомментировать строку Dim nVar 1 As Integer, а во второй строке написать:

    Такой подход является устаревшим и к использованию не рекомендуется.

    При объявлении переменных можно и не указывать ее тип. Например, наше объявление может выглядеть так:

    В этом случае переменная будет автоматически объявлена с типом Variant.

    В принципе, в VBA можно работать и без объявления переменных. Например, такой код

    nVar1 = nVar1 + 1

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

    • сокращается количество ошибок: программа с самого начала откажется принимать в переменную значение неправильно типа (например, строковое вместо числового);
    • при работе с объектами подсказка по свойствам и методам действует только тогда, когда мы изначально объявили объектную переменную с нужным типом. Например, в Excel два варианта кода будут работать одинаково:

    Dim oWbk As Workbook

    Set oWbk = Workbooks.Add()

    Set oWbk = Workbooks.Add()

    Но подсказка по свойствам и методам объекта oWbk будет работать только во втором случае.

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

    а можно вставлять эту команду во все модули при их создании автоматически — установив в окне редактора кода флажок Require Variable Declarations (меню Tools -> Options, вкладка Editor).

    Проиллюстрировать, зачем они это делают, можно на простом примере:

    С виду код не должен вызывать никаких проблем и просто выводить в окне сообщения единицу. На самом деле он выведет пустое окно сообщения. Причина спрятана очень коварно: в третьей строке n — это вовсе не английская буква N, а русская П. На вид в окне редактора кода отличить их очень сложно. В то же время компилятор VBA, встретив такой код, просто создаст новую переменную с типом данных Variant, у которой будет пустое значение. На выявление такой ошибки может потребоваться определенное время.

    Хорошее правило — объявлять переменные заблаговременно, а не когда они потребовались. Это позволяет сделать программу более читаемой и четко спланированной.

    Можно объявить несколько переменных в одной строке, например, так:

    Dim n1 As Integer, s1 As String

    Присвоение значений переменным выглядит так:

    Если нужно увеличить уже существующее значение переменной, то команда может выглядеть так:

    nVar1 = nVar1 + 1

    В обоих примерах знак равенства означает не «равно», а присвоить.

    При присвоении значений переменным нужно помнить о следующем:

    • строковые значения всегда заключаются в двойные кавычки:
    • значение даты/времени заключаются в «решетки» — символы фунта:

    Обратите внимание, что при присвоении значения даты/времени таким «явным способом» нам придется использовать принятые в США стандарты: 05 в данном случае — это месяц, 06 — день. Отображение же этого значения (например, в окне сообщения) будет зависеть от региональных настроек на компьютере пользователя.

    Если нужно передать шестнадцатеричное значение, то перед ним ставятся символы &H:

    Что содержится в переменных до присвоения им значений?

    • В переменных всех числовых типов данных — 0.
    • В строковых переменных переменной длины — «» (строка нулевой длины).
    • В строковых переменных фиксированной длины — строка данной длины с символами ASCII 0 (эти символы на экран не выводятся).
    • В Variant — пустое значение.
    • В Object — ничто (нет ссылки ни на один из объектов).

    Константы, объявление, ключевое слово Const, встроенные константы, vbCrLf

    Константы — еще один контейнер для хранения данных, но, в отличие от переменных, они не изменяются в ходе выполнения VBA-программы. Для чего нужны константы:

    • код становится лучше читаемым/убираются потенциальные ошибки;
    • чтобы изменить какое-либо значение, которое много раз используется в программе (например, уровень налога) — это можно сделать один раз.

    В VBA константы определяются при помощи ключевого слова Const:

    Const COMP_NAME As String = “Microsoft”

    При попытке в теле процедуры изменить значение константы будет выдано сообщение об ошибке.

    Константы очень удобны при работе с группами именованных элементов (дни недели, месяцы, цвета, клавиши, типы окон и т.п.). Они позволяют использовать в коде программы легко читаемые обозначения вместо труднозапоминаемых числовых кодов. Например, строки

    функционально одинаковы, но в чем смысл первой строки, догадаться гораздо легче.

    В VBA встроено множество служебных констант: календарных, для работы с файлами, цветами, формами, типами дисков и т.п. Просмотреть их можно через справочную систему VBA: Microsoft Visual Basic Documentation -> Visual Basic Reference -> Constants. Про одну из констант (она находится в разделе Miscellaneous) следует сказать особо: константа vbCrLf позволяет произвести переход на новую строку. Например:

    MsgBox («Первая строка» + vbCrLf + «Вторая строка»)

    Множество наборов констант встроено в объектные модели, которые мы будем рассматривать в последних разделах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *