# Секреты языка Vba

Игорь Александрович Петраков

Моя работа о языке Visual Basic

Игорь Александрович Петраков


СЕКРЕТЫ ЯЗЫКА VBA


Работа выполнена в апреле 2022 года.


Омск 2022


СОДЕРЖАНИЕ


-- КАК ЗАПУСТИТЬ РЕДАКТОР VBA

-- КАКИЕ ОКНА ЕСТЬ В РЕДАКТОРЕ VBA

-- КАК ВСТАВИТЬ НОВУЮ ФОРМУ И ЭЛЕМЕНТЫ УПРАВЛЕНИЯ?

-- КАК ДОБАВИТЬ ИЛИ ПЕРИМЕНОВАТЬ НОВЫЙ МОДУЛЬ?

-- КАК НАПИСАТЬ ПРОСТЕЙШУЮ ПРОГРАММУ НА VBA?

-- КАК СДЕЛАТЬ КНОПКУ ДЛЯ ЗАПУСКА ПРОГРАММЫ В WORDe?

-- КАК НАЗНАЧИТЬ КОМБИНАЦИЮ КЛАВИШ ДЛЯ ВЫЗОВА ПРОГРАММЫ?

-- КАК ПРИСВОИТЬ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ?

-- КАКИЕ ОПЕРАТОРЫ ИСПОЛЬЗУЮТСЯ В VBA?

-- ПРИМЕР РАБОТЫ С ПЕРЕМЕННЫМИ ( ВАШИ ПРОФЕССИИ )

-- ПРИМЕР РАБОТЫ С ЧЕКБОКСАМИ ( ВАШИ ПРОФЕССИИ )

-- ПРИМЕР РАБОТЫ С ПЕРЕМЕННЫМИ ( ЮНИКУМ )

-- КАКИЕ ГЛАВНЫЕ УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ ЕСТЬ В VBA И ПРИМЕРЫ С НИМИ?

-- МАТЕМАТИЧЕСКИЕ ФУНКЦИИ VBA.

-- ФУНКЦИЯ INPUTBOX

-- ПРИМЕР ПРОГРАММЫ ДЛЯ ВЫВОДА ЭКРАННОЙ ФОРМЫ

-- СВОЙСТВА ЭКРАННОЙ ФОРМЫ

-- КАКИЕ ЕСТЬ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ И КАК ИХ ДОБАВИТЬ В ФОРМУ

-- ПЕРЕКЛЮЧАТЕЛЬ

-- СВОЙСТВА КНОПКИ

-- КАК РАЗМЕСТИТЬ РИСУНОК?

-- СОБЫТИЯ ФОРМ И ЭЛЕМЕНТОВ УПРАВЛЕНИЯ

-- КАК СОЗДАТЬ ПРОЦЕДУРУ ОБРАБОТКИ СОБЫТИЯ?

-- КАК ВНЕДРИТЬ ДОПОЛНИТЕЛЬНЫЙ ЭЛЕМЕНТ УПРАВЛЕНИЯ В ФОРМУ?

-- КАК ОТКРЫТЬ ФАЙЛ В ПРОГРАММЕ VBA?

-- КОМАНДЫ МЕНЮ DEBUG ( ОТЛАДКА )

-- ПРИМЕР СОЗДАНИЯ ПРОГРАММЫ-ИГРЫ НА VBA ( "ЖИЗНЬ" )

-- КАК СДЕЛАТЬ ТЕКСТОВОЙ КВЕСТ НА VBA?

-- КАКУЮ СРЕДУ МОЖНО СКАЧАТЬ ДЛЯ РАБОТЫ С VBA?

-- КАК СОЗДАТЬ ПРОЕКТ И ФОРМУ В СРЕДЕ VBA - РУССКАЯ ВЕРСИЯ?

-- КАК ввести В ПРОГРАММУ ЭЛЕМЕНТ ФОРМЫ И МЕНЯТЬ НАДПИСЬ НА НЕМ?

-- ПРИМЕР ПРОГРАММЫ С ОПЕРАТОРОМ ELSEIF

-- ПРИМЕР ПРОГРАММЫ С ОПЕРАТОРОМ SELECT CASE

-- КАК ПРОТЕСТИРОВАТЬ ПРОЕКТ?

-- ВЫВОД НА ЭКРАН ДОПОЛНИТЕЛЬНОЙ ФОРМЫ ПОЛЬЗОВАТЕЛЯ

-- ГЛАВНЫЕ ТЕРМИНЫ СРЕДЫ ПРОГРАММИРОВАНИЯ

-- ФУНКЦИИ ДАТЫ В VBA

-- ФУНКЦИИ ВРЕМЕНИ В VBA

-- ЭЛЕМЕНТ УПРАВЛЕНИЯ ТЕКСТБОКС

-- ПРИМЕР СОЗДАНИЯ НА ЯЗЫКЕ VBA ИГРЫ "ПЯТНАШКИ"

-- ИСПОЛЬЗОВАНИЕ ФУНКЦИИ ИНПУТБОКС ДЛЯ ПРОВЕРКИ ВВОДИМЫХ ЗНАЧЕНИЙ

-- ПРИМЕР РЕКУРСИВНОЙ ПРОЦЕДУРЫ С ЧИСЛАМИ ФИБОНАЧЧИ

-- ПРИМЕР ФУНКЦИИ, ОПРЕДЕЛЯЮЩЕЙ ВОЗРАСТ ЧЕЛОВЕКА

-- СОЗДАНИЕ ПРОСТЕЙШЕГО КАЛЬКУЛЯТОРА В VBA

-- КАК СДЕЛАТЬ ПРОГРАММУ-РИСОВАЛКУ

-- ИГРА "ЗМЕЙКА"

-- БЕГУЩАЯ КАРТИНКА ( создание в Excel )

-- КАК ВЫВЕСТИ ДАННЫЕ, ВВОДИМЫЕ ПОЛЬЗОВАТЕЛЕМ, ИЗ ПРОГРАММЫ VBA В РАБОЧИЙ ЛИСТ EXCEL

-- ПРОГРАММА ДЛЯ ПОДСЧЕТА ДЛИНЫ ОКРУЖНОСТИ

-- КОДЫ ОСНОВНЫХ ОШИБОК В VBA


-- КАК ЗАПУСТИТЬ РЕДАКТОР VBA.


Сделать это не просто, а очень просто. Что касается запуска редактора в специальной русифицированной программе VBA Microsoft 32, то тут никаких особых указаний не требуется. Кликаете на иконке - а затем выбираете в особом окне проект ( или создаете новый ). Здесь я, кстати, рекомендую воспользоваться меню "Создать" - "Файл ЕХЕ".

Для запуска в Worde или Excel наведите курсор на пустое место меню и щелкните правой клавишей мыши. На экране появится меню, среди строк которого ( третьей строкой ) будет "Visual Basic". Нажимаем - появляется окошечко с кнопками. Кнопка редактора будет следовать сразу за кнопкой "Безопасность". Нажимаем ее и входим в редактор. Можно поступить и так. Выбрать команду меню Сервис - Макрос - Редактор Visual Basic ( Tools - Macro - Visual Basic Editor ) или нажать комбинацию клавиш ALT - F11. Выход из редактора - используется комбинация клавиш ALT-Q.


-- КАКИЕ ОКНА ЕСТЬ В РЕДАКТОРЕ VBA.


Основных окон три.

-- Окно проекта ( Project Explorer ). Именно благодаря ему мы получаем доступ к коду программы и формам пользователя.

-- Окно свойств ( Properites Window ). Благодаря ему мы можем менять свойства любых объектов, будь то форма пользователя, проект или модуль.

-- Окно программного кода ( Code Window ). Здесь можно создавать и редактировать саму программу - то есть программный код, который будет выполняться ЭВМ.

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

