Петраков Игорь Александрович: другие произведения.

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

"Самиздат": [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Конкурсы романов на Author.Today
Загадка Лукоморья
 Ваша оценка:
  • Аннотация:
    Моя работа о языке 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т список
Сайт - "Художники" .. || .. Доска об'явлений "Книги"