Петраков Игорь Александрович
Секреты языка Vba

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Links
Кожевенное мастерство: сумки, ремни своими руками
 Ваша оценка:
  • Аннотация:
    Моя работа о языке 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.
  0x08 graphic

  В ней предусмотрены следующие элементы:
  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
  А также элементы на рисунке ниже.
  0x08 graphic

 
 
 
 
 
  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
 
  0x08 graphic

  На форме есть 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. ПРОГРАММА ДЛЯ ПОДСЧЕТА ДЛИНЫ ОКРУЖНОСТИ
 
  0x08 graphic

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  50. КОДЫ ОСНОВНЫХ ОШИБОК В VBA
 
  При отладке программы на экран может быть выведено сообщение об ошибке. Вот основные коды ошибок:
 
  5 Приложение не запущено
  6 Переполнение
  7 Не хватает памяти
  9 Индекс выходит за пределы допустимого диапазона
  11 Деление на ноль
  13 Несоответствие типа
  18 Произошло прерывание, вызванное пользователем
  52 Неправильное имя файла или идентификатора
  53 Файл не найден
  54 Неверный режим работы с файлом
  55 Файл уже открыт
  56 Ошибка ввода/вывода
  61 Переполнение диска
  68 Устройство не доступно
  71 Диск не готов
  72 Повреждена поверхность диска
  335 Невозможен доступ к системным ресурсам
  368 Истек срок действия данного файла. Программе требуется файл
  более новой версии
 
  ВСЕ!

 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"