Excel Analysis Blog
BETA
Придется немного поработать


Макросы. Урок второй

Переменные

Продолжим изучение языка vba. Сегодня на очереди переменные. Что это. Если не вдаваться в глубокие подробности, то переменная — это место. Заранее зарезервированное место, в которое вы можете вносить любые записи и изменения. В отличии от настоящих языков программирования, где переменных уделяется особо пристальное внимание, язык vba куда более мягок. Итак, создадим код:

Sub test()
    a = 1
End Sub

По сути, вот прямо так вы создали переменную, с именем «а». Помните, мы говорили про пошаговое выполнение макроса через F8. Сейчас можно очень хорошо дело протестить. Нажмите один раз, у вас строчка Sub подсветиться желтым. После этого наведите курсор мышки на «а». Значение переменной будет неизвестным. После этого нажмите F8 еще раз. Как раз дойдете до строчки, где задается переменная. При этом значение ее до сих пор будет неизвестно, поскольку данная строка кода не отработала. Жмет третий раз, подсвечивается строка завершения макроса, наводите курсор и видите, что значение «а» стало равным 1. Жмем последний, четвертый раз, макрос завершается и вместе с ним с переменной стираются все данные.

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

В место цифры, вы могли также использовать текст. Только не забываем, что текст оформляется в кавычках.

Разумеется, в таком виде, мы мало что имеем. Но ведь переменные можно изменять по ходу выполнения макроса. Делаем следующий пример:

Sub test1()
    a = 1
    a = 2
End Sub

Выполните его пошагово, чтобы убедиться, что значение «а» меняется. Причем курсором можете наводить на любую из двух «а». Поскольку название у них одинаковое, то и для программы это одно зарезервированное место, которое перезаписывается. А вы на него только ссылаетесь.

Вам также можно проводить различные операции и вычислять свои данные

А=1+2

Или лучше так, выполните вот это:

Sub test2()
    a = 1
    b = a + 1
End Sub 

Убедитесь, что переменная «b» посчиталась правильно.

Теперь сама ссылка на переменную. Помним наш первый макрос:

Sub My_first_macros()
    MsgBox "Привет мир"
End Sub

Сделаем тоже самое, но уже с использованием переменной. Для команды MsgBox ссылка на переменную пишется в скобочках.

Sub My_first_macros()
    a = "Привет мир"
    MsgBox (a)
End Sub

Переменные можно использовать не только для расчета, но и для слияния данных. Для слияния, используется знак &.

Sub Sliyanie()
    a = "Привет"
    b = "мир"
    c = a & b
    MsgBox (c)
End Sub

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

Sub Sliyanie()
    a = "Привет"
    b = "мир"
    c = a & "" & b
    MsgBox (c)
End Sub

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

Sub Sliyanie()
    a = "Привет"
    b = "мир"
    c = a & " " & b
    MsgBox (c)
End Sub

Примечание

Ненадолго отвлечемся, что поговорить о том, как делать в коде любые примечание. Тут все просто, но от примечаний языка sql отличия есть. Для создания своих примечаний, используется символ ‘. Все, что расположено после него, макроредактор не воспринимает как код, и не выполняет. Правило распространяется от самого символа и до конца строки. При переходе на новую строчку, код снова активен. Примечания используют все, и довольно часто. Особенное если код длинный, чтобы в будущем самому не путаться, что натворил. Например, так:

'мой макрос на слияние текста и его вывод в форме
Sub Sliyanie()
    a = "Привет" 'здесь я создаю переменную со словом Привет
    b = "мир" 'а вот тут со словом мир
    'вот тут я не хочу писать справа от текста, и напишу здесь, что ниже у меня идет слияние
    c = a & " " & b
    MsgBox (c) 'тут выдается сообщение
End Sub
'а вот эта строчка даже не могла выполниться, потому что после слова End Sub макрос заканчивает работу.

Скопируйте это в редактор. Как видим, для нашего удобства такие фразы подсвечиваются зеленым.

Подсветка ошибок.

Наладим еще VBA-редактор, для нашего удобства. Кроме ошибок в логике выполнения кода, мы можем сделать чисто синтаксическую или грамматическую ошибку. Например, так делать нельзя:

Sub test3()
    a= Привет мир
End Sub 

Значение переменной не взято в кавычки и это грубая ошибка. Редактор автоматически подкрасит вам эту строчку в красный цвет, но еще может выдать такое окно.

Лично меня оно всегда раздражает, ошибаться можно часто, особенно если устал или не выспался, а свернуть его невозможно. Каждый раз нажимать нужно на ОК, иначе не продолжить работу. Слава богу, это можно отключить. В редакторе заходим в Tools → Options → И снимаем галочку с «Auto Syntax Check». Все, теперь подсвечивать красным код будет, а вот ненавистная надпись больше не вылетит. Стоит не забывать, что весь код у вас работать не будет до тех пор, пока есть такие красные строки, макрос просто откажется работать сразу, на начальном этапе. Ну да это и правильно.

Теперь делаем самостоятельное задание.

Скачать примеры урока

Скачать самостоятельное задание