2.4.1. Вызвать окно обозревателя объектов - F2.

2.4.2. Вызвать окно свойств - F4.

2.4.3. Открыть окно методов ( свойств ) в коде - CTRL - J.


-- КАК ВСТАВИТЬ НОВУЮ ФОРМУ И ЭЛЕМЕНТЫ УПРАВЛЕНИЯ?


Нажмите Вставить - Форма пользователя ( Insert - UserForm ). Если вы уже создали форму, откройте ее, дважды щелкнув мышью на ее названии. В результате в основном окне на экране появится форма, а рядом (UserForm или просто Form ) с ней - Панель элементов, состоящая из 15 элементов управления. Все они могут быть помещены внутрь формы. Но для того, чтобы они работали, к каждому из них нужно будет написать код ( для обработки события, например, клика мышью ).

Есть и другой способ. В окне проектов выберите в меню правой кнопки мыши команду View Object.


-- КАК ДОБАВИТЬ ИЛИ ПЕРЕИМЕНОВАТЬ НОВЫЙ МОДУЛЬ В ПРОЕКТЕ?


Элементарно, Ватсон! Найдите нужный проект. Запустите редактор VBA ( можно это сделать, например, нажав ALT - F11 ). Затем в окне Project Explorer выделите проект или его часть. После чего выберите команду Редактора VBA Добавить - Модуль ( Insert - Module ). Другой способ - щелкните на кнопку Insert панели инструментов Standard и укажите на пункт Module.

Вы наверняка захотите, чтобы у модуля было собственное имя. Для этого его можно переименовать. Воспользуйтесь меню, командой Вид - Окно свойств ( View - Properties Window ) или щелкните на кнопке панели инструментов Properties. На экране появится окно свойств модуля. После чего в текстовом поле Name ( напротив его ) на вкладке Alphabetic введите нужное имя модуля.


-- КАК НАПИСАТЬ ПРОСТЕЙШУЮ ПРОГРАММУ НА VBA?


Попробуем написать простую процедуру - программу для выполнения в VBA. Допустим, она будет выводить на экран приветствие. Вот как будет выглядеть ее текст в окне программного кода:


Sub Приветствие ()

MsgBox ("Доброго времени суток, дорогой пользователь. Вас приветствует программа Современный русский литературный язык 2!")

End Sub


Для начала создаем модуль с именем "Приветствие". Затем в окне программного кода модуля ( основное окно программы ) вводим текст. Для этого:

5.1. Открываем документ Word ( Или Excel ).

5.2. Запускаем редактор VBA.

5.3. Находим окно Project Explorer и выделяем нужный проект, внутри которого будет работать программа ( процедура ).

5.4. Добавляем модуль ( Insert - Module ).

5.5. Присваиваем модулю имя "Приветствие".

5.6. В окне программного кода вводим приведенный выше текст.


-- КАК СДЕЛАТЬ КНОПКУ ДЛЯ ЗАПУСКА ПРОГРАММЫ В WORDe?


В среде VBA ( специальная программа ) делать кнопку не требуется. Сразу создается исполняемый EXE-файл, при запуске которого открывается первая созданная Вами форма пользователя ( Form или UserForm ). Другое дело - Word.

Здесь необходимо навести курсор на пустое место меню и нажать правую клавишу мыши. Затем выбрать в выпадающем меню строку "Редактор Visual Basic". Появится окошко с кнопками. Нажимаете кнопку "Панель инструментов управления" ( с рисунком молотка и гаечного ключа ). Появляется панель элементов. Нажимаете элемент "Кнопка". Он сразу вставляется в документ. Наводите на него курсор, нажимаете правую кнопку мыши и затем - пункт меню "Исходный текст". Открывается окно программного кода с уже обозначенной процедурой обработки события. Вводите в него процедуру вызова нужной вам экранной формы. Например:


Private Sub CommandButton1_Click()

UserForm1.Show

End Sub


Готово! Ай молодца!


-- КАК НАЗНАЧИТЬ КОМБИНАЦИЮ КЛАВИШ ДЛЯ ВЫЗОВА ПРОГРАММЫ?


В Worde:

7.1. Нажмите меню Сервис - Настройка - Команды.

7.2. Нажмите Клавиатура - Настройка клавиатуры. В списке "Категория" выберите значение "Макросы".

7.3. В списке "Макросы" найдите имя своей программы. В поле "Сочетание коавиш" назначьте сочетание.

7.4. Нажмите "Назначить". А затем "Закрыть".

В Excel:

7.5.1. Нажмите меню Сервис - Макрос - Макросы. Откройте окно Макрос.

7.5.2. В "Имени макроса" найдите нужную программу и щелкните кнопку "Параметры".

7.5.3. Раскроется окно "Параметры макроса". Введите клавишу, которая будет вместе с CTRL использоваться для вызова данной программы.

7.5.4. Щелкните ОК.


-- КАК ПРИСВОИТЬ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ?


Вот пример части программы с присвоением значения переменной. Комментарии, которые не выполняются ЭВМ, а предназначены для любопытствующего зрителя, приведены после ' ( черточки вверху ).


` Вычисление значения

Sub Сложение ()

а = 5 ' переменная а равна 5

b = 14 ' переменная b равна 14

` Отображение результата на экране

MsgBox a + b

End Sub


-- КАКИЕ ОПЕРАТОРЫ ИСПОЛЬЗУЮТСЯ В VBA?


-- Оператор присваивания. Реализуется через знак равенства:

А = x + y

B = 5

9.2. Арифметические операторы.

+ Сложение

- Вычитание

* Умножение

/ Деление

-- Логические операторы.

And - Конъюнкция ( логическое И )

Or - Дизъюнкция ( логическое ИЛИ )

Not - Отрицание ( логическое НЕТ )

Хоr - Исключение ( логическое исключающее ИЛИ )

Imp - Логическая импликация

Eqv - логическая эквивалентность.

-- Операторы сравнения.

= Равно

-- Больше

< меньше

>= Больше или равно

<= Меньше или равно

-- Не равно

Приоритеты операторов ( в первую очередь выполняются те, что стоят выше ):

-- ^ Возведение в степень.

-- * / Умножение, деление.

-- / Деление без остатка

-- Mod Остаток

-- + - Сложение, вычитание.


10. ПРИМЕР РАБОТЫ С ПЕРЕМЕННЫМИ ( ПРОГРАММА "ВАШИ ПРОФЕССИИ" )


Вот фрагмент аннотации к моей программе "Ваши профессии": "Программа, которая позволит при наличии Натальной карты определить Ваше призвание или предпочтительную сферу деятельности.

Рассмотрите аспекты в Натальной карте. Выделите активные дома и активных управителей домов. Теперь нужно лишь проставить галочки напротив аспектов и активных точек гороскопа и нажать клавишу "Подсчитать". Напротив каждой профессии вы увидите баллы, сложив которые, получите результат".

Для осуществления маленькой мечты - создания программы - необходимо было:

1. Объявить переменные.

2. Присвоить им значения в соответствии с выбором пользователя.

3. Вывести итог подсчетов значений на экран программы.

Переменные объявлялись прямо в тексте кода UserForm1 - основной формы программы ( еще, к слову, были две формы - "Справка" и "Об авторе" ).

Вот как это выглядело:


Dim p1, p2, p3, mat1, mat2, mat3, ast1, ast2, him1, him2, him3, him4, buh1, buh2, buh3, uve1, uve2, uve3 As Single

Dim est1, est2, est3, est4, mod1, mod2, mod3, mod4, mod5, mod6, akt1, akt2, muz1, muz2, muz3, muz4, muz5, muz6, muz7, muz8, muz9 As Single

