Методы перемещения на сам текст не влияют – лишь изменяют область, заданную объектами Range и Selection. Поэтому эти методы применимы только к переменным типа Range, но не к фиксированным областям. Например, запись
   ActiveDocument.Paragraphs(l).Range.Move
   не имеет эффекта, поскольку область первого абзаца – вещь неизменяемая. Метод Move стягивает область в точку, которая и перемещается, поэтому после его выполнения область исчезает, остается только точка вставки. Методы MoveStart и MoveEnd перемещают начальную или конечную точку области, обычно тем самым расширяя область.
    Удаление текста
   Метод Deleteпозволяет удалить текст. Вызванный без параметров, он удаляет вызывающий его объект Range или Selection. Если он применен в форме Delete(Unit,Count), удаляется часть текста в указанной области. Параметр Unit задает единицы, но при удалении возможны только два значения: wdWord и wdCharacter. Параметр Count задает количество удаляемых единиц. Если область стянута в точку, удаляются символы перед точкой вставки или после нее в зависимости от знака параметра Count.
    Вставка текста
   Группа методов Insert объектов Range и Selection позволяет осуществлять вставки в документ. Для вставки текста используются методы InsertBefore(Text) и InsertAfter(Text). Параметр text типа string задает текст, вставляемый до или после области, заданной объектами range или selection. После вставки текста область автоматически расширяется, включая в себя добавляемый текст.
   Свойство Text позволяет заменять текст в выделенной области, поэтому нет нужды вызывать метод Insert(Text). Методы InsertBefore и InsertAfter безопасны, так как текст добавляется, не изменяя содержимого области. Совсем иное дело – методы вставки, которые далеко не безопасны. При вставке внутрь области, например при использовании метода InsertSymbol или InsertParagraph, заменяется содержимое области.
    Работа с буфером
   Метод Сору, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод cut, действуя аналогично, должен бы заодно и удалять объект. Но сам объект не удаляется – только стягивается в точку, так что над ним возможны дальнейшие операции.
   Иногда в буфер копируют не текст, а его формат. Этим занимается метод CopyFormat, копирующий формат по первому символу объекта selection. Если этот символ – метка абзаца, копируется формат абзаца. Методом CopyFormat обладает только объект selection.
   Метод Paste позволяет поместить («приклеить») содержимое буфера в область, заданную объектами Range и Selection. Эта операция опасна, так как происходит замена, а не добавление текста. Поэтому обычно метод Paste применяется к объектам Range и Selection, предварительно стянутым в точку вставки. Метод PasteFormat применяет форматирование, хранящееся в буфере, к объекту Selection.
   Например, создадим макрос, который вставляет список «урок, экзамен, сдал!», копирует его и помещает еще раз на лист.
   Sub Макрос1()
   With Selection.ParagraphFormat
   Selection.TypeText Text:="Работа с текстом:"
   Selection.TypeParagraph
   With
   ListGalleries(wdBulletGallery).ListTemplates(1)._ListLevels(1)
   End With
   End With
   ListGalleries(wdBulletGallery).ListTemplates(1).Name = ""
   Selection.Range.ListFormat.ApplyListTemplate
   ListTemplate:=ListGalleries(wdBulletGallery).ListTemplates(1), ContinuePreviousList:=False, ApplyTo:= _wdListApplyToWholeList, DefaultListBehavior:=wdWord10ListBehavior
   Selection.TypeText Text:="урок"
   Selection.TypeParagraph
   Selection.TypeText Text:="экзамен"
   Selection.TypeParagraph
   Selection.TypeText Text:="сдал"
   Selection.TypeParagraph
   Selection.Range.ListFormat.RemoveNumbers
   NumberType:=wdNumberParagraph
   Selection.TypeParagraph
   Selection.Font.Bold = wdToggle
   Selection.Font.Italic = wdToggle
   Selection.TypeText Text:="Работа завершена!"
   Selection.WholeStory
   Selection.Copy
   Selection.PasteAndFormat (wdPasteDefault)
   Selection.PasteAndFormat (wdPasteDefault)
   End Sub

