Введение[править]
Для того, чтобы войти в надстройку Visual Basic for Applications и использовать её, нажмите Alt+F11 (более универсальный вариант) или выберите команду
Вид → Макросы (→ Макросы) → Создать. При этом в поле «Находится в» должно стоять значение «Эта книга» (текущая открытая книга) или «Название_имеющейся_книги», чтобы надстройка могла быть связана с данной книгой, используемой в настоящий момент.
Пусть мы создали макрос с именем My в книге Книга1. Появится окно редактирования и отладки программ, приведённое на рис. 3. В папке Modules мы увидем компонент Module1, в котором находится процедура My. Первоначально тело процедуры не заполнено и вся процедура выглядит так:
Submy() EndSub
Мы создали модуль Module1, содержащий процедуру My, который можно использовать в любой книге. Мы можем также создать модуль внутри данной книги. Для этого необходимо два раза нажать на меню «ЭтаКнига» («ThisWorkbook»).
Создадим внутри книги процедуру Hello_World, которая выводит типичное для программистов сообщение «Hello World!» (по-русски — «Здравствуй, мир!»)
В поле General (Общая область) введём следующий код:
SubHello_World() MsgBox"Hello World!" EndSub
Выполним программу. Для этого необходимо нажать клавишу F5 либо кнопку со стрелкой на панели инструментов Visual Basic. На экране мы увидим окно с надписью Hello World! и кнопкой ОК. Нажмём ОК — окно исчезнет, программа завершит свою работу и мы вернёмся в окно редактирования Visual Basic.
Вызов подпрограмм
Подпрограммы из программ на VBA могут быть вызваны различными способами:
-
Процедуру (Sub)с непустым списком параметров можно вызвать только из другой процедуры или функции так:
<имяПроцедуры> <списокПараметров>
Или так:
Call <имяПроцедуры> (<списокПараметров>) ’использована инструкция Call.
-
Процедура с пустым списком параметров рассматривается VBA как командный макрос. Ее также можно вызвать двумя способами:
- из другой процедуры или функции;
- с помощью комбинации клавиш быстрого вызова, команд меню или кнопок панелей инструментов.
-
Функцию
(Function) можно вызывать точно так же, как и процедуру, в виде отдельного оператора. В этом случае возвращаемое функцией значение игнорируется.
Листинг №16. Вызов процедуры
Sub sample11() ' вызывающий макрос Dim usr As String usr = InputBox("Login") Hello usr ' вызов процедуры Helloбез Call Call Hello(usr) ' использование инструкции Call End Sub ' процедура принимает один параметр, формирует строку сообщения, ' выводит сообщение в окно отладчика Sub Hello(usrname As String) Debug.Print "Hello, " & usrname & "!" End Sub
Если в проекте используется несколько подпрограмм с одинаковыми названиями (это возможно, если они в разных модулях), то при их вызове перед именем подпрограммы надо указывать (через точку) имя модуля, в котором процедура расположена:
<имяМодуля>.<имяПроцедуры> <списокФактическихПараметров>
Например
MyModule.MySub fArg, sArg ' вызов процедуры из модуля MyModule
Для вызова общих (Public) подпрограмм из другого проекта дополнительно к именам модуля и подпрограммы указывается имя проекта:
<имяПроекта>.<имяМодуля>.<имяПроцедуры> <списокФактическихПараметров>
Например
someVal = MyProject.MyModule.MyFunc(fArg, sArg) ' вызов функции из проекта MyProject
Операторы Excel VBA
При написании кода VBA в Excel набор встроенных операторов используют на каждом шагу. Эти операторы делятся на математические, строковые, операторы сравнения и логические. Далее мы подробно рассмотрим каждую группу операторов.
Математические операторы
Основные математические операторы VBA перечислены в таблице ниже.
В правом столбце таблицы указан приоритет операторов, принятый по умолчанию при отсутствии скобок. Добавляя в выражение скобки, можно изменять порядок выполнения операторов VBA по своему желанию.
Оператор Действие Приоритет (1 – высший; 5 – низший) ^ Оператор возведения в степень 1 * Оператор умножения 2 / Оператор деления 2 Оператор деления без остатка – возвращает результат деления двух чисел без остатка. Например, 74 возвратит результат 1 3 Mod Оператор модуля (остатка) – возвращает остаток от деления двух чисел. Например, 8 Mod 3 возвратит результат 2. 4 + Оператор сложения 5 – Оператор вычитания 5
Строковые операторы
Основной строковый оператор в Excel VBA – это оператор конкатенации & (слияние):
Оператор Действие & Оператор конкатенации. К примеру, выражение “A” & “B” возвратит результат AB.
Операторы сравнения
Операторы сравнения используются для сравнения двух чисел или строк и возвращают логическое значение типа Boolean (True или False). Основные операторы сравнения Excel VBA перечислены в этой таблице:
Оператор Действие = Равно <> Не равно < Меньше > Больше <= Меньше либо равно >= Больше либо равно
Логические операторы
Логические операторы, как и операторы сравнения, возвращают логическое значение типа Boolean (True или False). Основные логические операторы Excel VBA перечислены в таблице ниже:
Оператор Действие And Операция конъюнкции, логический оператор И. Например, выражение A And B возвратит True, если A и B оба равны True, в противном случае возвратит False. Or Операция дизъюнкции, логический оператор ИЛИ. Например, выражение A Or B возвратит True, если A или B равны True, и возвратит False, если A и B оба равны False. Not Операция отрицания, логический оператор НЕ. Например, выражение Not A возвратит True, если A равно False, или возвратит False, если A равно True.
В приведённой выше таблице перечислены не все логические операторы, доступные в VBA. Полный список логических операторов можно найти на сайте Visual Basic Developer Center.
Создание простой пользовательской функции в VBA
Давайте создадим простую пользовательскую функцию на VBA и посмотрим как там все работает.
Ниже представлен код функции, которая из текста оставляет только цифры, отбрасывая буквенные значения.
Function Цифры(Текст As String) As Long Dim i As Long Dim result As String For i = 1 To Len(Текст) If IsNumeric(Mid(Текст, i, 1)) Then result = result & Mid(Текст, i, 1) Next Цифры = CLng(result) End Function
Чтобы у вас все заработало, необходимо вставить данный код в модуль книги. Если вы не знаете как это сделать, то начните со статьи Как записать макрос в Excel.
Теперь посмотрим как функция работает, попробуем использовать ее на листе:
Прежде чем разбирать саму функцию отметим 2 приятных момента, которые появились после создания:
- Она стала доступна, как и любая другая встроенная функция (как создать скрытую функцию, расскажем далее).
- Когда вы ввели знак «=» и начинаете вводить имя функции, то Excel выводит все совпадения и показывает не только встроенные функции, но и пользовательские.
Разбираем функцию пошагово
Теперь давайте глубоко погрузимся и посмотрим, как эта функция создавалась. Начинается функция со строки
Function Цифры(Текст As String) As Long
Слово Function говорит о начале функции, далее идет ее название, в нашем случае Цифры.
- Имя функции не может содержать пробелов. Кроме того, вы не можете назвать функцию, если она сталкивается с именем ссылки на ячейку. Например, вы не можете назвать функцию ABC123, так как это имя также относится к ячейке в листе Excel.
- Вы не должны указывать на свою функцию то же имя, что и у существующей функции. Если вы это сделаете, Excel будет отдавать предпочтение встроенной функции.
- Вы можете использовать символ подчеркивания, если хотите разделить слова. Например, Сумма_Прописью является допустимым именем.
После названия в круглых скобках описываются аргументы функции. По аналогии со встроенными функциями Excel. В нашем случае используется единственный аргумент Текст. После названия аргумента мы указали As String, это означает, что наш аргумент — текстовое значение или ссылка на ячейку, содержащее текстовое значение. Если вы не укажете тип данных, VBA рассмотрит его как Variant (что означает, что вы можете использовать любой тип данных, VBA его определит самостоятельно).
Последняя часть первой строки As Long задает тип данных, которая возвращает функция. В нашем случае функция будет возвращать целые значения. Это также не обязательно.
Вторая и третья строка функции объявляет дополнительные внутренние переменные, которые мы будем использовать.
Dim i As Long Dim result As String
Переменную i мы буем использовать для перебора символов. А переменную result для хранения промежуточного результата функции.
Задача функции — пройти по всем символам переменной Текст и сохранить только те, что являются цифрами. Поэтому начнем цикл с 1 и до последнего символа.
For i = 1 To Len(Текст)
Len — функция, которая определяет количество символов.
Основная строка функции — это проверка является ли очередной символ текста цифрой и если да — то сохранение его в переменной result
If IsNumeric(Mid(Текст, i, 1)) Then result = result & Mid(Текст, i, 1)
Для этого нам потребуется функция IsNumeric — она возвращает True если текст — число и False в противном случае.
Функция Mid берет из аргумента Текст i-ый символ (значение 1, указывает что функция Mid берет только 1 символ)/
Функция Next — закрывает цикл For тут все понятно.
Цифры = CLng(result)
Этой строкой мы преобразовываем текстовую переменную result, которая содержит все цифры аргумента Текст, в числовое значение. И говорим какой результат должна вывести наша функция Цифры.
Последняя строка кода — End Function. Это обязательная строка кода, которая сообщает VBA, что код функции заканчивается здесь.
В приведенном выше коде описаны различные части типичной пользовательской функции, созданной в VBA. В следующих статьях мы более подробно разберем эти элементы, а также рассмотрим различные способы выполнения функции VBA в Excel.
Выражения и типы данных
При выполнении программы, любое выражение вычисляется до получения конечного результата. Тип данных полученного результата принимается как тип данных всего выражения. Выходя из этого, выражения могут иметь тип:
- строковый;
- числовой;
- логический;
- объектный;
- дата.
Результатом вычисления выражения могут быть специальные значения, обозначаемые ключевыми словами Empty и Null.
- Empty – представляет неинициализированную переменную типа Variant.
- Null – указывает на то, что эта переменная не содержит корректных данных.
Важно!
В одном выражении нельзя использовать несовместимые типы данных.
Если вы будете использовать в выражении разные типы данных, то сначала компилятор VBA попытается самостоятельно устранить это различие и попробует преобразовать операнды в совместимые типы данных. А если это не получится, то тогда компилятор выдаст ошибку несовпадения типов Type mismatch.
Пример исправления компилятором несовместимых типов данных
В данном примере мы используем несовместимые типы данных Integer (целое число) и String (строка). Получается, что нельзя добавить к числу строку. Но, компилятор VBA, обрабатывая наше выражение понимает, что можно преобразовать строку 8 в число и выполнить сложение чисел 3 и 8. В результате мы получим 11.
А вот если мы присвоим переменной myText значение «Hello World», то компилятор не сможет преобразовать его в число. Поэтому при запуске программы мы увидим перед собой сообщение об ошибке: «Run-time error ’13’: Type mismatch».
4 Операторы и операции
Оператор – наименьший элемент кода VBA. Оператор может объявить переменную, установить режим обработки программы (компиляции) или выполнить какое-то действие в программе.
Оператор присваивания
А=1: в=2.5
Записаны два оператора в одной строке. Действия: присвоить переменной А значение 1, переменной в – значение 2,5
Обратите внимание: разделитель целой и дробной части – символ «точка» (.)
В левой части оператора присваивания записывается переменная (простая или структурная – элемент массива). В правой – выражение, которое формируется из констант, имен переменных, функций, арифметических и логических операторов. Порядок вычисления выражения соответствует порядку вычислений в математике (приоритету операций) и может изменяться с помощью круглых скобок.
В VBA семь арифметических операторов.
+ сложение;
— вычитение;
* умножение;
деление;
\ целочисленное деление: остаток отбрасывается, результат не округляется;
mod остаток от целочисленного деления;
^ возведение в степень.
Логические данные могут принимать одно из двух значений:
True – истина;
False – ложь
Эти значения получаются как результат применения операторов отношений:
= равно (обратите внимание, что знак «=» используется двояко: в операторах присваивания он означает «поместить значение, вычисленное выражением справа от знака =, в контейнер (переменную), записанную слева от знака». В операторах сравнения знак означает «сравнить значения выражений слева и справа от знака и, если они равны, вернуть значение True, иначе вернуть значение False)»;.
< меньше;
> больше;
<= меньше равно;
>= больше равно
<> не равно.
Для данных строкового типа при сравнении учитывается регистр и пробелы.
Для логических данных определены логические операции:
And И, Конъюнкция (соединение, логическое умножение), результат: истина, когда истинны оба операнда.
Or ИЛИ, дизъюнкция (разделение, логическое сложение), результат истина, когда истинен одни или оба операнда
Xor Исключающее ИЛИ, результат истина, когда истиннен один из операндов.
Not Отрицание,меняет логическое значение на противоположное.
Для строковых данных определена единственная операция – конкатенация, объединение нескольких строк в одну, символ операции: & или +. Различие в использовании разных символов для одной и той же операции состоит в том, что в первом случае данные, участвующие в операции будут (если это возможно) автоматически преобразованы к строковому типу.
Кавычки служат для обозначения строковых данных, они не являются частью значения строкового данного.
Примеры:
str =»первая» & » и вторая » + «строка»,
результат:
«первая и вторая строка»
Команда:
» Text » & 34
в результате даст
Text 34
Команда
» Text » + 34
– даст сообщение об ошибке Type mismatch – смешаны типы. В подобных случаях следует использовать функции преобразования текста в строку, как показано ниже
Команда
» Text » + cStr (34)
даст корректный результат:
Text 34
Работа с диапазонами ячеек
Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.
Примеры работы с Range
Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
- Считали группы из очередной строки.
- Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
- Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
- После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.
Для упрощения работы рекомендую определить следующие функции-сокращения:
Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».
Теперь надо перенести всякую информацию в result
Подогнать столбцы по ширине и выбрать лист result для показа результата
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Уже лучше:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
Осталось лишь добится пропусков перед началом новой группы. Это легко:
В цикле расстановки заголовков
В точности то, что и хотели.
Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.
Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.
Спасибо за внимание. UPD: Перезалил пример на Dropbox и min.us
UPD: Перезалил пример на Dropbox и min.us.
UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.
Excel VBA Operators
The built-in VBA operators consist of mathematical operators, string operators, comparison operators and logical operators. The different types of Operators are discussed individually below.
Mathematical Operators
The main Mathematical VBA operators are listed in the table below.
The precedences that are listed alongside the operators are the defaults, which are applied in the absence of brackets. However, the order in which the VBA operators are applied can be controlled by adding brackets to an expression:
Operator | Action | Precedence(1=top; 5=bottom) |
---|---|---|
^ | The power operator | 1 |
* | The multiplication operator | 2 |
The division operator | 2 | |
\ | The integer division operator (divides two numbers and returns the integer result — e.g. 7\4 gives a result of 1) | 3 |
Mod | The modulus operator (divides two numbers and returns the remainder — e.g. 8 Mod 3 gives a result of 2) | 4 |
+ | The addition operator | 5 |
— | The subtraction operator | 5 |
String Operators
The concatenate operator & can be used to join strings together.
Operator | Action |
---|---|
& | The concatenate operator (e.g. «A» & «B» gives the result «AB») |
VBA Comparison Operators
Comparison operators compare two numbers or strings and return a logical (True or False) result. The main Excel VBA comparison operators are listed in the table below:
Operator | Action |
---|---|
= | Equal To |
< > | Not Equal To |
< | Less Than |
> | Greater Than |
<= | Less Than or Equal To |
>= | Greater Than or Equal To |
VBA Logical Operators
Logical operators also return a logical (True or False) result. The main Excel VBA logical operators are listed in the table below:
Operator | Action |
---|---|
And | Logical Operator And (e.g. the expression ‘A And B’ returns True if BOTH A AND B are true and returns False otherwise) |
Or | Logical Operator Or (e.g. the expression ‘A Or B’ returns True if EITHER A OR B is true and returns False otherwise) |
Not | Negates an evaluation (e.g. the expression ‘Not A’ returns True if A is false and returns False if A is true) |
It should be noted that the above tables do not provide an exhaustive list of VBA operators. A more complete list can be obtained from the Visual Basic Developer Center Website
Циклы
Организация циклов в программах встречается довольно часто и применяется для двух основных случаев: когда нужно повторить фрагмент программы
определенное количество раз и когда это повторение осуществляется до тех пор, пока выполняется некое условие.
Цикл For…
Классический образец цикла для случаев, когда известно, сколько раз он должен быть повторен, либо это можно вычислить.
Общий синтаксис:
For счетчик = start To end Next
В приводимом далее примере находится произведение четных чисел (шаг = 2) от 2 до введенного пользователем значения y.
Если произведение превысит 1 трлн, то произойдет выход из цикла. Нетрудно убедиться, что i достигнет только 24, а y будет равен 1,961,990,553,600.
Dim i As Byte, x As Double, y As Integer x = 1 y = InputBox() For i = 2 To y Step 2 x = x * i If x > 1000000000000 Then Exit For End If Next i
Программа не содержит никаких проверок и вывода результата, но, если пользователь введет не то, цикл просто не будет выполняться.
Далее — важный для начинающих момент.
Строка «x = x * i» означает, что переменной x будет присвоен результат ее текущего значения, умноженный на четное i.
После этого производится сравнение.
Запись триллиона в явном виде, а не как 10^9 экономит ресурсы, так как иначе производилось бы возведение в степень на каждом повторении цикла.
For Each In…Next
Объектно-ориентированное программирование предполагает наличие объектов, состоящих из «кучи» элементов.
Результатом стал специализированный цикл For без счетчика, но с перебором каждого (Each) элемента, спрятанного внутри какого-то объекта (In).
Общий синтаксис:
For Each элемент In имя_объекта(массива) Next
Современная модель приложений MS Office во многом не позволяет обратиться к необходимым сведениям другим способом.
Цикл While…Wend
Один из важнейших в программировании циклов, завершение которого определяется выполненностью условия.
Таким образом, число итераций цикла может быть от нуля до бесконечности.
Общий синтаксис:
While <условие> Wend
Условие является обязательным и может представлять собой символьное или числовое выражение, анализ которого возвращает истинное или ложное значение (то есть логическое).
Если результатом вычисления будет значение Null, то оно расценивается как ложное.
Тело цикла выполняется при истинном значении условия, вплоть до оператора Wend, а затем вновь возвращается на строку While для повторной оценки условия.
Если оно истинно, то происходит повтор тела цикла.
Иначе происходит завершение цикла и исполнение программы продолжается со строки, идущей после Wend.
Цикл While может быть вложенным.
Обратите внимание, что принудительного выхода из цикла нет: только анализ исходного условия!
Для того, чтобы его реализовать, следует воспользоваться циклом Do…Loop.
Эта реализация цикла лучше всего подходит для так называемого «зацикливания» программы, когда он повторяется бесконечно.
Ремарка: прервать ситуацию можно клавишами Esc (если разработчик ее не заблокировал) и Ctrl+C.
Цикл Do (While…|Until…)… Loop
Данный цикл в том или ином виде используется в большинстве языков программирования и исполняется, пока (While) истинно условие или пока условие не будет достигнуто (Until).
Общий синтаксис:
Do {While|Until} <условие> Loop
или
Do Loop {While|Until} <условие>
Из синтаксиса следует, что условие можно задать в конце. Тогда цикл будет обязательно исполнен хотя бы один раз.
Во многих языках, чтобы добиться этого, приходится предпринимать дополнительные усилия.
Число команд Exit Do внутри тела не ограничено и обычно реализуется через ветвление с использованием If…Then.
При таком завершении, исполнение программы продолжается со строки, идущей после Loop.
Конструкция With…End With
Не являясь циклом, данная конструкция позволяет существенно сократить исходный код, повысив его читабельность или скорость нахождения в нем нужного элемента.
Она предназначена для случаев, когда объектные выражения с одинаковым началом (нередко довольно длинным) повторяются много раз.
Макрорекордер использует эту конструкцию слишком часто, что приводит к необходимости обратного действия — сборке конструкции в одну строку.
Понятно, что в следующем примере речь идет о поиске — всё, что внутри конструкции — строки которого не нужно выискивать в программе.
Фраза «Selection.Find» записана только один раз. Все строки, которые должны получить её в начало, следует начинать с точки.
With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = "?" .Replacement.Text = "!" ... End With
Без With это выглядело бы так:
Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting Selection.Find.Text = "?" Selection.Find.Replacement.Text = "!" ...
Переменные[править]
Ситуация с переменными в VBA похожа на ситуацию в языке программирования Pascal. Однако в Visual Basic, в отличие от Паскаля, можно не объявлять переменные до начала их использования в программе. VBA сам определяет тип переменной, когда встречает её в программе. Однако это не оптимальный вариант. Прежде всего, программа будет работать медленнее. Более того, если будет ошибка в имени переменной, то Visual Basic создаст новую переменную, а не выведет сообщение об ошибке. Для того чтобы нельзя было использовать переменных без их описания, мы должны в начало программы поместить оператор Option Explicit. Если после этого VBA обнаружит не объявленную ранее переменную, то на экран будет выведено сообщение «Variable not defined» («Переменная не определена»).
Описание переменных задаётся следующим образом:
Dim <имя_переменной> As <тип_переменной>
Примеры:
DimiAsInteger DimSAsString DimMy_dateAsDate,numAsSingle
В примере 3 было объявление нескольких переменных в одной строке
Типы переменныхправить
- Boolean (логический тип). Только два значения: True или False. 2 байта
- Byte (байтовый). Целые числа в диапазоне от 0 до 255. 1 байт
- Integer (целый). Целочисленные значения в диапазоне от -32768 до +32767. 2 байта
- Long (длинное целое). Целочисленные значения в диапазоне от -2147483648 до +2147483647. 4 байта
- Single (числа с плавающей точкой одинарной точности). Численные значения в диапазоне от -3,402823E+38 до +3,402823E+38. 4 байта
- Double (числа с плавающей точкой двойной точности). Значения в диапазоне от -1,797693313486232D+308 до +1,797693313486232D+38. 8 байт
- Currency (денежный). Денежные значения от -$922337203685477,5808 до $922337203685477,5808. 8 байт
- Date/Time (дата/время). Значения даты и времени. Дата может находиться в диапазоне от 1 января 100 года до 31 декабря 9999 года. 8 байт
- String (строковый). Строки, состоящие из 0-654000 алфавитно-цифровых символов. 1 байт на символ
- Variant (общий). Для всех типов данных. 16 байт
Преобразование типовправить
Для преобразования переменных одного типа в переменные другого типа есть набор функций с названиями, которые образуются следующим образом: (буква C — латинская)
Пример:
DimNAsInteger DimSAsString S="42.66" N=CInt(S) MsgBoxN
После выполнения данного кода на экран выведется число 42.
Таблица функций преобразования типов:
Cbool | Преобразование к типу Boolean |
CCur | Преобразование к типу Currency |
CDate | Преобразование к типу Date |
CLng | Преобразование к типу Long |
CDbl | Преобразование к типу Double |
CInt | Преобразование к типу Integer |
CSng | Преобразование к типу Single |
CStr | Преобразование к типу String |
Продолжение инструкции по нескольким строкам
Оператор обычно помещается в одну строку, но если он слишком длинный, его можно продолжить на следующей строке, используя последовательность продолжения строки, которая состоит из пробела, за которым следует символ подчеркивания (), за которым следует возврат каретки. В следующем примере исполняемый оператор продолжается на две строки.
Неявное продолжение строки
Во многих случаях оператор можно продолжить в следующей строке подряд, не используя символ подчеркивания (). Следующие элементы синтаксиса неявно продолжают оператор в следующей строке кода.
-
После запятой (). Например:
-
После открытой скобки () или перед закрывающей скобкой (). Например:
-
После открытой фигурной скобки () или перед закрывающей фигурной скобкой (). Например:
Дополнительные сведения см. в разделе Инициализаторы объектов: именованные и анонимные типы или Инициализаторы коллекций.
-
После открытого внедренного выражения () или перед закрытием внедренного выражения () в XML-литерале. Например:
Дополнительные сведения см. в разделе Внедренные выражения в XML.
-
После оператора объединения (). Например:
Дополнительные сведения см. в разделе Операторы, перечисленные по функциональным возможностям.
-
Операторы присваивания после (, , , , , , , , , ). Например:
Дополнительные сведения см. в разделе Операторы, перечисленные по функциональным возможностям.
-
После бинарных операторов (, , , , , , , , , , , , , ) в выражении. Например:
Дополнительные сведения см. в разделе Операторы, перечисленные по функциональным возможностям.
-
После операторов и . Например:
Дополнительные сведения см. в разделе Операторы, перечисленные по функциональным возможностям.
-
После символа квалификатора элемента () и перед именем элемента. Например:
Однако при использовании инструкции или при указании значений в списке инициализации для типа необходимо включить символ продолжения строки () после символа квалификатора элемента. При использовании инструкций или списков инициализации объектов рекомендуется разорвать строку после оператора присваивания (например, ). Например:
Дополнительные сведения см. в разделе With… Оператор End With или инициализаторы объектов: именованные и анонимные типы.
-
После квалификатора свойства оси XML ( или или ). Однако при указании квалификатора элемента при использовании ключевого слова необходимо включить символ продолжения строки (). Например:
Дополнительные сведения см. в разделе Свойства оси XML.
-
После знака «меньше» (<) или перед знаком «больше» () при указании атрибута. Кроме того, после знака больше () при указании атрибута. Однако при указании атрибутов уровня сборки или модуля необходимо включить символ продолжения строки (). Например:
Дополнительные сведения см. в статье Общие сведения об атрибутах.
-
Операторы запроса до и после (, , , , , , и ). Нельзя разорвать линию между ключевыми словами операторов запросов, состоящими из нескольких ключевых слов (, , и ). Например:
Дополнительные сведения см. в статье Запросы.
-
После ключевого слова в операторе . Например:
Дополнительные сведения см. в разделе For Each… Следующий оператор.
-
После ключевого слова в инициализаторе коллекции. Например:
Дополнительные сведения см. в разделе Инициализаторы коллекций.