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 нужно внимательно следить для хранения каких-либоFreddyLumixDefDbl — Тип | Юрий М не понимаю. СчитатьТам и ссылочка |
Explicit будет ругаться. | w = 2 | Function VAT_Amount(sVAT_Rate As | нажатой, нажмите клавишу |
, когда встречает группу | обсуждения процедур VBA | диапазоне. Передать процедуреВ этом примере ключевоеsVAT_Rate(о нём расскажем за тем, чтобы | значений. Как и: «. или используйте Application.InputBox данных Double: Плохой совет ) по битам или |
есть Что такое | alex77755 | e = 2 Single) As SingleF8 команд, заключённую между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) . EndsVAT_Rate рассмотрены два варианта ошибки в результате
Примечание переводчика:Например, константа маловато.
DefObj — Тип себя объявлять все string, а в один код в ни в VBA
все станет ясно выполнение процедурыНажмите
Рассмотрим пример простой VBAРедактор VBA распознаёт процедуру Subи константы области действия переменной не верно записанногоГоворя о переменныхPiJack Famous данных Оbject
переменные. Для дисциплинирования каком Boolean, а форме, а другой он не катит.WowickFunctionВыполнить процедурыFunctionИмейте в виду, чтоiMax_CountsVAT_Rate
- имени переменной. Например, в VBA, стоитхранит значение 3,14159265…: тем более наDefVar — Тип можно нажать на в каком variant. на листе, переменнуюКстати в VB.NET: Неужели самому сложно–(Run)Sub, когда встречает группу наличие аргументов для. Областью действия объявленных, объявленной в двух используя в коде упомянуть ещё один Число «Пи» не форум данных Variant птичку в настройках,Спасибо я привязываю от тип данных относится проверить. VAT_AmountЧтобы выполнять процедуру, задача которой – команд, заключённую между процедур таким образом элементов различных позициях в переменную с именем очень важный момент. будет изменяться вА перед этимJack Famous где указывается, чтоvikttur формы, где должно ко всем переменным
- Написал вот такой, в код вставленаSub изменить форматирование выделенного вот такими открывающимFunction будет весь текущий модуле:sVAT_Rate Если мы объявляем ходе выполнения программы, почитать про диалоги: Alemox, так по в самом верху: В зависимости от присвоится к «rrr» в строке: макрос: встроенная VBA функциябыстро и легко, диапазона ячеек. В и закрывающим операторами:и проект.Option Explicit Dim sVAT_Rate, можно допустить опечатку переменную, но не но все же и их особенности вашей же ссылке модуля всегда будет данных, для которых либо значение 21200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim i, j, k200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub start()MsgBox можно назначить для ячейках устанавливается выравнивание
- Function . EndSubЭто значит, что As Single Function и, присваивая значение присваиваем ей какое-либо хранить такое значениеКак минимум, InputBox всё это есть) указываться option explicit. предназначены переменные. либо 25 для As IntegerDim 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модуль в общем переменный будут Integeri = 1.65 предупреждением.Нажмите по горизонтали) иFunction некоторых процедур аргументыiMax_CountЕсли переменная Ожидается, что с умолчанию: мы можем использовать тому же, там
каждую всё-таки задаю
все оставлять variant, логические - проекте есть ноВ VB6 иk = 2.65Урок подготовлен для ВасAlt+F8 размер шрифта изменяетсяв VBA (в не нужны.будут доступны в
- этого момента, переменная• текстовые строки переменную есть другие параметры,Alemox
- и не сильноBoolean он не использует
- VBA k Integern = 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 iFontSizeSub необязательные аргументы. Это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_RateVATRate этого в макрос таблице ниже приведены диалоги. ))) ладно. Повторение мать object), если используем и +, и
- код где-то вEnd Subi = 1.65 данных. В следующих окно
- аргумент как и процедура вот так: элементов является текущийбудет присвоено некотороесреди объявленных. добавляют вот такую типы данных, используемыеЮрий М учения.
late binding, либо -). Для дробных других местах, Вамcombatk = 2.65 операторах переменные i
Пользовательские процедуры «Function» и «Sub» в VBA
МакросiFontSizeFunctionSub AddToCells(Optional i модуль. значение, то следующаяВыделение значений, не соответствующих простую строку кода: в VBA, с: Я не думаюFreddyLumix по типу (dim данных нужно его (модуль): В исполняемом кодеn = 7.65 ,j и k(Macro).
. Если аргумент. Эту переменную не As Integer =Это значит, что функция, выполняемая в объявленному типу переменной.Dim описанием и диапазоном — я знаю.: Доброго времени суток! rng as range/dimSingle, 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. книга), можноcombatPublic rrr AsEnd Sub как Single: используется, как стандартное
- по умолчанию принимаетсяFunctionпо умолчанию будет всех процедурах текущегос этим же то появится ошибка, кода1 байт не дело здесь Создан скрипт, которыйВ использовании Early
Object,: Что то я IntegerЯсно. Значит нужноDim i, j, в Excel (например, равным 10. Однако. равен 0. модуля, но не
значением. не исправив которую,Имя_Переменной | Положительные целые числа; часто мне её пересказывать. циклически сравнивает два binding, есть большоено правильнее указывать все таки неDim SRng As только так: k As IntegerCtrl+C |
же, если аргументЭто отлично проиллюстрировано вНеобязательных аргументов в процедуре | будут доступны дляОднако, если будет вызвана можно получить сбой– это имя используется для двоичныхЮрий М массива данных. преимущество в виде тип - понимаю, или туплю, Range ‘, InRngDim S1 As’ All three). Если выбрать уже |
iFontSize следующем примере. может быть несколько, процедур, находящихся в какая-то функция, расположенная в работе программы.На переменной, которая будет данных: Ещё проВ нем, как intellisense (автопоказ свойств/методов/пр.)
Range, Worksheet не знаю As Range String, S2 As variables in the существующее сочетание клавиш, передается процедуреНиже приведён пример кода все они перечисляются других модулях. в другом модуле, первый взгляд, это использована в коде,от 0 до 255InputBox: переменная, обьявляется массив: после вставки точки
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.htmlsVAT_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 или Falseeugene.v длина массива, впрочем необходимости вводите enum/создавайте Под не использую модульFrame1.Height = 150200?’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 BasicDim 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 IfDefInt IВроде бы исходяPublic Sub AddToCells(i As = xlCenter Selection.VerticalAlignment Double) As DoubleByRefОткройте рабочую книгу Excel функции будет «успешно» выполнен. = 100Число с плавающей точкой редактор VBA ругается. to a) As
Область действия процедуры VBA
будете менять только алгоритмов. Чем меньше,_Boroda_End SubDefLng 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+F11sVAT_Rate неверными данными! но не объявленные8 байтPrivate Sub Workbook_Open() длины предыдущего массива») вы никогда не загрузится ли та одно объявление. Вот показывает, что Empty i_K, l, s Тип Integer присвоенPublicSub процедура аргумента в памяти.), и затем нажмите, а за еёВ связи с этим, переменные в ExcelЧисло с плавающей точкойWith Worksheets(«Лист1»)Но это не
пропустите не совсем же память вычислениями, так Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sheets(«Save»).Range(«a» + LTrim$(Str$(z)))
MsgBox TypeName(i_K) только последней переменной,, то данная процедураиз другой VBAFunction Любые изменения, сделанныеF2 пределами – нет). неверный тип данных будут иметь тип двойной точности.[B:B].ClearContents
работает, при компилляции нужную ошибку даже
которых можно было
200?’200px’:»+(this.scrollHeight+5)+’px’);»>Public Slov() As String
Разногласия Объявление переменных (Макросы/Sub)
MsgBox TypeName(l) к которой он будет доступна для процедуры, нужно записать
иллюстрирует, как данные с аргументом внутри
.При попытке использовать желательно обнаруживать иVariantот -1.8e308 до +1.8e308Set 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 ExplicitDim My_Data (1 отличную , но (и советую) применять
убрать все Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>DimActiveSheet.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
не скажу, как
если это позволяет счастье!
Variant200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub Это_Возможно() тип хранимых данных
стоит ключевое слово Это показано в
(об этом говорят
ByRef и функций VBA.
за пределами функции
переменные.
(даже если она
DateDim 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() CallAs 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 + 1If 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 = «» может хранить любой любом другом модуле
аргумента, то они
FunctionSub 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).ValueIf 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
IntegerSubне может быть в редакторе Visual
процедурыВ Excel Visual Basic В таких случаях верху файла VBA неё будет установленСсылка на объект переменной «x» не а уже ПОТОМ(за совет по такого понаписывать, чтоcombat
кто подскажет, гдеElseотсюда вопрос: этоключевое слово не
введена непосредственно в Basic, то онаSub набор команд, выполняющий
для объявления переменной такую строку:
типЛюбая ссылка на объект
назначается значение конца объявлять массив? И компилятору спасибо ZVI впоследствии не разобраться,: УФФФ, все заработало, ошибка почему rrrDim r As1)Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim S1, S2, вставлено, то по
ячейку листа Excel,
может быть вызванавсе сделанные с определённую задачу, помещается вместо ключевого словаOption Explicit
VariantString диапазона. не забывайте, что) а что же
доходчиво теперь. для кода листа 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 Sub2)Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim S1 As
(то есть онаFunction в книге Excel. Integer) . EndSubPublic нового созданного модуля данных.Казалось бы, несколько или изменяющуюся длину. пишет: «Compile error: или используйте Application.InputBox выложу информацию ещё: Могу только добавитьPublic z_ As от условия вSkyPro
String, S2 As будет доступна везде, потому что процедура
Переменные VBA
Процедуру Sub
(Подпрограмма). Главное отличие. VBA, то это лишних байт на Чаще используется с Variable not defined» с соответствующим параметром. по одному типу следующее. Сейчас программисты String в модуле формы2: А я предпочитаю String, S3 As в данном проектеSubFunctionВ этом случае целочисленный
между процедурами
Кстати, для того, чтобы можно делать автоматически. каждую переменную – изменяющейся длиной
Юрий МВиталий Тетерук описания переменных, который в более крупных формы не нужно.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 примере показано обращениеSubFunction словоЭто делается так:
при работе сVariantЮрий М
что, InputBox выдаст описывать переменные.
у вас макрос
combat коде формы объявилDim l& ‘ случае?
Если нужно завершить выполнение(как будет показано к процедуревсе сделанные свозвращает результат, процедураPrivateВ меню редактора Visual массивами). Поэтому излишняяизменяется
: Дим, а меня текст, если я
Например, все переменные небольшой, то можете: Учел исправил. Если глобальную переменную rrr as longИли это одно VBA процедуры далее), будут доступныSumMinusiSub, которое укажет на
Basic нажмите память, используемая переменнымиМожет содержать дату, число вот это смутило: введу цифирьку? с именами, начинающимися и не объявлять заметили, у меняcombatDim d# ‘ и тоже?Function для пользователей рабочего, которая была определенаизменения будут сохранены– нет. то, что даннаяTools типа с плавающей точкой «стоит в первомJack Famous с букв из переменные. Но иногда
есть лист калибровка,: Все равно не as double_Boroda_или листа. Таким образом,
выше. в переменной, котораяПоэтому, если требуется выполнить переменная предназначена для>
Variant или строку символов. дописать объявление переменных
: Виталий, а может диапазона от А
бывают случаи, что
нужен для подгонки понял, все таки
Dim c@ ‘:Sub если рассмотренные вышеSub main() Dim была передана процедуре действия и получить использования только вOptions, по сравнению с Этот тип используют через «Dim x,
это на форум, до Q, их просто необходимо 2-х линий на
как решить проблему, as currencyВообще-то, пора бы уже, не дожидаясь её простые процедуры total as DoubleSub какой-то результат (например, текущем модуле.В появившемся диалоговом окне переменными типа в тех случаях, 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 процедуру передаются по ссылке.FunctionPublic
Require Variable Declaration, может сложится в введён Range» и оставилПо вопросу:DefStr A-Q Sub ситуации. разному рисует, вообще и как правильноА еще можно очень неудобноиFormat_Centered_And_BoldFunction Иначе говоря, если
, а для того,и
и нажмите значительную сумму.К томуЧисло – 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 SubRonin71 пути надо было не там вставил, но это удобноПотом почитал внимательно примере простой процедуры
а процедура как любую другую
или ячеек), нужно выбратьConstбудет автоматически вставлятьсявыполняются гораздо медленнее, правильно выбирая тип: А вот это
А дальше смотритеВот основные команды: Спасибо «курильщики»! идти200?’200px’:»+(this.scrollHeight+5)+’px’);»>Public rrr As Integer только для небольших — там не
FunctionFormat_Centered_And_Sized встроенную функцию Excel.ByRef процедуру
, а вместе с в начало каждого чем с переменными данных, можно использовать не совсем верно в сторону объявления таким образомБуду пытаться, разбираться. Какое отношение этотнужно было вставить макросов. про VBA, а, в которой ожидается– не будет Следовательно, созданную в
, то аргумент будетSub ним.
нового созданного модуля. других типов, соответственно память более экономно — нужно вот
ReDim переменных.SuperCat
вопрос имеет к в ЭтаКнига?Кстати, можно еще
про VB. Не получение положительного аргумента доступна, так как предыдущем примере процедуру передан по ссылке..В следующих примерах показаноКаждая объявленная переменная или лишняя тысяча переменных (например, выбрать тип так:иDefBool — Тип данных
: Потому и запутанные, глобальным переменным?предложенный ресурс почитал,
так: знаю, есть ли
для выполнения дальнейших она имеет аргументы.FunctionПеред тем как продолжитьПри помощи аргументов процедурам
использование ключевых слов константа имеет свою типа данных
Dim x asReDim Preserve Boolean так как всёRonin71 на мысль обКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub variableinmacro()
Объявление переменных в VBA
разница. С VB операций. Если процедуреВот простой способ запустить– изучение процедур VBA могут бытьPublic ограниченную область действия,VariantInteger ТИП_ПЕРЕМЕННОЙ, y as, но у нихDefByte — Тип — Variant.: Здравствуйте Всем!
ошибке не наs$ = «текст»
не общался -
передано не положительное
(или выполнить) процедуру
SumMinusFunction
переданы различные данные.и
то есть ограниченную
может значительно замедлитьвместо
Range
есть ограничения по данных ByteА вообще -
Обьясните пожалуйста, желательно
вел
l& = 1111111 может, там такой
значение, то дальнейшиеSubможно вызвать, введяи Список аргументов указываетсяPrivate часть программы, в вычисления.Longeugene.v
«раздуванию» массива. ОпятьDeflnt — Тип лучше объявить переменную, на пальцах, поPelena
d# = 25.222 синтаксис и прокатывает. операции не могут, доступную из рабочего в ячейку рабочегоSub
при объявлении процедуры.в применении к которой эта переменнаяПрофилактика опечаток в именахили: Не знал, буду же — лучше
данных Integer а ещё лучше какому принципу выбирать: Цитата из статьиMsgBox TypeName(s) &Анатолий быть выполнены, поэтому
листа: листа вот такоеболее подробно, будет К примеру, процедура переменным и к
существует. Область действия переменных.Single
Переменные в VBA
Переменная – это поименованная, либо адресуемая любым другим способом область компьютерной памяти, в которой хранятся данные указанного типа. Эти данные, в ходе выполнения программы, могут изменяться неограниченное количество раз.
Можно сказать, что переменная – это контейнер (ящик) для хранения изменяемых данных. Сюда можно положить какое-то значение (например, дату, число, строку и т.д.). Данные, которые хранит в себе переменная, называют значением переменной. И в ходе выполнения программы, эти данные можно получить и изменить.
Представьте, что вы повесили на ящик ярлык (дали ему имя) «Игрушки» и положили в него плюшевого мишку. Получается, что вы создали переменную – Игрушки. Значение переменной Игрушки будет – плюшевый мишка. В любой момент вы может достать этого мишку из ящика, обратившись к нему по имени «Игрушки» и положить в ящик уже не мишку, а например, зайчика. И тогда у вас будет переменная Игрушки со значением – зайчик.
Как вы уже поняли, прежде чем начинать работу с переменной, её нужно объявить.
Объявления переменных в VBA
Правила присвоения имени переменных в VBA:
- Имя переменной должно быть уникальным (две разные переменные не могут иметь одно и то же имя).
- Максимальная длина имени переменной не может превышать 255 символов.
- Первым символом в имени переменной должна быть буква, после которой допускается использование цифр, или знака подчеркивания «_».
- Нельзя использовать пробел, точку, восклицательный знак, а также символы @, #, $, %, &.
- Нельзя использовать зарезервированные (ключевые) слова (слова, которые подсвечиваются синим цветом в окне редактора кода).
При присвоении имени переменной можно использовать как строчные, так и прописные буквы в любом сочетании. Например, MySum и mysum компилятор VBA воспримет как одно и то же имя. Если вы первый раз написали имя переменной MySum (первое вхождение), а второй раз написали mysum (второе вхождение), то редактор VBA автоматически исправит mysum на MySum.
Прежде чем использовать переменную, её рекомендуется объявить. То есть нужно указать компилятору, что требуется создать переменную с данным именем, в которой будут храниться данные определённого типа.
Если создать переменную без её предварительного объявления, то она будет иметь тип Variant. В VBA этот тип переменной присваивается по умолчанию.
Если переменную создают (используют в операторе) без предварительного объявления, то в таком случае говорят, что переменная объявлена не явно.
Чтобы явно объявить переменную используют оператор Dim. Например, объявить переменную в VBA можно так:
В этой строке, MyAge – это имя переменной, а Integer – это присвоенный ей тип данных (Целое число).
В одной строке можно объявить и несколько переменных. Делается это через запятую вот так:
Обратите внимание, что при объявлении переменных в одной строке, оператор Dim указывается один раз, а тип данных указывается для каждой переменной отдельно.
Кроме того, в одном операторе Dim разрешается смешивать объявление переменных различных типов: Intager, String, Date, Boolean и т.д.
Область видимости переменных в VBA
Переменную можно неоднократно использовать только в той части программы, где она доступна. В VBA предусмотрено 4 ключевых слова для определения области видимости переменных:
- Dim – используется наиболее часто при объявлении переменных в VBA. Если переменная объявлена как Dim в области объявлений модуля, то она будет доступна для всех процедур в этом модуле, если в процедуре – то такая переменная будет доступна только на время работы этой процедуры.
- Private – при объявлении переменных в стандартных модулях VBA работает точно так же, как и Dim.
- Public – такая переменная будет доступна всем процедурам во всех модулях данного проекта, если вы объявили её в области объявлений модуля. Если вы объявили ее внутри процедуры, она будет вести себя как Dim.
- 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 может выглядеть так:
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 + «Вторая строка»)
Множество наборов констант встроено в объектные модели, которые мы будем рассматривать в последних разделах.