5.2. Форматирование документа

Работа с текстом(продолжение)
   Наиболее важной особенностью работы на VBA в Word является вставка текста в документ при работе с приложениями. Для этого служат объекты Range и Selection, которые являются главными для практически любых операций, которые можно выполнять с помощью Word VBA. Некоторые из этих действий можно применять к документам в целом, но в общем случае вам необходим диапазон или выделенная область, прежде чем вносить изменения. Мы, однако, рассмотрим действия с документом при его создании.
   Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, таблица, ячейка таблицы, комментарий и т. д. определяют диапазоны. Например, для того чтобы вставить некоторый текст в уже существующий документ, необходимо прописать код:
   ActiveDocument.Paragraphs(1).Range.Text = «Oxo-xo!!»
   Причем данная строка будет расположена в конце существующего параграфа. С другой стороны, используя объект Selection, можно также вставить некоторый текст в документ, используя метод Add и присвоение свойства Text объекту Selection:
   If Documents.Count = 0 Then Documents.Add
   Selection.Text = "Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, « + TextBox1.Text +», и отвечает запросам всех программистов!»
   В результате выполнения данного программного кода в документе Word будет выведена строка:
   Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, Светлана, и отвечает запросам всех программистов!
   Здесь имя Светлана, например, считано с текстового поля некоторой формы, имеющей всего одно поле ввода для имени и кнопку «Вывод текста» (рис. 64).
 
    Рис. 64.Форма ввода данных
 
   При работе с текстом на рабочем листе Word необходимо знать следующие коды:
    определение цвета
   Selection.Font.Color =
   wdColorRed – красный
   wdColorDarkRed – бордовый
   wdColorDarkTeal – бирюзовый
   wdColorBlue – синий
   wdColorGreen – зеленый
   wdColorBlack – черный
   wdColorOrange – оранжевый
 
    определение жирности
   Selection.Font.Bold =
   wdToggle – жирность
 
    определение начертания
   Selection.Font.Italic=
   wdToggle – курсив
 
    определение выравнивания
   Selection.ParagraphFormat.Alignment=
   wdAlignParagraphRight – выравнивание по правому краю
   wdAlignParagraphCenter – выравнивание по центру
   wdAlignParagraphJustify – выравнивание по левому краю
 
    вставка в текст конкретного предложения
   Selection.TypeText Text:="Пример работы с текстом"
    вставка новой пустой строки
   Selection.TypeParagraph
    установка размера букв
   Selection.Font.Size = 14
    Примечание.Для правильного оформления кода пользуйтесь возможностями создания макроса написания программы.
   Одним из элементов оформления диалоговых окон является элемент управления Image(рисунок). Его основные свойства:
   Autosize – изменяет размер рисунка на форме (автоматически или нет);
   Picture – отображает графический файл, выводимый на форму;
   pictureSizeMode – устанавливает масштабирование рисунка (не весь рисунок, вся поверхность объекта, целиком внутри объекта);
   PictureAligment – устанавливает расположение рисунка внутри объекта (слева, справа, вверху, внизу);
   pictureTilling – покрывает объект мозаикой из рисунка.
   Данные свойства либо устанавливаются в окне свойств объекта, либо прописываются в листинге.
 
    Пример 30. Создать программу, которая будет производить подсчет количества теплоты, выделяемой в проводнике при протекании в нем тока. Формула для расчета количества теплоты известна под именем закона Джоуля – Ленца:
   где Q– количество теплоты в Джоулях;
    U– напряжение в вольтах;
    t– время в секундах;
    S– площадь поперечного сечения проводника в квадратных миллиметрах;
    l– длина проводника в метрах;
    р– удельное сопротивление материала проводника в Ом ? мм 2/м.
 
   Все исходные данные вводятся в текстовые поля формы. По итогам вычисления результат в виде объяснительной записки выводится в документ, а численный результат – в специальное окно формы.
    Технология выполнения
   Создайте форму по приведенному рис. 65.
 
    Рис. 65.Разработанная форма примера 30 в рабочем состоянии и вывод результирующих сведений в документ word
 
   При создании формы установите необходимые свойства элементов. Установите свойство Locked элемента TextBox6 как True, чтобы не допустить случайного ввода пользователем в него текста.
    Описание процедур
   Private Sub CommandButton1_Click()
   If Documents.Count = 0 Then Documents.Add
   Selection.Text = "При прохождении тока напряжением в " + TextBox1.Text + "вольт по проводнику длиной " + TextBox4.Text + " метров, сечением " + TextBox3.Text + "кв. мм и удельным сопротивлением " + TextBox5.Text + " Ом*мм2/м за " + TextBox2.Text + " секунд выделится " + TextBox6.Text + « джоулей теплоты»
   Selection.Collapse direction:=wdCollapseEnd
   End Sub
   Private Sub CommandButton2_Click()
   Unload Me
   End Sub
   Private Sub TextBox1_Change()
   scet
   End Sub
   Private Sub TextBox2_Change()
   scet
   End Sub
   Private Sub TextBox3_Change()
   scet
   End Sub
   Private Sub TextBox4_Change()
   scet
   End Sub
   Private Sub TextBox5_Change()
   scet
   End Sub
   Private Sub scet()
   If IsNumeric(TextBox1.Text) = True And
   IsNumeric(TextBox2.Text) = True And
   IsNumeric(TextBox3.Text) = True And
   IsNumeric(TextBox4.Text) = True And
   IsNumeric(TextBox5.Text) = True And Not Val(TextBox4.Text)
   = 0 And Not Val(TextBox5.Text) = 0 Then
   rez = ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) *
   Val(TextBox3.Text)) / (Val(TextBox4.Text) *
   Val(TextBox5.Text))
   TextBox6.Text = Str$(rez)
   CommandButton1.Enabled = True
   Else
   TextBox6.Text = ""
   CommandButton1.Enabled = False
   End If
   End Sub
    Примечание.При работе данного приложения все значения полей ввода должны быть числовыми. В VBA есть специальная функция для проверки того, является или нет введенная строка записью числа – IsNumeric. Для проверки отличия от нуля значений в последних двух полях ввода используется функция Val, которая переводит строковое выражение в числовое, если это строковое выражение содержит в своем начале цифры (или все состоит из них).
   Функция Str делает преобразование, обратное тому, что производит Val, – конвертирует числовое значение выражения в строковое, что позволяет этому значению в дальнейшем обрабатываться как строке.
   Таким образом, функции Val и Str преобразуют типы данных обрабатываемых ими переменных, соответственно, из строкового в числовой и из числового в строковый (см. главу 3).