Dim in1, in2, men1, men2, men3, men4, reg1, reg2, reg3, vr1, vr2, vr3, vr4, upr1, upr2, upr3, upr4, sek1, sek2, biz1, biz2, str1, str2, str3, str4, put1, put2, put3 As Single

Dim mi1, mi2, to1, to2, to3, to4, to5, vo1, vo2, vo3, as1, as2, as3, as4, uri1, uri2, uri3, uri4, uri5, uri6, uri7, uri8, uri9 As Single

Dim p, ma, him, buh, uvet, est, moda, akt, muz, ino, men, reg, vr, upr, sek, biz, str, pute, mi, toka, vo, ast, uri As Single


Как видите, не мудрствуя лукаво, все переменные были объявлены типа Single. Dim - начало процедуры для объявления переменной. Затем следует список переменных.

Кроме того, переменные еще и слагались.

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


11. ПРИМЕР РАБОТЫ С ЧЕКБОКСАМИ ( ПРОГРАММА "ВАШИ ПРОФЕССИИ" )


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

Например,


If CheckBox1.Value = True Then

TextBox1.Text = 2

End If

If CheckBox3.Value = True Then

TextBox3.Text = 2

TextBox8.Text = 4

End If


Свойство Value чекбокса - истинно ( галочка поставлена ), значит в соответствующем ТЕКСТОВОМ ПОЛЕ на экране появляется нужная цифирка.


12. ПРИМЕР РАБОТЫ С ПЕРЕМЕННЫМИ ( ПРОГРАММА "ЮНИКУМ" )


В программе "Юникум" необходимо было подсчитать общую сумму баллов, соответствующих значению вероятности Асцедента в знаке зодиака.

Пользователь со своей стороны ставил галочки в чекбоксах. Затем нажимал кнопку "Сложить". В текстовом поле напротив этой кнопки появлялось суммарное значение вероятности Асцедента в этом знаке гороскопа.

Переменная здесь работала - в отличие от программы "Ваши профессии". Она объявлялась прямо в процедуре обработки события клика по командной кнопке.


Private Sub CommandButton7_Click()

Dim ctr_1 As Single

If CheckBox1.Value = True Then

ctr_1 = ctr_1 + 3

End If

If CheckBox2.Value = True Then

ctr_1 = ctr_1 + 1

End If

If CheckBox3.Value = True Then

ctr_1 = ctr_1 + 2

End If

И так далее.


Здесь ctr_1 - это переменная, которая меняла свое значение - в зависимости от того, поставлена ли галочка ( Value = True ) в чекбоксе.

Завершалось работа с переменной выводом ее значения на экран - в той же процедуре обработки клика командной кнопки, которая была представлена чуть выше:


TextBox1.Text = ctr_1

End Sub

' завершение процедуры


А вот как переменные объявлялись уже совсем в другой форме пользователя ( для работы с аспектами планет ):


Private Sub CommandButton1_Click()

Dim ctr_1, ctr_2, ctr_3, ctr_4, ctr_5, ctr_6, ctr_7, ctr_8, ctr_9, ctr_10, ctr_11, ctr_12 As Single

ctr_1 = 0

ctr_1 = 0

ctr_2 = 0

ctr_3 = 0

ctr_4 = 0

ctr_1 = TextBox1.Text

ctr_2 = TextBox2.Text

ctr_3 = TextBox3.Text

ctr_4 = TextBox4.Text


Здесь переменным присваивались значения, соответствующие введенным пользователем цифрам ( в текстовых полях ).


-- КАКИЕ ГЛАВНЫЕ УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ ЕСТЬ В VBA И ПРИМЕРЫ С НИМИ?


-- Оператор перехода GoTo.

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

GoTo Metka

Metka:

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

Пример:


Sub Vopros

Ответ = InputBox ( "Назовите фамилию автора романа "Защита Лужина"" )

If Ответ <> "Набоков" Then GoTo Ошибка

MsgBox ( "Это правильный ответ" )

- другие операторы -

Exit Sub

Ошибка:

MsgBox "Это неверный ответ"

End Sub


13.2 Оператор условного перехода If - Then

Проверяет выполнение определенного условия. В зависимости от подтверждения выполнения условия программа выполняет действие. Имеет такой синтаксис:

If условие Then

(Операторы 1)

Else ' в противном случае

( Операторы 2 )

Пример:

Sub Температура ()

intТемпература = InputBox ("Какая сегодня температура на улице?")

If intТемпература < 7 Then

MsgBox "Сегодня холодно"

ElseIf intТемпература < 15 Then

MsgBox "Сегодня прохладно"

ElseIf intТемпература < 25 Then

MsgBox "Сегодня тепло"

Else

MsgBox "Сегодня жарко"


-- Оператор Select Case

Еще один оператор условия.

Пример:


Sub SelectCase ()

Dim a As Single

A = InputBox ( "Сколько книг вы написали?" )

Select Case a

Case Is < 1

MsgBox "Вы больше любите читать"

Case 2 To 8

MsgBox "Вы талант"

Case Is > 8

MsgBox "Вы гений"

End Select

End Sub


13.4. Оператор For .. Next

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

Синтаксис имеет следующий:

For счетчик = начало To финал [Step шаг]

(операторы)

Next счетчик

Вот пример цикла из книги Л.Д.Слепцовой:


Sub PNnumber ()

Dim AddNNum As String

Dim a As Single

b = 0

For a = 2.51 To 14 Step 2.51

b = b + 1