Создание кнопки или панели в Word
   Назначить форме кнопку или пункт меню для непосредственного вызова приложения из Word нельзя – это можно сделать только для модулей. Поэтому нужно применить следующий способ. Создайте макрос (Меню + Insert + Module) в открытом проекте:
   Sub counter()
   userForm1.Show
   End Sub
   Переименуйте этот макрос по своему усмотрению, например Teplo. И выполните следующие действия.
   1. Щелкните правой кнопкой мыши в любом месте панели инструментов.
   2. В этом меню выберите команду Настройка(или Сервис + Настройка).
   3. В диалоговом окне Настройкащелкните на ярлыке вкладки Команды.
   4. Прокрутите список Категориивниз и найдите пункт Макросы. Выберите этот пункт. В списке «Сохранить в» выберите имя вашего документа, в котором создан макрос (рис. 66).
 
    Рис. 66.Поиск макроса для создания кнопки
 
   5. В правом окне найдите необходимый макрос (либо VBA-программу).
   6. Перетащите имя этого макроса или программы на панель инструментов.
   7. Создайте соответствующую надпись кнопки и, если нужно, рисунок (при помощи правой кнопки мыши).
   8. Закройте диалоговое окно Настройка,чтобы завершить работу.
   По выполнении всех перечисленных пунктов будет создана кнопка запуска приложения.
Задачи на закрепление материала
    Пример 31. Создать программу, позволяющую заполнять стандартные заявления студентов учебного заведения, если все необходимые данные заполняются в соответсвующих текстовых полях формы, а причина пропусков занятий выбирается из раскрывающегося списка (рис. 67, 68).
 
    Рис. 67.Разработанная форма примера 31 в рабочем состоянии
 
    Пример 32. Создать программу, позволяющую рассчитать сумму денег, затрачиваемых на бензин при поездке на дачу.
   При этом учесть следующее: условия поездки могут быть: в одну сторону, туда и обратно, можно сесть на чужую машину (данные условия учитываются в раскрывающемся списке «условия поездки» на создаваемой форме).
    Классному руководителю
    группы АС-42
    Сидорову О.И.
    от студента(ки)
    Петренко Олега Ивановича
Заявление
    Прошу считать пропуск за 15.05.2007 уважительным по причине: по семейным обстоятельствам.
Петренко Олег Иванович
18.05.2007
    Рис. 68.Примерный формат вывода заявления в документ word
 
   Полученный результат вычисляется по формуле:
   Результат = расстояние * (потребление бензина на 100 км) / 100*цену бензина за литр.
   Учесть, что если выбрали условие поездки «на чужой машине», то цена бензина равняется 0 руб.
    Рис. 69.Разработанная форма примера 32 в рабочем состоянии
 
   Также учесть, что если при вычислении результат превысит 400 руб., то выдать сообщение «Может, пойдем на рынок?».
   При создании формы придерживаться рис. 69, при выводе текста в документ Word – рис. 70.
При поездке на дачу, находящуюся на расстоянии 55 км, при цене бензина за литр 18,50 руб., потребление бензина составит 101,75 руб.
    Рис. 70.Примерный формат вывода расчетов в документ word
 
    Пример 33. Разработать программу, которая выдает Отчет о доходе вкладчикана настоящий момент. При этом учесть, что в интерфейсе формы процентная ставка выбирается из раскрывающегося списка (предусмотреть два вида процентов).
 
    Рис. 71.Разработанная форма примера 33 в рабочем состоянии
 
   При вычислении придерживаться следующих формул:
   если схема вычисления простая, то
   Доход = внесенная сумма + внесенная сумма * процентную ставку/100*срок/360;
   если схема вычисления сложная, то
   Доход = внесенная сумма + внесенная сумма * процентную ставку/100*срок/360 +0,01*(внесенная сумма * процентную ставку/100*срок/360).
   При разработке интерфейса формы опираться на приведенный рис. 71, а при выводе расчетов в документ Word – рис. 72.
Отчет о доходе
   На настоящий момент гражданин(ка) Евсеева Ольга Константиновна имеет на своем счету по простым процентам при начальной сумме вложения 1000 руб. за 150 дней при 2 %-ной ставке 1008,33 руб.
    Рис. 72.Примерный формат вывода расчетов в документ word
 
   Результат вычислений с соответствующими пояснениями выводится в документ Word, а в поле формы выдается числовой результат произведенных расчетов.
    Пример 34. Разработать программу, позволяющую заполнять заявление на восстановление студенческого билета при его порче (украли, потерял, постирал и т. д.). Причину порчи предусмотреть в раскрывающемся списке создаваемой формы.
   При работе придерживаться приведенных рис. 73 и 74.
   Курсивом выделены выражения, вставляемые программой после того, как будут заполнены соответствующие текстовые поля разрабатываемой формы.
 
    Рис. 73.Разработанная форма примера 34 в рабочем состоянии
 
    Рис. 74.Примерный формат вывода заявления в документ word

Глава 6
Автоматизация стандартных документов

6.1. Встроенные диалоговые окна