AddNNum & b & """ = " & a & " см" & Chr(13)

Next a

MsgBox "Таблица перевода дюймов в сантиметры:" & _

Chr(13) & AddNNum

End Sub


-- МАТЕМАТИЧЕСКИЕ ФУНКЦИИ VBA.


Приведем образцы встроенных математических функций этого языка.


14.1. Abs(число) - Возвращает модуль числа ( абсолютное значение )

14.2. Atn(число) - Возвращает арктангенс числа ( угол, измеряемый в радианах )

14.3. Cos(число) - Возвращает косинус числа.

14.4. Fix(число) - Возвращает целую часть числа

14.5. Int(число) - То же.

14.6. Log(число) - Возвращает натуральный логарифм числа.

14.7. Rnd(число) - Возвращает случайное число

14.8. Sin(число) - Возвращает синус числа.

14.9. Sqr(число) - Возвращает квадратный корень из числа.

14.10. Tan(число) - Возвращает тангенс числа.


-- ФУНКЦИЯ INPUTBOX


InputBox предназначена для обмена данными с пользователем. Она отображает на экране окно со строкой ввода, куда пользователь помещает свои данные. Самый простой вариант функции имеет такой вид:


InputBox (сообщение[, заголовок] [, Ответ]

Здесь сообщение - это выражение, результат вычисления которого будет выведен на экран в качестве сообщения. Это обязательный аргумент функции. Заголовок - строка, которая будет выведена вверху окна.

Пример:


StrA = InputBox("Введите Вашу фамилию",_

"Образец сообщения", "Иванов")


Необходимо заметить, что для дальнейшей работы с введенной пользователем фамилией необходимо будет присвоить ее значение ( значение, возвращаемое функцией ) некоей переменной.


-- ПРИМЕР ПРОГРАММЫ ДЛЯ ВЫВОДА ЭКРАННОЙ ФОРМЫ.


Вот пример процедуры ( которая должна находиться не в модуле экранной формы, а в "обычном" модуле ) для вызова на экране формы "Form1".


Sub Показ_формы()

Form1.Show

End Sub


Метод Show выводит форму на экран и передает ей управление. Метод Hide убирает форму с экрана. Допустим, Вам необходимо, чтобы при нажатии командной кнопки одна форма была убрана с экрана, а другая показана. Пишем такую процедуру ( в модуле экранной формы1 ):


Private Sub CommandButton1_Click(0

Form2.Hide

Form3.Show

End Sub


Здесь Форма2 убирается с экрана, а форма3 выводится ( и ей передается управление ).


-- СВОЙСТВА ЭКРАННОЙ ФОРМЫ


Caption - Надпись в строке заголовка формы.

Height - Высота формы

Name - Имя объекта формы - оно используется в программе для ссылки на форму.

Picture - Файл фонового рисунка формы.

PictureAlignment - Задает расположение фонового рисунка на форме

SnowModal - Если значение равно True ( По умолчанию ), то данная форма должна быть закрыта, чтобы продолжить работу с другими частями программы. False - форма может быть неактивной и оставаться на экране.

Width - Ширина формы.


-- КАКИЕ ЕСТЬ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ И КАК ИХ ДОБАВИТЬ В ФОРМУ?


Панель элементов становится активной автоматически, когда становится активной форма в редакторе. На ней - 15 элементов. Рассмотрим их подробно.


НАДПИСЬ - мой излюбленный элемент.

ПОЛЕ - ТЕКСТ_БОКС, поле ввода.

ПОЛЕ СО СПИСКОМ - добавляет поле ввода с раскрывающимся списком.

СПИСОК - ЛИСТ-БОКС, обычный список.

ФЛАЖОК - ЧЕК-БОКС.

ПЕРЕКЛЮЧАТЕЛЬ.

ВЫКЛЮЧАТЕЛЬ.

РАМКА.

КНОПКА - один из самых популярных элементов.

НАБОР ВКЛАДОК.

НАБОР СТРАНИЦ.

ПОЛОСА ПРОКРУТКИ.

СЧЕТЧИК.

РИСУНОК ( ИМАГЕ ) - добавляет любой рисунок с компьютера.

Поле определения ссылки.


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


-- ЭЛЕМЕНТ УПРАВЛЕНИЯ ПЕРЕКЛЮЧАТЕЛЬ


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


-- СВОЙСТВА ЭЛЕМЕНТА УПРАВЛЕНИЯ КНОПКА.


Акселератор - задает клавишу на клавиатуре, при которой одновременно с нажитием АЛЬТА актуализируются те же действия, что при нажатии кнопки на экране.

Каптион - Содержит текст, отображаемый на кнопке ( на экране )

Дефолт - Если значение True, то кнопка будет выбираться по умолчанию, как та, действия связанные с которой выполняются при нажатии Ентера.

Энаблед - Определяет активность ( доступность ) кнопки для пользователя. При фальсе - элемент управления недоступен, хотя и виден.

Пиктуре - определяет файл рисунка, который появится вместо надписи на кнопке.

Визибле - определяет видимость элемента на экране. При Фальсе - кнопка становится невидимой.


-- КАК РАЗМЕСТИТЬ РИСУНОК?


Для размещения рисунка на любом элементе управления без использования элемента управления "Рисунок" нужно сделать вот что:

-- Нажать левую клавишу мыши, наведя курсор на элемент управления.

-- В окне свойств элемента управления выбрать строку Picture.

-- Щелкнуть на кнопке с многоточием напротив Picture.

-- В открывшемся окне выбрать файл рисунка и щелкнуть на кнопке "Открыть".

Теперь рисунок появится на элементе управления или в форме. Можно менять расположение рисунка, корректируя свойства PictureAlignment, PictureSizeMode, PictureTiling ( если они, разумеется, есть у объекта, который вы настраиваете ).


-- СОБЫТИЯ ФОРМ И ЭЛЕМЕНТОВ УПРАВЛЕНИЯ


Главные из них приведены в следующей таблице.


Activate

При передаче управления экранной форме.

Click

Щелчок левой кнопкой мыши на объекте.

DblClick

Двойной щелчок левой кнопкой мыши на объекте.

Initialize

Перед загрузкой формы пользователя.

KeyDown

При нажатии пользователем какой-либо клавиши на клавиатуре.

KeyPress

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

KeyUp

Когда пользователь отпустил ранее нажатую клавишу.

MouseDown

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

MouseUp

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

Scroll

При прокрутке пользователем формы или элемента управления.


-- КАК СОЗДАТЬ ПРОЦЕДУРУ ОБРАБОТКИ СОБЫТИЯ?


Прежде всего необходимо открыть окно программного кода. Для этого сделайте двойной щелчок на форме либо выберите меню Viev - Code из меню формы, раскрываемого нажатием правой клавиши мыши. Над программным кодом вы обнаружите два списка. В левом из них выберите объект, для которого будет создана процедура обработки события. В нем должны быть имена экранной формы и всех элементов управления, расположенных на ней. В правом окне после выбора объекта будет расположен список возможных событий для этого объекта. При этом процедуры могут быть как пустые, так и уже заполненные. Введите в строки обработки событий нужные операторы.


-- КАК ВНЕДРИТЬ ДОПОЛНИТЕЛЬНЫЙ ЭЛЕМЕНТ УПРАВЛЕНИЯ В ФОРМУ?


Для этого нажмите правую кнопку мыши, когда курсор будет находиться над панелью элементов управления и выберите команду Additional Controls. Либо нажмите на команду меню Tools- Additional Controls ( Сервис - Дополнительные элементы ).

Раскроется окно "Дополнительные элементы". В нем будет список "Доступные элементы". Установите флажок рядом с нужным элементом и нажмите кнопку "ОК". В панели элементов управления появится пиктограмма выбранного Вами нового элемента.


-- КАК ОТКРЫТЬ ФАЙЛ В ПРОГРАММЕ VBA?


Для открытия файла необходимо написать такую процедуру:


Open Путь For Режим

As [#]Номер_файла


ПУТЬ, РЕЖИМ И НОМЕР ФАЙЛА - обязательные аргументы процедуры.

-- Путь - полный путь к файлу ( с указанием диска и каталога ). Эта строка должна быть в кавычках. Если не указана информация о диске, файл открывается в текущей папке.

2. Режим. Приведу допустимые значения аргумента Режим: APPEND, INPUT, OUTPUT, RANDOM ( для чтения и записи в файл ), BINARY.

-- Номер файла - может быть любое значение от 1 до 511, не присвоенное другому файлу.

Пример:

Dim Номер_файла As Integer

Номер_файла = FreeFile(0)

OPEN "с:/Мои документы/Сочинения1.txt" For APPEND As # Номер_файла


-- КОМАНДЫ МЕНЮ DEBUG ( ОТЛАДКА )


Приведем основные команды данного меню.

Compile

Компиляция проекта, его сборка.

StepInfo

Пошаговое выполнение кода ( по одному оператору ) с входом в текст процедур и функций.

StepOver

Пошаговое выполнение кода с выполнение процедур и функций как одного оператора.

StepOut

Выполнение всех оставшихся операторов без остановок.

Add Watch

Открытие окна, где можно задать выражение или переменную, значение которых будет показано в окне Watch при выполнении кода программы.


-- ПРИМЕР СОЗДАНИЯ ПРОГРАММЫ-ИГРЫ НА VBA ( "ЖИЗНЬ" )


Немного об истории игры. Игра "Жизнь" - известная и очень популярная игра. Она была изобретена математиком Джоном Конвэйем и стала известна благодаря опубликованной в 1970 году статье в журнале "Scientific American". Игра популярна в основном у программистов. Персонажами игры являются живые существа, обитающие в вымышленной стране по строгим и непреложным математическим законам. Они рождаются, если на соседних клетках расположено ровно трое их предков, и исчезают - тают от одиночества, если на соседних клетках - одна или вовсе ни одной бактерий, или от тесноты - если рядом с ними четыре или более соседей. В вымышленной стране "Жизни" пролетают дни за днями. За это время ее обитатели ( бактерии ) могут размножиться или, напротив, истаять.

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

Образец:

Dim al_1, al_2, al_3, al_4, al_5, al_6, al_7, al_8, al_9, al_10, al_11, al_12, al_13, al_14 As Single

Dim bl_1, bl_2, bl_3, bl_4, bl_5, bl_6, bl_7, bl_8, bl_9, bl_10, bl_11, bl_12, bl_13, bl_14 As Single

Как видим, игровое поле будет состоять из 14 клавиш по горизонтали. А также ( что неочевидно из примера ) из 14 клавиш по вертикали. Каждой из них назначается переменная.

Кроме того, для каждой клавиши пишется процедура такого рода:

Private Sub a_1_Click()

a_1.Caption = "d"

End Sub

Private Sub a_2_Click()

a_2.Caption = "d"

End Sub

То есть - при клике на клавише появится значок. Чтоб это была не банальная буква, а какой-то занятный символ, нужно выбрать соответствующий ( желательно символьный ) шрифт в "Свойствах" командной кнопки.

Итак, игрок расставил значки на игровом поле, обозначающие исходное местонахождение бактерий. Теперь необходимо прописать, что с ними случится после нажатия кнопки "Старт" ( или "Ход" ). Для этого вспомним о переменных. Они должны меняться в зависимости от того, есть ли на командной кнопке символ, обозначающий бактерию ( в нашем случае это "d" ).

Образец:

If a_1.Caption = "d" Then

al_2 = al_2 + 1

bl_1 = bl_1 + 1

bl_2 = bl_2 + 1

End If

If a_2.Caption = "d" Then

al_1 = al_1 + 1

al_3 = al_3 + 1

bl_1 = bl_1 + 1

bl_2 = bl_2 + 1

bl_3 = bl_3 + 1

End If

Здесь к значению переменных прибавляется "1" - это значит, что одна бактерия находится в соседней клетке.

Внимание! Если код для одной командной кнопки слишком большой по размеру, просто напишите в его конце -


CommandButton2_Click

End Sub


Естественно, нужно создать командную кнопку 2 ( и сделать ее маленькой или невидимой ) . Таким образом, клик на кнопке 1 приведет и к клику на кнопке 2.

Дальше мы должны прописать появление на клетках новых бактерий ( символов d ) в зависимости от значения переменных.

Пример:


Private Sub CommandButton2_Click()

If al_1 = 0 Or al_1 = 1 Then

a_1.Caption = ""

End If

If al_1 = 3 Then

a_1.Caption = "d"

End If


То есть если переменная равна 0 или 1 ( на соседних полях 0 или 1 бактерий ), клетка становится пустой ( без надписи ). Если переменная равна "3" на клетке появляется новая жизнь.

Необходимо также написать процедуру для кнопки, которая будет ОЧИЩАТЬ поле от символов. Выглядеть она будет примерно так:

Private Sub CommandButton3_Click()

a_1.Caption = ""

a_2.Caption = ""

a_3.Caption = ""

И так дальше.

В моей программе не предусмотрена гибель бактерий от тесноты, но эту опцию, как видится, легко добавить, указав в коде переменных наряду со значениями 0 и 1, значения >3.


-- КАК СДЕЛАТЬ ТЕКСТОВОЙ КВЕСТ НА VBA


VBA как среда программирования, безусловно, не так удобна как QSP, но и в ней при желании можно сделать текстовой квест. Например, я сделал в ней текстовой квест "Путешествие в Джоконду" по сказке Сергея Михалкова "Сон с продолжением".

Каждой локации в квесте будет соответствовать одна форма пользователя. Переходы в нее прописываются в процедурах обработки событий - при нажатии командных клавиш. При нажатии одной - происходит переход на одну форму пользователя. При нажатии другой - на другую.

Пример:

Private Sub Избежать_Click()

UserForm11.Show

UserForm10.Hide

End Sub

Private Sub Вступить_в_беседу_Click()

UserForm12.Show

UserForm10.Hide

End Sub


В нашем случае с экрана удаляется текущая форма пользователя ( за номером 10 ), зато появляются, в зависимости от его выбора, формы 11 или 12.

Также необходимо создать такие формы пользователя как "СПРАВКА" и "ОБ АВТОРЕ".

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


Private Sub Еще_Click()

MsgBox "Это уже слишком..."

End Sub


29. КАКУЮ СРЕДУ МОЖНО СКАЧАТЬ ДЛЯ РАБОТЫ С VBA?


Я использую среду Microsoft Visual Basic 6.0 (Обновление 5 ). Для 32-битных Windows Development. Русская версия редактора. Автор перевода: Селюк Степан Андреевич - stepans@mail.ru.

Данные программы. Version 9782. VBA 6.0.9782 Forms3: 2.01.


30. КАК СОЗДАТЬ ПРОЕКТ И ФОРМУ В СРЕДЕ VBA - РУССКАЯ ВЕРСИЯ?

Меню "Файл" - "Новый проект". Затем нажмите "Сохранить проект как.."

Как добавить форму в проект? В окне "Проектов" выберите папку "Forms". Нажмите правую клавишу мыши. В выпадающем списке выберите - Добавить - Форма.

В окне "Свойства" можно изменить название и свойства формы. Размер формы можно менять, подведя курсор к краю ее, нажав левую клавишу мыши и удерживая ее при перетаскивании границы формы.


31. КАК ввести В ПРОГРАММУ ЭЛЕМЕНТ ФОРМЫ И МЕНЯТЬ НАДПИСЬ НА НЕМ?

В окне "Инструменты" выберите "Надпись" ( LABEL ) - этот элемент управления имеет пиктограмму в виде буквы "А". Поместите его в нужном месте формы, перетаскивая левой клавиши мыши. В окне "Свойства" установите нужный шрифт и его размер. А также первоначальную надпись, которая будет выводиться на экран при старте программы.

Как менять "Надпись" в зависимости от нажатия командной клавиши? Пропишите эту процедуру в программном коде.

Сначала нажмите в окне "Инструменты" на кнопку "CommandButton". На экране появится кнопка. В окне "Свойства" установите нужную надпись на ней. Кликните на Вашей кнопке, расположенной в форме. Откроется окно программного кода с такой программой:


Private Sub Command43_Click()


End Sub


Дополните программу, вставив нужную надпись между этих строк, а также данные в скобках. Например, она будет выглядеть так:


Private Sub Command43_Click(Index As Integer)

Label3.Caption = "Ослаби, остави, прости, Боже, прегрешения наша, вольная и невольная, яже в слове и в деле, яже в ведении и не в ведении, яже во дни и в нощи, яже во уме и в помышлении: вся нам прости, яко Благ и Человеколюбец"

Label4.Caption = ""

End Sub


Здесь Label3.Caption - означает "Надпись3.Содержимое".

Теперь после нажатия командной кнопки 43 на экране появится Надпись, которую мы задали в программе.


32. ПРИМЕР ПРОГРАММЫ С ОПЕРАТОРОМ ELSEIF


If - означает "Если". Если выполняется данное условие, то ( Then ) выполняется прописанная программа.

В противном случае, но если выполняется другое условие ( ElseIf ), выполняется другая команда.

Если и это условие не выполняется ( Else ), программа приступает к выполнению следующей команды.

Например:


Sub GreetMe()

If Time < 0.5 Then

MsgBox "Доброе утро"

Elself Time >= 0.5 And Time < 0.75 Then

MsgBox "Добрый день"

Else

MsgBox "Добрый вечер"

End If

End Sub


Примечание. Время дня в этой среде выражается дробным числом, например, полдень представлен как 0.5. Значение 0.75 представляет время 18:00 -- три четверти суток и тот момент, когда день переходит в вечер.\


33. ПРИМЕР ПРОГРАММЫ С ОПЕРАТОРОМ SELECT CASE


Вот процедура, где используется функция VBA WeekDay, с помощью которой определяется, является ли текущий день субботой либо воскресеньем (функция Weekday возвращает значение 1 либо 7). Затем отображается соответствующее сообщение.


Sub GreetUserlO

Select Case Weekday(Now)

Case 1, 7

MsgBox "Это выходные"

Case Else

MsgBox "Это не выходные"

End Select

End Sub


34. КАК ПРОТЕСТИРОВАТЬ ПРОЕКТ?


Для этого запустите отладчик нажатием кнопки на панели инструментов "Старт" ( изображается в виде синего треугольника, указывающего вправо ). На экран будет выведена форма. Теперь можете нажимать на командные кнопки, вводить данные в текстовые поля.


35. ВЫВОД НА ЭКРАН ДОПОЛНИТЕЛЬНОЙ ФОРМЫ ПОЛЬЗОВАТЕЛЯ


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

Это происходит, например, в случае, если надо составить программу-презентацию.

Рассмотрим вывод дополнительной формы пользователя на примере "Презентации Сочинений Игоря Петракова".

В окне "Проект" наводим курсор на папку "Forms". Нажимаем правую клавишу мыши. Появляется меню Добавить - Форма. Кликаем по строке. Добавляется форма. Теперь пишем процедуру для ее вывода на экран. Она может выглядеть, например, так:


Private Sub Command1_Click(Index As Integer) ' нажата кнопка 1

Label2.Caption = "В ЭТОМ ТОМЕ: Рассказы о детстве. Немного нынче пишу о детстве Случалось ли Вам наблюдать.. Путешествие в Беларусь Общие тетради Сто рецептов каникул Жизнь поселка Будни и праздники рабочего поселка Очерки о летнем ужении рыбы Двенадцать дней в чернолучье Чернолучье 2 Там, где вырос Приложение Хатынь Жизнь в Омске. Рассказы Как в Советской стране Путешествие в Джоконду Сказка с подробностями Стоимость 190 руб. Электронная книга." ' меняется Надпись LABEL2

Form2.Show ' на экран выводится ФОРМА2

End Sub ' завершение процедуры


Private Sub Command10_Click(Index As Integer) ' нажата кнопка 1

Label2.Caption = "В ЭТОМ ТОМЕ: Введение Сюжет литературного произведения О конфликтности в сюжете Об идейности сюжета Сюжет и мотив Сюжет и событие Сюжет и образ Особенности сюжета в романе Исследования сюжета романа Вл.Набокова Сюжет романа Вл.Набокова и традиция русской литературы 1.Ситуация 1.1 сюжетная ситуация архаичного ритуала 1.1.1. вальс, 1.1.2. дуэль, 1.1.3. пир, 1.1.4. публичная казнь, 1.2. сюжетная ситуация обманного представления 1.2.1. театр кукол, 1.2.2. кинематограф" ' меняется Надпись LABEL2

Form11.Show ' на экран выводится ФОРМА11

End Sub ' завершение процедуры


Обратите внимание, что название формы должно строго соответствовать тому, что написано в программном коде. Название формы указывается в меню "Свойства" - "Name".

Кстати, в этом же меню свойства можно указать заголовок формы ( Caption ). А также цвет фона ( BackColor ).

В форму можно поместить рисунок. Для этого нажмите в панели инструментов рисуночек - "Image". Левой кнопкой мыши щелкните на форме. В Свойствах рисунка найдите строку Picture и нажмите на расположенную напротив нее кнопочку с многоточием. Появится отделение программы, предоставляющее доступ к ресурсам компьютера. Выбираем рисунок - и он тут же появляется в форме.


36. ГЛАВНЫЕ ТЕРМИНЫ СРЕДЫ ПРОГРАММИРОВАНИЯ


Модули -- это область, где написан код.

Внутри модулей мы можем написать код VBA, а код написан в процедуре. Процедура / подпроцедура -- это серия утверждений VBA, в которых указывается, что делать.

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

Двумя основными типами процедур являются Sub и Function.

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

Вы должны использовать букву в качестве первого символа.

Вы не можете использовать пробел, точку (.), восклицательный знак (!) или символы @, &, $, # в имени.


37. ФУНКЦИИ ДАТЫ В VBA


1 Дата

Функция, которая возвращает текущую системную дату.

2 CDate

Функция, которая преобразует данный вход в дату.

3 DateAdd

Функция, которая возвращает дату, к которой был добавлен указанный интервал времени.

4 DateDiff

Функция, которая возвращает разницу между двумя периодами времени.

5 DatePart

Функция, которая возвращает указанную часть заданного значения даты ввода.

6 DateSerial

Функция, которая возвращает действительную дату для данного года, месяца и даты.

7 FormatDateTime

Функция, которая форматирует дату на основе предоставленных параметров.

8 IsDate

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

9 День

Функция, которая возвращает целое число от 1 до 31, представляющее день указанной даты.

10 Месяц

Функция, которая возвращает целое число от 1 до 12, представляющее месяц указанной даты.

11 Год

Функция, которая возвращает целое число, представляющее год указанной даты.

12 MonthName

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

13 WeekDay

Функция, которая возвращает целое число (от 1 до 7), которое представляет день недели для указанного дня.

14 WeekDayName

Функция, которая возвращает название дня недели для указанного дня.


38. ФУНКЦИИ ВРЕМЕНИ В VBA


1 Сейчас

Функция, которая возвращает текущую системную дату и время.

2 Час

Функция, которая возвращает целое число от 0 до 23, представляющее часовую часть данного времени.

3 минут

Функция, которая возвращает целое число от 0 до 59, которое представляет часть минут данного времени.

4 второй

Функция, которая возвращает целое число от 0 до 59, которое представляет часть секунд данного времени.

5 Время

Функция, которая возвращает текущее системное время.

6 таймер

Функция, которая возвращает количество секунд и миллисекунд с 12:00.

7 TimeSerial

Функция, которая возвращает время для конкретного ввода часов, минут и секунд.

8 TimeValue

Функция, которая преобразует входную строку в формат времени.


39. ЭЛЕМЕНТ УПРАВЛЕНИЯ ТЕКСТБОКС


Элемент управления TextBox ( текстовое поле ) используется в следующих случаях

- для приема текстовых данных, вводимых пользователем (например, для отправки по почте, для занесения в базу данных и т.п.);

- для вывода пользователю текстовых данных с возможностью их редактирования (из базы данных, листа Excel и т.п.);

- для вывода пользователю текстовых данных с возможностью копирования и печати, но без возможности изменения (например -- текст соглашения).

Основное событие для текстового поля -- это событие Change (изменение содержания поля). Как правило, на это событие привязывается проверка вводимых пользователем значений или "синхронизация введенного значения с другими элементами управления" (например, сделать доступной кнопку, изменить текст надписи и т.п.)

Вот пример использования текстового поля.


Private Sub UserForm_Initialize()

UserForm1.Label1.Caption = "Введите Имя"

End Sub


Private Sub CommandButton1_Click()

strName = UserForm1.TextBox1.Text

If strName = "" Then

Label1 = "А где ИМЯ?"

Else

TextBox1.Text = "Привет, " & strName

Label1 = "ОК"

End If

End Sub


Private Sub CommandButton2_Click()

TextBox1.Text = ""

End Sub


40. ПРИМЕР СОЗДАНИЯ НА ЯЗЫКЕ VBA ИГРЫ "ПЯТНАШКИ"


Однажды я создал на языке VBA программу "Пятнашки". Это компьютерная разновидность игры в "15". Суть игры - на поле 4 на 4 помещаются пятнадцать квадратных фишек. Их последовательность - случайная. Цель игрока - разместить их по порядку от 1 до 15 в четырех рядах ( 1-4, 5-8 и так далее ).

Как создается игра? Довольно просто. Открываете редактор VBA. Создаете квадратную форму пользователя.

Затем размещаете в ней 16 командных кнопок. Для каждой предусмотрена краткая надпись в виде цифры. Фон кнопок желательно сделать синим.

Для каждой из кнопок пишете такую процедуру:


Private Sub CommandButton1_Click()

If CommandButton1.Caption = "1" And CommandButton2.Caption = "" Then

CommandButton1.Caption = ""

CommandButton2.Caption = "1"

ElseIf CommandButton1.Caption = "1" And CommandButton5.Caption = ""

CommandButton1.Caption = ""

CommandButton5.Caption = "1"

' другие операторы

EndIf

EndSub

Другие операторы - содержат цифры от 2 до 15. То есть цифра с кликаемой кнопки переходит на соседнюю, пустую.


Для того, чтобы установить свой любой порядок цифр на кнопках, напишите процедуру обработки любого другого события на командных кнопках ( например, при нажатии правой клавиши мыши ).

Пример:


Private Sub Comm4_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)

Comm4.Caption = "m" 'нажата правая кнопка мыши

End Sub


Теперь при нажатии правой клавишей мыши на кнопку на экране появится заданная Вами комбинация цифр от 1 до 15 на командных кнопках.

Не забудьте составть прцедуры вызова "Справки" и "Об авторе" ( можно использовать MsgBox ).

При правильном расположении всех цифр в порядке от 1 до 15 предусмотрите вознаграждение для игрока. Например, на экране при нажатии кнопки "15" будет появляться картинка.


41. ИСПОЛЬЗОВАНИЕ ФУНКЦИИ ИНПУТБОКС ДЛЯ ПРОВЕРКИ ВВОДИМЫХ ЗНАЧЕНИЙ


Вот любопытный пример, который приводит д.ф.н. Гарнаев в своем "Самоучителе":


Sub DemoInput()

Dim x As Variant

x = InputBox("Введите значение:", "Пример")

If x <> "" Then

MsgBox x & " - введенное значение"

Else

MsgBox "Нажали Cancel или ничего не ввели"

End If

End Sub


42. ПРИМЕР РЕКУРСИВНОЙ ПРОЦЕДУРЫ С ЧИСЛАМИ ФИБОНАЧЧИ


Рекурсивная прцедура - процедура, вызывающая саму себя. Пример, приводимый Гарнаевым, - процедура, возвращающая очередной член последовательности чисел Фибоначчи.

Числа Фибоначчи таковы - 1, 1, 2, 3, 5, 8, 13 и так далее.

То есть каждое последующее представляет собой сумму двух предыдущих.

А вот и пример:


Function Fi(n As Long) As Long

If n = 1 Or n = 2 Then

Fi = 1

Else

Fi = Fi(n - 1) + Fi(n - 2)

End If

End Function


43. ПРИМЕР ФУНКЦИИ, ОПРЕДЕЛЯЮЩЕЙ ВОЗРАСТ ЧЕЛОВЕКА


И вновь - пример от Гарнаева. Ключевая функция здесь - DateDiff - возрастающая разность между датами. Первый ее параметр может иметь, например, значения года ( yyyy ), месяца ( m ), дня ( d ), часа ( h ).

Также можно смело сказать, что второй параметр задает начальную, а третий - итоговую дату ( в данном случае текущую - функция Now ).


Function Age(DateOfBirth As Date) As Integer

Age = DateDiff("yyyy", DateOfBirth, Now)

End Function


Теперь остается определить DateOfBirth. Это значение может ввести пользователь.


44. СОЗДАНИЕ ПРОСТЕЙШЕГО КАЛЬКУЛЯТОРА В VBA


Продолжаем приводить примеры из Гарнаева. С помощью использования метода Evaluate, пишет он, можно создать простейший калькулятор. Пользователь вводит строку с арифметическим выражением ( с помощью метода ИНПУТБОКС ). А наш Evaluate - метод произведет вычисления, итог которых появится в окне MsgBox.


Sub Calculator()

Dim s As String

s = InputBox("Введите арифметическое выражение")

MsgBox s & " = " & Application.Evaluate(s)

End Sub


45. КАК СДЕЛАТЬ ПРОГРАММУ-РИСОВАЛКУ


Вот программный код с сайта https://info-comp.ru/programmirovanie/38-vbobuchenie.html

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


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Form1.CurrentX = X

Form1.CurrentY = Y

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

Line (Form1.CurrentX, Form1.CurrentY)-(X, Y), QBColor(0)

End If

End Sub


В аннотации к программке утверждается, что цвет можно менять с помощью параметра QBColor(0), т.е. вместо 0 поставить другую цифру.


46. ИГРА "ЗМЕЙКА"


Вот одна из игр с сайта http://vbrus.narod.ru/Primers.htm.

Сайт посвящен программам на VBA.

Полностью формы и код программы можно скачать здесь - http://pycckaya.ucoz.ru/load/igra_zmejka_na_vba/1-1-0-293

Для тех, кто хочет сделать игру самостоятельно, попробую дать инструкцию.


1. Добавляем Модуль1. Его содержимое:


Public Type ZMEY

xPoz As Integer

yPoz As Integer

End Type


2. Добавляем форму Form1.

В ней предусмотрены следующие элементы:

xvostik (0) до xvostik (28) Shape

Три таймера

Timer1 Timer

Timer2 Timer

Timer3 Timer

Также:

Shape1 Shape ( голова змейки )

Shape3 Shape ( рамка для меню )

Picture1 PictureBox ( Поле для игры )

И еще:

opt Menu

Label1 ( НАдпись "Счет" )

Label2 ( собственно счет )

Label3 ( надпись "Уровень" )

Label4 ( собственно уровень )

Label5

Label6

А также элементы на рисунке ниже.


3. Код для Form1 такой:


Dim pozic As ZMEY

Dim proglot As Long

Dim sizee As Integer

Dim cod As Integer

Public Pribavca As Integer

Dim tim As Integer

Dim mn As Integer

Dim BLOK As Long

Dim minus As Integer


Private Sub exi_Click()

End

End Sub


Private Sub exploit_Click()

Timer1.Enabled = False

form1.Enabled = False

Form2.Visible = True

End Sub


Private Sub Form_Load()

minus = 6

Call up 'вверх

Call element

sizee = 1

End Sub


Private Sub help_Click()

Timer1.Enabled = False

form1.Enabled = False

helpp.Visible = True

End Sub


Private Sub opt_Click()

Timer1.Enabled = False

form1.Enabled = False

options.Visible = True

End Sub


Private Sub picture1_KeyDown(KeyCode As Integer, Shift As Integer)

If BLOK = True Then

Select Case KeyCode

Case 38 'вверх

If cod <> 40 Then Call up

Case 40 'вниз

If cod <> 38 Then Call down

Case 37 'влево

If cod <> 39 Then Call lef

Case 39 'вправо

If cod <> 37 Then Call righ

Case 27 'ESC

End

End Select

BLOK = False

End If

End Sub


Sub up()

cod = 38

pozic.xPoz = -1

pozic.yPoz = 0

End Sub


Sub down()

cod = 40

pozic.xPoz = 1

pozic.yPoz = 0

End Sub


Sub lef()

cod = 37

pozic.xPoz = 0

pozic.yPoz = -1

End Sub


Sub righ()

cod = 39

pozic.xPoz = 0

pozic.yPoz = 1

End Sub


Private Sub Timer1_Timer()

Call xvost

Shape1.Left = Shape1.Left + pozic.yPoz * 100

Shape1.Top = Shape1.Top + pozic.xPoz * 100

Call proverca

BLOK = True

End Sub


Sub proverca()

'*********ушла за ягодой*****

If sizee < 6 Then 'если до 6 уровня то проверяем не ушла ли

If Shape1.Left < 0 Then Call ushla

If Shape1.Left > 3360 Then Call ushla

If Shape1.Top < 0 Then Call ushla

If Shape1.Top > 4680 Then Call ushla

Else

If Shape1.Left < 0 Then Shape1.Left = 3300 'сквозь стены

If Shape1.Left > 3360 Then Shape1.Left = 0

If Shape1.Top < 0 Then Shape1.Top = 4600

If Shape1.Top > 4680 Then Shape1.Top = 0

End If


'********нашла себе подобную *******

If Shape1.Top = elem.Top And Shape1.Left = elem.Left Then

proglot = False

xvostik(sizee).Visible = True

sizee = sizee + 1

Call element

End If

'**********контроль за хвостом********

For i = 0 To sizee

If Shape1.Top = xvostik(i).Top And Shape1.Left = xvostik(i).Left Then

MsgBox "GAME OVER Вы отдавили хвост", vbCritical, "End"

End

End If

Next i

'*********повышение разряда******

Select Case sizee

Case 4

Timer1.Interval = 150

Label4.Caption = 2

Case 6

Timer1.Interval = 120

Label4.Caption = 3

Case 8

Timer1.Interval = 90

Label4.Caption = 4

Case 10

Timer1.Interval = 70

Label4.Caption = 5

Picture1.BackColor = &H800000

Case 15

Timer1.Interval = 50

Label4.Caption = 6

Picture1.BackColor = &H0&

Case 20

Timer1.Interval = 45

Label4.Caption = 7

Case 28

MsgBox "Это было круто((( Потрачено:" & Label5.Caption, vbInformation, "End"

End

End Select

End Sub


Sub xvost()

For i = 28 To 1 Step -1 ' подтягивает хвост

xvostik(i).Left = xvostik(i - 1).Left: xvostik(i).Top = xvostik(i - 1).Top

Next i

xvostik(0).Left = Shape1.Left: xvostik(0).Top = Shape1.Top

End Sub


Sub ushla()

MsgBox "GAME OVER Змейка вылезла за пределы поля", vbCritical, "End"

End

End Sub


Sub element()

'*********yшла**********

Randomize Timer

If proglot = False Then

Label2.Caption = sizee

proglot = True

minus = 6 '' если заглотил возвращаем отсчет на 6

elem.Top = Int(46 * Rnd) * 100

elem.Left = Int(Rnd * 33) * 100

End If

End Sub


Sub prib()

Timer1.Interval = Timer1.Interval - Pribavca

End Sub


Private Sub Timer2_Timer()

tim = tim + 1

If tim = 59 Then

tim = 0

mn = mn + 1

End If

If mn = 60 Then End

Label5.Caption = mn & " : " & tim

End Sub


Private Sub Timer3_Timer()

minus = minus - 1


Label6.Caption = minus

If minus = 0 Then

minus = 6

elem.Top = Int(46 * Rnd) * 100

elem.Left = Int(Rnd * 33) * 100

End If

End Sub


4. Код для Form2 такой:


Private Sub Timer1_Timer()

form1.Timer1.Enabled = True

form1.Enabled = True

Form2.Visible = False

End Sub


На форме помещается надпись об авторе и таймер.


5. Код для формы helpp такой:


Private Sub Command1_Click()

form1.Timer1.Enabled = True

form1.Enabled = True


helpp.Visible = False

End Sub


На форме надпись и кнопка ОК.


6. Код для формы options ( Настройки ) такой:


Private Sub Command1_Click()

form1.Timer1.Enabled = True

form1.Enabled = True

options.Visible = False

End Sub


Private Sub Command2_Click()

If Option1.Value = True Then form1.Picture1.BackColor = &H800000

If Option2.Value = True Then form1.Picture1.BackColor = &H8000&

If Option3.Value = True Then form1.Picture1.BackColor = &H0&

If Option4.Value = True Then form1.Picture1.BackColor = &H400040

If Option5.Value = True Then form1.Picture1.BackColor = &HFF8080

If Option7.Value = True Then form1.Pribavca = 10

If Option8.Value = True Then form1.Pribavca = 20

form1.Timer1.Enabled = True

form1.Enabled = True

options.Visible = False

Call form1.prib

End Sub


На форме есть 2 командные кнопки - Command1 и Command2.

А также ПИКТУРЕБОКСЫ ( PictureBox ) Picture 1 - 5.

Кроме того, опциональные кнопки OptionButton под названиями Option1 - 8.

Есть три надписи - Label1 - 3

И две рамочки ( Frame ) - Frame1 и Frame2.


47. БЕГУЩАЯ КАРТИНКА ( создание в Excel )


В буфер обмена можно копировать изображение. В следующем коде ( от Гарнаева ) в диапазон A1 вставляется текст, у которого задается стиль шрифта. "Затем он поворачивается на угол 45 градусов и содержимое ячейки копируется в буфер обмена, после чего снова всталяется в документ, но уже как рисунок. После чего рисунок начинается передвигаться по рабочему листу".


Sub RunningPicture()

Dim txt As String, angle As Single, st As Single

Dim pic As Object

txt = "Hello, World!"

angle = 45

With Application

.ScreenUpdating = False

With Range("A1")

.Value = txt

.Font.Bold = True

.Font.Color = RGB(233, 113, 229)

.Font.Size = 16

.Orientation = angle

.EntireColumn.AutoFit

.Copy

Set pic = ActiveSheet.Pictures.Paste(Link:=False)

.Clear

With pic

.Top = 0

.Left = 0

End With

End With

.CutCopyMode = False

.ScreenUpdating = True

MsgBox "Start!"

With pic

For st = 0 To 100

.Top = st

.Left = st

Next

.Delete

End With

End With

Set pic = Nothing

End Sub


48. КАК ВЫВЕСТИ ДАННЫЕ, ВВОДИМЫЕ ПОЛЬЗОВАТЕЛЕМ, ИЗ ПРОГРАММЫ VBA В РАБОЧИЙ ЛИСТ EXCEL


Создайте форму. На ней расположите 2 надписи, 2 поля ( ТекстБокс ) и кнопку. В окне "Свойства" ( Properties ) установите значения свойств:

Элемент управления Свойство Значение

Надпись Caption Фамилия

Надпись Caption Имя

Поле Name txtLastName

Поле Name txtFirstName

Кнопка Name cmdOK

Caption ОК


Теперь осталось в ячейки А1 и В1 рабочего листа ввести Фамилия и Имя, а в модуль формы - следующий код ( от Гарнаева ) -


Private Sub cmdOK_Click()

Dim n As Integer

n = Range("A1").CurrentRegion.Rows.Count

Cells(n + 1, 1).Value = txtLastName.Text

Cells(n + 1, 2).Value = txtFirstName.Text

End Sub


49. ПРОГРАММА ДЛЯ ПОДСЧЕТА ДЛИНЫ ОКРУЖНОСТИ


50. КОДЫ ОСНОВНЫХ ОШИБОК В VBA


При отладке программы на экран может быть выведено сообщение об ошибке. Вот основные коды ошибок:


5 Приложение не запущено

6 Переполнение

7 Не хватает памяти

9 Индекс выходит за пределы допустимого диапазона

11 Деление на ноль

13 Несоответствие типа

18 Произошло прерывание, вызванное пользователем

52 Неправильное имя файла или идентификатора

53 Файл не найден

54 Неверный режим работы с файлом

55 Файл уже открыт

56 Ошибка ввода/вывода

61 Переполнение диска

68 Устройство не доступно

71 Диск не готов

72 Повреждена поверхность диска

335 Невозможен доступ к системным ресурсам

368 Истек срок действия данного файла. Программе требуется файл

более новой версии


ВСЕ!