Диалоговые окна
   В VBA существуют две возможности создания диалоговых окон, позволяющих вести интерактивный диалог с пользователями.
   Окно сообщений MsgBox выводит простейшие сообщения для пользователя, а окно ввода InputBox обеспечивает ввод информации.
   Функция InputBox выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле.
   Синтаксис:
   InputBox(сообщение [,заголовок] [,default] [,xpos] [,ypos])
   Аргументы:
 
    сообщение– строковое выражение, отображаемое как сообщение в диалоговом окне. Может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (chr(13)), символа перевода строки (chr(10)) или комбинации этих клавиш (chr(13) & chr(10));
    заголовок– строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку помещается имя приложения;
    Default– строковое выражение, отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода отображается пустым;
    Xpos– числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана;
    Ypos– числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана.
   Чтобы передать эту информацию (введенное значение в поле ввода) программе, присвойте возвращенное функцией InputBox значение строковой переменной (рис. 75), например:
   strA=InputBox(«Какие места предпочитаете?»,"РЖД","У окна")
    Рис. 75.Результат функции InputBox
 
   Процедура MsgBox выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.
   Синтаксис:
   MsgBox(сообщение [, кнопки] [,заголовок] [,файл_справки, раздел])
   Аргументы:
    сообщение– строковое выражение, отображаемое как сообщение в диалоговом окне;
    кнопки –числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию равно 0. Все значения данного аргумента см. в табл. 17, 18;
    заголовок– строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку помещается имя приложения;
    файл справки– строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо наличие также аргумента context;
    раздел –числовое выражение, определяющее номер соответствующего раздела справочной системы.
 
    Таблица 17
Значения аргумента кнопки процедуры MsgBox
    Примечание.Первые кнопки активны по умолчанию.
 
    Таблица 18
Значения аргумента кнопки процедуры MsgBox
 
   Если в окне сообщения всего две кнопки, для выяснения, на какой из кнопок был щелчок, прекрасно подходит оператор If … then. Например:
   If MsgBox («Начинать?», vbYesNo)= vbYes then
   Операторы на действие этой кнопки
   Else
   Операторы на действие другой кнопки
   End if
    Пример 35 . Создать программу таким образом, чтобы при запуске формы, вводе имени в текстовое поле и нажатии на кнопку «Вывод текста» появлялось диалоговое окно, запрашивающее разрешение вывести текст (рис. 76).
 
 
    Рис. 76.Форма примера 35 в режиме конструктора
 
    Листинг работы формы
   Private Sub CommandButton1_Click()
   If MsgBox(«Вывести текст?», vbYesNo) = vbYes Then
   If Documents.Count = 0 Then Documents.Add Selection.Text = «Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, „+ TextBox1.Text + «, и отвечает запросам всех программистов!“
   Selection.Font.Color = wdColorBlue
   Selection.Font.Bold = wdToggle
   Selection.Font.Italic = wdToggle
   Else
   Unload Me
   End If
   End Sub
   В результате запуска приложения (рис. 77) в документе Word появится предложение:
   Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, Света, и отвечает запросам всех программистов!
    Рис. 77.Форма примера 35 в рабочем режиме
Задачи на закрепление материала
    Пример 36.Создать форму, имитирующую простейшую игру в орла и решку (рис. 78). Игрок выставляет флажок вместо подбрасывания монеты, а компьютер после нажатия кнопки Бросание монетызапускает случайное число, соответствующее орлу или решке. При совпадении выигрывает компьютер, при несовпадении – игрок. Все действия сопровождаются всплывающими диалоговыми окнами.
    Технология выполнения
   1. Создайте форму для реализации этой игры.
   2. Описание процедур.
    Кнопка Бросание монеты
   Private Sub CommandButton1_Click()
   Randomize
   монета = Int(2 * Rnd)
   If OptionButton1.Value = True Then
   If монета = 0 Then MsgBox «не везет. Займись-ка лучше изучением VBA»
   If монета = 1 Then MsgBox «везунчик. Поздравляю, ты выиграл»
   End If
   If OptionButton2.Value = True Then
    Рис. 78.Разработанная форма примера 36 в рабочем состоянии и диалоговое окно, реагирующее на результат игры
   If монета = 1 Then MsgBox «не везет. Займись-ка лучше изучением VBA»
   If монета = 0 Then MsgBox «везунчик. Поздравляю, ты выиграл»
   End If End Sub
    Кнопка Выход из игры
   Private Sub CommandButton2_Click()
   Dim ima As String
   intA = MsgBox(« Нажмите кнопку!», vbYesNoCancel +
   vbExclamation + vbDefaultButton3, «VBA для чайников!»)
   If MsgBox(«начинать?», vbYesNoCancel) = vbYes Then
   ima = InputBox(«введите Ваше имя», «Пример окна ввода»)
   If ima <> "" Then
   MsgBox «Привет,» & ima, vbInformation, «Пример окна сообщения»
   Else
   MsgBox «невежа, ты забыл ввести свое имя» & ima, vbExclamation, «еще один пример окна сообщения» End If
   Else
   If MsgBox(«ты точно подумал?», vbYesNoCancel) = vbNo Then
   MsgBox («ха-ха»)
   Else: MsgBox « Ну наконец-таки!»
   Unload Me
   End If
   End If End Sub
    Пример 37 . В разработанном игровом приложении предусмотреть создание окна «Банк», в котором будет выводиться результат очков игрока при остановке игры. Правила игры: при выигрыше игрока добавляется единица к сумме, лежащей в банке, при проигрыше – добавляется компьютеру (отнимается из суммы, лежащей в банке).
   Предусмотреть все необходимые диалоговые окна.
    Пример 38. [4]Смоделировать полную игру в орел и решку. Игрок вносит в банк определенную сумму денег. Во время игры нельзя добавлять деньги в банк. Игра состоит из последовательности шагов, априори конечных. На очередном шаге игрок загадывает либо орел, либо решку. Компьютер «бросает» монету. Если «монета падает той же стороной», которую задал игрок, то банк увеличивается на единицу, в противном случае – уменьшается на единицу. Игра заканчивается либо по желанию игрока, либо когда величина банка становится нулем или больше 10 000 руб. (определенная сумма). Игрок забирает себе содержимое банка. Можно предусмотреть максимальные и минимальные суммы, которые были в банке в течение всей игры.
    Примечание. Можно смоделировать бросание игральной кости, используя функцию Int(6* Rnd)+1. Правила меняются: выиграл тот, кто больше бросил.
    Технология выполнения
   Рассмотрим один из вариантов решения данной задачи. Усложним эту задачу тем, что каждое последующее окно вызывается соответствующим действием.
   1. Пусть при запуске приложения появляется первое диалоговое окно (рис. 79). При нажатии на кнопку «Начать игру» появляются диалоговые окна, запрашивающие имя игрока и подтверждение начать игру (см. рис. 80). После чего появляется форма ввода ставок (см. рис. 81).
   Private Sub CommandButton1_Click()
   imya = InputBox(«введите ваше имя», «Регистрация», «????»)
   If MsgBox(«Начинать?», vbYesNo, «Вы не передумали?») =
   vbYes Then
   UserForm2.Show
   Else
   UserForm4.Show
   End If
   End Sub
   Данная форма производит начальный выбор ставки и запускает главную форму примера 38.
 
    Рис. 79.Диалоговое окно запуска игры примера 38
 
    Рис. 80.Диалоговые окна начала игры
 
    Рис. 81.Диалоговое окно выбора ставки
 
   Кнопка Бросокимитирует подбрасывание монеты игроком, производит расчет выигрыша и проигрыша игрока, выводя соответствующие значения в текстовые окна с сообщением счета игры (рис. 82).
 
    Рис. 82.Главная форма примера 38, имитирующая игру в орел и решку
 
    Кнопка Бросок
   Private Sub CommandButton1_Click()
   TextBox1.Value = TextBox1.Value + 1
   If b = Fix(Rnd * 2 + 1) Then
   TextBox4.Value = TextBox4.Value + 1
   TextBox5.Value = TextBox5.Value + 1
   Else
   TextBox4.Value = TextBox4.Value – 1
   TextBox6.Value = TextBox6.Value + 1
   If TextBox4.Value < 1 Then
   MsgBox («Вы проиграли!!!»)
   UserForm4.Show
   End If
   End If
   If Val(TextBox2.Text) < Val(TextBox4.Text) Then
   TextBox2.Value = Val(TextBox4.Text)
   Else
   If Val(TextBox3.Text) > Val(TextBox4.Text) Then
   TextBox3.Value = Val(TextBox4.Text)