|
Ю.В. Клинаев. КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ В СРЕДАХ ПРОГРАММИРОВАНИЯ VBA И MATLAB
Учебное пособие по дисциплинам «Компьютерное моделирование», «Моделирование физических систем», «Цифровая обработка сигналов» «Информатика», «Информационные технологии», для студентов специальности 220400 и инженерного бакалавриата
СОДЕРЖАНИЕ Введение............................................................................................................3 1. Среда программирования VBA................................................................3 2. Моделирование некоторых физических систем..................................38 3. Моделирование некоторых систем, сводимых к обыкновенным дифференциальным уравнениям.........................................................63 4. Моделирование и обработка сигналов..................................................75
УДК 681.3.06 681.3.06(075.8) 53.072 519.682 ББК 32.973 К 49
Рецензенты: Кафедра теоретической и математической физики Саратовского государственного университета Доктор физико-математических наук, профессор В.Б. Байбурин
Одобрено редакционно-издательским советом Саратовского государственного технического университета
Клинаев Ю.В. (и др.) К 49 Компьютерное моделирование в средах программирования VBA и MatLab: Учеб. пособие. Саратов: Сарат. гос. техн. ун-т, 2002. 98 с. ISBN 5-7433-1036-Х
В пособии представлены все необходимые сведения по языку VBA и элементам управления. Даны примеры моделирования некоторых физических и иных систем, исследование которых результативно только в компьютерном эксперименте. Приведены программы, необходимые для моделирования и обработки сигналов по технологиям математического пакета MatLab. Предназначено для студентов специальности «Программное обеспечение вычислительной техники и автоматизированных систем».
УДК 681.3.06 681.3.06(075.8) 53.072 519.682 ББК 32.973
© Саратовский государственный технический университет, 2002 © Клинаев Ю.В. ISBN 5-7433-1036-Х ВВЕДЕНИЕ
Настоящее пособие содержит минимум справочных сведений, необходимых студенту для разработки приложений (в том числе, оконных) в среде программирования VBA. Рассмотрены некоторые задачи курса физики, исследование которых результативно только в компьютерном эксперименте. Как правило, это явления, моделирование которых основано на решении дифференциальных уравнений. Все представленные в пособии алгоритмы даны в виде, достаточном для их программной реализации. Для части наиболее сложных исследуемых моделей даны программные коды и результаты моделирования. На примере численного моделирования сложных сигналов и их обработки, представлены некоторые возможности и технологии компьютерного моделирования с помощью пакета Signal Processing Toolbox системы MatLab.
1. СРЕДА ПРОГРАММИРОВАНИЯ VBA
VBA - Visual Basic for Applications VBA применяет технологию визуального программирования, т.е. конструирование рабочей поверхности приложения и элементов его управления непосредственно на экране; а также запись всей программы или ее частей при помощи MacroRecorder. MacroRecorder - транслятор, создающий программу (макрос) на языке VBA действий пользователя. Объекты и их семейства VBA относится к языкам объектно-ориентированного программирования (ООП). ООП можно описать как методику анализа, проектирования и написания приложений с помощью объектов. Что есть объект в ООП? Объект - это инкапсулированные данные вместе с кодом, предназначенным для их обработки. Все визуальные объекты, такие как рабочий лист (Worksheet), диапазон (Range), диаграмма (Chart), форма (Userform) - являются объектами. Семейство (объект Collection) представляет собой объект, содержащий несколько других объектов, как правило, одного и того же типа. Например, объект Workbooks (рабочие книги) содержит все открытые объекты Workbook (рабочая книга). Каждый элемент семейства нумеруется и может быть идентифицирован либо по номеру, либо по имени. Например, Worksheets (1) - первый рабочий лист активной книги, Worksheets («Лист 1») - рабочий лист с именем Лист 1.
Объекты OLE и ActiveX В VBA используется механизм OLE (Object Linking And Embedding - связывание и внедрение объектов), который позволяет взаимодействовать с любыми программами, поддерживающими OLE. Примером элементов, которые можно интегрировать при помощи механизма OLE, являются вставляемые объекты OLEObject, создаваемые, например, при помощи программ WordArt, ClipArt и т.п. OLE - объект отличается от обычного тем, что при выборе внедренного объекта активизируется программа, связанная с этим объектом, и меню приложения заменяется меню программы, его создавшей (этот объект). Теперь можно, не выходя из основного приложения, работать с данным объектом, редактируя и видоизменяя его средствами создавшей его программы. Кроме того, OLE-технология обладает так называемым свойством Automation, с помощью которого можно устанавливать свойства, применять методы и отрабатывать события внедренных объектов как обычных объектов приложения. С 1996 г. фирма Microsoft ввела новую технологию и теперь то, что раньше именовалось OLE -объект, называется объектом ActiveX, a OLE-Automation называется ActiveX Automation. Классы Важнейшим понятием ООП является класс. Класс обычно описывается как проект, на основе которого впоследствии будет создан конкретный объект. Таким образом, класс определяет имя объекта, его свойства и действия, выполняемые над объектом. В свою очередь, каждый объект, в соответствии с описанным выше, является экземпляром класса. Иерархия объектов Объектная библиотека VBA располагает более 100 различных объектов, находящихся на различных уровнях иерархии. Иерархия определяет связь между объектами и показывает пути доступа к ним. Неполный пример модели встроенных объектов VBA: Полная ссылка на объект состоит из ряда имен вложенных последовательно друг в друга объектов. Разделителями имен объектов в этом ряду являются точки, ряд начинается с объекта Application и заканчивается именем самого объекта. Например, полная ссылка на ячейку А1 рабочего листа Лист 1 рабочей книги с именем Архив имеет вид: Application.Workbooks («Архив»).Worksheets(<^HCTl»).Range («А 1»). Приводить полную ссылку на объект не обязательно - достаточно неявной ссылки на него: в неявной ссылке упоминание активных в данный момент объектов не обязательно. Если ссылка на ячейку А1 дана в программе, выполняемой в Excel, то можно привести относительную ссылку: Workbooks(«ApxHB»).Worksheets(<^HCTl»).Range(«A 1»). Если книга Архив активна, то достаточно: Worksheets(<^HCTl»).Range («A1»). Если активен рабочий лист Лист1, то достаточно: Range(«Al»). Методы Объект сам по себе не представляет большого значения в программе. Важно то, какие действия можно совершать над объектом, и какими свойствами он обладает. Метод представляет собой действие, выполняемое над объектом. Синтаксис применения метода: Объект. Метод Application.Quit - метод Quit (закрыть) закрывает приложение Application. Метод можно применить ко всем объектам семейства. Worksheets («Лист1»). ChartObjects.Delete. - удалить все диаграммы с рабочего листа Лист1, где ChartObjects - семейство диаграмм. Свойства Свойство представляет собой атрибут объекта, определяющий его характеристики, такие как размер, цвет, положение на экране и состояние объекта, например, доступность или видимость. Чтобы изменить характеристики объекта, надо изменить значение его свойств. Синтаксис установки значения свойства: Объект. Свойство = ЗначениеСвойства Application.Caption = "Пример" - изменяется заголовок окна Excel посредством задания свойства Caption объекту Application. Свойство можно изменять сразу у всех объектов семейства: Worksheets. Visible = False - объекту Visible (видимость) дается значение False (ложь) и все рабочие листы активной книги (семейство объектов Worksheets) скрываются. Среди свойств особое место занимают свойства, возвращающие объект: ActiveWindow - возвращает активное окно Excel. Active Workbook - возвращает активную рабочую книгу активного окна Excel. ActiveSheet - возвращает активный лист активной рабочей книги. ActiveDialog - возвращает активное диалоговое окно активного рабочего листа. ActiveChart - возвращает активную диаграмму активного рабочего листа. ActiveCell - возвращает активную ячейку активного рабочего листа.
ActiveCell ActiveWindow. ActiveCell Application. ActiveWindow.ActiveCell
- эти определения эквивалентны. Событие Событие представляет собой действие, распознаваемое объектом (щелчок мыши, нажатие клавиши и т.д.), для которого можно запрограммировать отклик. События возникают в результате действий пользователя или программы или могут быть вызваны системой. Суть программирования в VBA заключается в этих двух понятиях: событие и отклик на него. Если пользователь производит какое-то воздействие на систему, скажем, нажимает кнопку, тогда в качестве отклика выполняется код созданной пользователем процедуры. Таким образом, действие, происходящее в системе, является событием, а отклики на них - процедурами. Этот специальный вид процедур, генерирующих отклик на событие, называется процедурами обработки событий. В целом программирование на VBA состоит в создании кода программ, которые генерируют прямо или косвенно отклики на события. Переменная - это такая часть программы, которая имеет имя и значение. Имя переменной уникально и неизменно, а значение может меняться в процессе выполнения алгоритма. Имя переменной - это строка символов, которая идентифицирует (англ. identify - распознавать, устанавливать идентичность) переменную в программе. Имя переменной - идентификатор. Допустимые имена: 1. Длина не превосходит 255 символов. 2. Имя не может содержать точек, пробелов и следующих символов: %, @, &,!, #, $. 3. Имя может содержать любую комбинацию букв, цифр, символов, но начинается с буквы. 4. Имя не должно быть ключевым словом VBA. Ключевое слово языка - зарезервированное (служебное) слово. Хотя регистр букв в имени не играет никакого значения, но предпочтительно выделение смысла переменной: Процентнаяставка - ПроцентнаяСтавка Х_назнач – Х_НазНач. Значение переменной - это данные, которые хранятся и обрабатываются системой VBA. Хранятся и обрабатываются данные по-разному, что зависит от принадлежности данных к определенному типу. Типом данных называют способ хранения и представления данных. В зависимости от того, значение какого типа может принимать сама переменная, определяется тип самой переменной. В языке VBA переменная имеет один из 15 типов: 1. Короткое целое число (Byte) - размер (байт) 1, значение 0-255. 2. Логический (Boolean) - 2 байта, значение True, False. 3. Целое число (Integer) - 2 байта. 4. Длинное целое число (Long) - 4 байта. 5. Десятичное число обычной точности (Single) - 4 байта. 6. Десятичное число двойной точности (Double) - 8 байт. 7. Десятичное протяженное число (Currency-денежный) - 8 байт. Значением этой переменной является число, имеющее до 15 знаков слева от десятичной точки и до 4 знаков справа (обеспечивает точность до 1 копейки). 8. Масштабируемое целое число (Decimal) - 14 байт. 9. Дата (Data) - 8 байт (информация о дате). 10. Объект (Object) - 4 байта (любой указатель объекта) ссылка на объект, в частности на элемент управления экранной формы. 11. Строка переменной длины (String) - 10 байт + длина строки. 12. Строка постоянной длины (String) - длина строки 13. Произвольное значение (Variant) - 16 байт - числовые подтипы: переменная может иметь любой тип. 14. Строковые подтипы (Variant) - 22 байта + длина строки. 15. Тип данных, определяемый пользователем (с помощью ключевого слова Туре) - объем определяется элементами. Форма записи значения с использованием буквы Е: 0.000005 - 5Е-6 47000000 - 4.7Е+7 Символы @ # $ % &! - используются в качестве суффиксов переменных различных типов. Диапазон значений распространенных типов данных VBA Integer (2 байта) - 32768 до 32767 Byte (1 байт) Целое без знака 0-255 Long (4 байта) Длинное целое - 2147483648 до 2147483647 Single (4 байта) Числа с плавающей точкой обычной точности Отрицательные: - 3,402823Е38 до - 1,401298Е-45 Положительные и 0: 1,401298Е-45 до 3,402823Е38 String (1 байт на символ) - Строки символов от 0 до 2 млрд Variant (16 байт + 1 байт на каждый символ, если значение типа Variant содержат строку) - для любых типов данных, кроме типа, определенного пользователем.
Объявление типа переменной Объявление типа - установление границ значений переменной, которые определяются ее типом. Если тип не объявлять, то он по умолчанию в VBA принимается за Variant. Способы объявления типа: 1. С помощью суффикса
Integer - % Long - & Single -! Double -# String -$ Currency - @ Примеры: My-name$ J255% X! M_M_M_#
Переменная может встречаться в программе много раз, но если тип переменной указан с помощью суффикса, то его можно написать только один раз - когда переменная впервые появилась в программе. 2. Объявление с помощью оператора описания переменной. В начале текста программного кода пишется строка со следующим синтаксисом:
Dim ИмяПеременной [As ТипПеременной] Dim, As - ключевые слова VBA, с помощью которых записывается данный оператор описания переменной^ Назначение этого оператора - объявить переменную, то есть задать ее имя и ее тип. ИмяПеременной (без суффикса) - по изложенным правилам. ТипПеременной - от 12 перечисленных ключевых слов. Скобки [ ] используют в записи для обрамления конструкций, которые могут отсутствовать. Вместо конструкции "ИмяПеременной As ТипПеременной" после слова Dim можно через запятую записать несколько таких конструкций:Dim X As Single, 1255 As Integer, M_M_M As Double Для типа String после этого слова можно указать, какова будет фиксированная длина строки - значение этой переменной: Dim ИмяПеременной As String * ДлинаСтроки Dim Telephon As String * 15 «8(095)301-22-06» - номер телефона. 3.Объявление с помощью оператора объявлений типа. В начале программного кода: ОператорОбъявленияТипа СписокИнтерваловИмен. ОператорОбъявленияТипа: - одно из 11 ключевых слов: Тип переменной Integer % Long & Single! Double # Оператор объявлений типа Deflnt DefLng DefSng DefDbl
Currency @ String$ Byte Boolean Date Object DefCur DefStr DefByte DefBool DefDate DefObj Variant DefVar
СписокИнтерваловИмен - это один или несколько интервалов имен - пар букв вида: Буква1 - Буква 2. Все переменные, имена которых начинаются с буквы, находящейся в данном интервале, будут иметь объявляемый тип. Deflnt A-F, i-j, Р-S/ Таким образом: abba, Car, j255, Squa_12 - тип Integer. Присвоение переменной значения [Let] ИмяПеременной = ЗначениеПеременной. Оператор - синтаксическая единица языка программирования, которая используется в программе для выполнения отдельного предписания. Две категории операторов: Алгоритмические операторы - используются для организации последовательности выполняемых компьютером действий. Важнейшие из них - операторы безусловных переходов, условные операторы, операторы циклов. Функциональные операторы - встроенные в язык программы функции и процедуры, с помощью которых производятся важные и распространенные действия, например: ввод и вывод данных, математические функции и т.п. Синтаксис (синтаксическое правило) для оператора присваивания: [Let] ИмяПеременной = ЗначениеПеременной. Varl% = 32000 Var2& = -2000000000 Var3! =9E-30 Var4# = Var3! Var4# = 9e-30 - Верно Varl% = 33000 - ошибка Var2& = -3000000000 - ошибка Var3! = Var4# - ошибка.
Вычисление выражений Чаще всего в операторе присваивания присутствуют так называемые арифметические выражения. Арифметическое выражение -это последовательность чисел, констант, переменных, функций и арифметических выражений, заключенных в круглые скобки, которые соединены между собой знаками арифметических операций (их 8 штук):
Переменные, входящие в выражение, должны иметь численные значения. Функции, входящие в выражение, также должны иметь численные значения. Говорят, что функции возвращают определенные значения. Константы - это величины, значения которых не могут меняться: синтаксис константы - Const ИмяКонстанты = ЗначениеКонстанты. Кроме объявленных констант, можно использовать системные, встроенные константы - например, номера цветов в графических методах - vbRed - номер красного цвета, vbWhite - номер белого цвета, их номера - ключевые слова в VBA. Функции Функция одного аргумента - это правило, которое ставит в соответствие одному аргументу из области его допустимых значений ровно одно значение функции. ИмяФункции (АргументФункции). Функция неполных аргументов: ИмяФункции (СписокАргументовФункции) через запятую. Встроенные функции 1. Математические функции: Abs(x) -1 х |. Cint (х) - целое, ближайшее к х. Fix (х) - целое, ближайшее к числу х без дробной части. Int (х) - наибольшее целое, не превышающее х. Sqr (х) - корень квадратный х. Sin (х) - синус. Cos (х) - косинус. Tan (х) - тангенс. Ath (х) - арктангенс. 2. Системные функции - InputBox, MsgBox: MsgBox (message, i, title)
Синтаксис: InputBox (Приглашение [Заголовок] [,НачальноеЗначение]) Fam$=InputВох(«Введите фамилию», «Ввод списка студентов», «Сидоров»). I=MsgBox (Текст[,Опция] [Заголовок]) - возвращает i. Или MsgBox Текст[,Опция] [.Заголовок]). Текст - до 1024 символов - можно разбить на «порции», вставляя символы переноса строки и ВК. Например: Строка 1$&Chr(13)&Chr(10)&Строка2&. 13 и 10 - коды ASCII символов переноса строки и ВК. Окно сообщения содержит и дополнительную информацию, если [Опция] - аргумент OP=Op1+Op2. Op1 определяет вид пиктограммы, которая помещается в Окно Сообщения:
Op1 Критическое сообщение 16 вопрос 32 предупреждение 48 информация 64 Ор2 определяет набор кнопок в Окне Сообщений:
Ор2 Набор кнопок 0 OK 1 ОК Отмена 2 Стоп Повтор Пропустить 3 Да Нет Отмена 4 Да Нет 5 Повтор Отмена
Если в MsgBox используется бесскобочная форма синтаксиса, то нажатие одной из кнопок приводит просто к завершению работы функции. Если используется MsgBox () (со скобками), то значение функции присваивается целой переменной. Возвращаемое значение 1=1,....,7. I определяется тем, какая из кнопок Окна сообщения нажата: I кнопка 1 ОК 2 Отмена 3 Стоп 4 Повтор 5 Пропустить 6 Да 7 Нет Структура программы Sub Progr_Name() Dim {Тело} End Sub`Progr_Name Ввод данных X = InputBox ("введите данные (числовые)") D = CSng (х) - преобразование символьного представления числа, возвращаемого функцией InputBox, в тип Single.
Вывод данных i = MsgBox (S, 1, "Площадь треугольника"), где S -имя переменной, 1 - индикатор вида окна вывода. Индикатор = 0 ОК 1 ОК Отмена 2 Стоп Повтор Пропустить 3 Да Нет Отмена 4 Да Нет 5 Повтор Отмена 6 ОК (переменная) i = MsgBox
Значение i указывает кнопку, которая была нажата:
I = 1 ОК 2 Отмена 3 Стоп 4 Повторить 5 Пропускать 6 Да 7 Нет
Полная форма (синтаксис) функций InputBox() и MsgBox() InputBox (prompt [,title][,default][,xpos] - [,ypos][,helpfile,contex]) 1. prompt - строка-сообщение в диалоговом окне. Если строк много, то для разделения строк можно использовать ВК - Chr (13), ПС - Chr (10) или ВК&ПС (Chr(13)&Chr(10)) 2. title - строка-отображение в строке заголовка диалогового окна. Если title отсутствует, то в строку заголовка помещается имя приложения. 3. Default - строка-отображение в поле ввода как используемое по умолчанию. Если его нет, то поле пустое. 4. Xpos - числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана. Если xpos нет, то диалоговое окно выравнивается по центру по горизонтали 5. Ypos - числовое выражение, задающее расстояние между верхней границей диалогового окна и верхним краем экрана. Если ypos нет, то диалоговое окно помещается по вертикали примерно на 1/3 экрана. 6. Helpfile - строка, определяющая имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если аргумент указан, необходимо наличие аргумента context. 7. Context - числовое выражение, определяющее номер соотвествующего раздела справочной системы. Если этот аргумент указан, то необходимо наличие аргумента helpfile.
MsgBox (prompt [,buttons][,title][,helpfile,context]) 1. prompt - строка, отображаемая как сообщение в диалоговом окне. 2. Buttons - числовое выражение (опция), представляющее сумму значений, которое указывает число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию равно 0.
Значение констант и тип кнопок:
Константа Значение VbOKOnly 0 VbOKCancel 1 VbAbortRetrylgnore 2 VbYesNoCancel 3 VbYesNo 4 VbRetryCancel 5
3. title - строка, отображаемая в строке заголовка. Если его нет, то в строку заголовка помещается имя приложения. 4. Helpfile - строковое выражение, определяющее имя файла справки о данном диалоговом окне. 5. Context - комментарий.
Buttons Константа Значение Значок сообщения VbCritical 16 крест в красном круге VbQuestion 32 вопросительный знак в круге VbExclamation 48 восклицательный знак в треугольнике Vblnformation 64 буква "i" в круге
Значение аргумента buttons, определяющее основную кнопку в диалоговом окне.
Константа Значение Номер основной кнопки VbDefaultButtonl 0 1 VbDefaultButton2 256 2 VbDefaultButton3 512 3 VbDefaultButton4 768 4
Вместо возвращаемого значения - «какая кнопка нажата», лучше использовать константы VBA:
Константа Значение Нажатая кнопка VbOK 1 OK VbCancel 2 Отмена (Cancel) VbAbort 3 Прервать (Abort) VbRetry 4 Повторить (Retry) VbIgnore 5 Пропустить (Ignore) VbYes 6 Да (Yes) VbNo 7 Нет (No)
Элементы управления, их свойства и методы Поле Поле TextBox создается с помощью кнопки Поле. Используется для ввода текста, который потом используется в программе, или для вывода результатов расчетов программы. Текст, введенный в поле, обычно в программе преобразуется либо в числа, либо в формулы. Основные свойства: TextBox 1.Свойство. Text - возвращает текст, содержащийся в поле. Visible - допустимые значения True - поле отображается во время выполнения программы, False - в противном случае. Enabled - True - пользователь непосредственно может вносить изменения в содержание поля - поле доступно. False - в противном случае. Multiline - True - многострочный режим ввода текста. False -однострочный. Wordwrap - True - режим автоматического переноса. False - в противном случае. AutoSize - True - устанавливается режим автоматического изменения размера поля так, чтобы весь вводимый текст помещался в нем. False - фиксированный размер поля. Кнопка Кнопка CommandButton создается с помощью кнопки Кнопка^ Используется для инициирования выполнения некоторых действий, вызываемых нажатием кнопки; например, запуск программы или остановка ее выполнения, печать результатов и т.д. Caption - надпись. Cancel - True - устанавливаются отменяющие функции для кнопки, т.е. нажатие клавиши <Esc> приводит к тем же результатам, что и нажатие кнопки, False - в противном случае. Visible - True - кнопка отображается во время выполнения программы, False - нет. Enabled - True - запрещено нажатие кнопки пользователем, False - в противном случае. Accelerator - назначает клавишу, при нажатии на которую одновременно с клавишей <Alt> происходит запуск действий, связанных с кнопкой: CommandButton1. Accelerator = "С". Picture - внедряет на поверхность кнопки картинку. CommandButton1.Picture= _ LoadPicture("C:\Мои_документы\Kpyг.bmp")
Функция LoadPicture (полное_имя_файла) считывает графическое изображение, где выражение в скобках - аргумент, указывающий полное имя файла, т.е. его спецификацию. Default - задает кнопку по умолчанию, т.е. устанавливает ту кнопку, для которой действия, связанные с ней, будут выполняться при касании клавиши «Enter». Переключатель Элемент управления OptionButton создается с помощью кнопки Переключатель. Свойства. Value - возвращает True, если переключатель выбран. False - в противном случае. Enabled - допустимое значение True - пользователь может выбрать переключатель (доступен). False - в противном случае. Visible - True — переключатель отображается во время выполнения программы, False - в противном случае. Capture - надпись, отображаемая рядом с переключателем.
Пример: Игра «Орел - Решка». Выбирая один из двух переключателей, игрок загадывает один из вариантов: орел (1 для компьютера) или решка (0 для компьютера). Не зная о выборе игрока, компьютер синтезирует с равной вероятностью либо 0, либо 1, что и моделирует бросание монеты. Если игрок указал правильную сторону монеты, подброшенную компьютером, то он выиграл. В противном случае выигрывает компьютер. Компьютер информирует о результате игры.
С помощью UserForm1 создадим диалоговое окно, а в модуле UserForm1 введем следующую процедуру, синтезирующую отклик на нажатие кнопки. Бросание монеты: Private Sub CommandButtonl_Click () - генерация с равной вероятностью либо 0 (решка), либо 1 (орел), т.е. моделирование бросания монеты. Randomize Mонета=Int(2*Rnd) Сравнение результата бросания монеты компьютером с ситуацией, если игрок заказал «Орел». If OptionButton 1. Value = True Then If Монета = 0 Then MsgBox "He везет!Займись изучением географии!" If Монета = 1 Then MsgBox "Везунчик! Ты выиграл!" End if
Сравнение результата бросания компьютером с ситуацией, если игрок загадал «Решка». If OptionButton2.Value = True Then If Монета=1 Then MsgBox "He везет мне как всегда...." If Монета=0 Then MsgBox "Везунчик! Снова выиграл!' End if End Sub Общий метод SetFocus - устанавливает фокус на вызвавшем этот метод элементе управления.
Функции проверки типов: IsArray (переменная) - является ли переменная массивом. IsData () - является ли переменная датой. IsEmpty ()- была ли переменная описана инструкцией Dim. IsError () - является ли переменная кодом ошибок. IsNull () - является ли переменная пустым значением (Null). IsNumeric () - является ли переменная числовым значением. IsObject () - является ли переменная объектом.
Пример: программа "Калькулятор (только "деление")" Private Sub CommandButtonl_Click() Dim Числитель As Double Dim Знаменатель As Double Dim Результат As Double Rem проверка первого поля. If IsNumeric (TextBoxl.Text) = False Then MsgBox "Ошибка в числителе", Vblnformation, "Деление" TextBox1.SetFocus Exit Sub End if Rem проверка второго поля. If IsNumeric (TextBox2.Text) = False Then MsgBox "Ошибка в знаменателе", Vblnformation, "Деление" TexfBox2.SetFocus Exit Sub End if If CDbl (TextBox2.Text) = 0 Then MsgBox "Знаменатель не может быть нулем", Vblnformation, "Деление"
TextBox2.SetFocus Exit Sub End if Числитель=СDbl(ТехBох1.Text) Знаменатель=СDbl(TextBox2.Text) Результат=Числитель/Знаменатель TextBox3.Техt=СStr(результат) End Sub
Перехват и обработка ошибок Из диалогового окна VBA видно, что каждая ошибка имеет свой код. Коды наиболее часто встречающихся ошибок:
В идеале разрабатываемое приложение не должно никогда аварийно прерываться. В приложении следует создать средства перехвата любой возможной ошибки, обработать ее, выдать сообщение пользователю и обеспечить безаварийное продолжение работы приложения. Обычно конструкция перехвата ошибок имеет следующую структуру. Инструкция On Error Происходит перехват ошибки. Устанавливает, что должна делать программа в случае появления ошибки.
Подпрограмма обработки ошибки Синтаксис 1: On Error GoTo строка - активизирует подпрограмму обработки ошибок, начало которой определяется аргументом. Строка -метка или номер строки. Синтаксис 2: On Error Resume Next - указывает, что при возникновении ошибки происходит передача управления на инструкцию, непосредственно следующую за инструкцией, где возникла ошибка. Синтаксис 3: On Error GoTo 0 - отключает любой активизированный обработчик ошибок в текущей процедуре. Инструкция Resume - обеспечивает процедуре возможность продолжить работу после обработки ошибок. Синтаксис 1: Resume - после обработки ошибки управление передается той инструкции, в которой произошла ошибка. Синтаксис 2: Resume строка - после обработки ошибки управление передается инструкции с номером строка (или метка строка). Синтаксис 3: Resume Next - передается управление инструкции, следующей за инструкцией, в которой произошла ошибка. Инструкция останавливает выполнение процедуры. Exit Exit Sub Exit Function Exit Property Подпрограмма обработки ошибки обычно включает объект Err, который содержит информацию об ошибках выполнения. Некоторые свойства и методы объекта Err: Свойства: Number - возвращает код ошибки. Description - возвращает строковое выражение, содержащее текст сообщения об ошибке. Метод Clear - очищает все значения свойств Err.
Вернемся к калькулятору: пусть в поле знаменатель не 0, а 1Е-40 -появится ошибка переполнения. В обработке ошибки предусмотрим два отклика: 1. Пользователь информируется программой в случае появления ошибки переполнения; знаменателю и числителю присваивается значение 1 и с этим значением производится вычисление. 2. При появлении ошибки, отличной от ошибки переполнения, выполнение программы прерывается с информированием пользователя об ошибке.
Private Sub CommandButtonl_Click() Dim Числитель As Double Dim Знаменатель As Double Dim Результат As Double 'Передача управления на обработчик ошибок, помеченный меткой 'Обработка. On Error GoTo Обработка 'Проверка, является ли числитель числом. If IsNumeric (TextBox1.Text) = False Then MsgBox "Ошибка в числителе", _ Vblnformation, "Деление" TextBox 1.SetFocus Exit Sub End if 'Проверка, является ли знаменатель числом. If IsNumeric (TextBox2.Text) = False Then MsgBox"Ошибка в знаменателе",_Vblnformation,"Деление" TextBox2.SetFocus Exit Sub End if 'Проверка, является ли знаменатель нулем. If CDbl (TextBox2.Text) = 0 Then MsgBox "Знаменатель не может быть нулем",_ Vblnformation, "Деление" TextBox2.SetFocus Exit Sub End if 'Вычисление Числитель = CDbl (TextBox1.Text) Знаменатель = CDbl (TextBox2.Text) Результат = Числитель/Знаменатель TextBox3.Text = Cstr (Результат) Выход из процедуры в случае успешного завершения Exit Sub Rem Обработчик ошибок Обработка: Select Case Err.Number 'Обработка ошибки переполнения Case Is = 6 MsgBox "Произошла ошибка переполнения", _ Vblnformation, "Деление" TextBox1.Text = 1 TextBox2.Text = 1 Знаменатель = 1 Resume 'Обработка любой другой ошибки Case Else MsgBox "Произошла ошибка: "&Err.Description& Vblnformation, "Деление" Exit Sub End Select End Sub Другие элементы управления Рамка (является контейнером) - элемент управления Frame. Используется для визуальной группировки элементов управления. Основным свойством является Capture, отображающее надпись рамки.
Флажок и выключатель Элемент управления CheckBox -флажок. Предоставляет пользователю возможность выбора. Обычно имеет два состояния: установленное и сброшенное, но может настраиваться на выбор из трех альтернатив. Флажок имеет те же свойства Value, Enabled, Visible, Capture, что и переключатель. Свойство TripleState: False - выбор 2-x:False и True; True - выбор 3-х: False, True, Null. Элемент ToggleButton - выключатель. Предоставляет те же возможности, что и флажок.
Пример: Private Sub UserFormlnitialize () 'Выключатель ToggleButton 1. Value=True ToggleButton2.Value=False ToggleButton3.TripleState=True ToggleButton3. Value=Null 'Флажок CheckBoxl. VaIue=True CheckBox2.Value=False CheckBox3 TripleState=True CheckBox3.Value=False End Sub
Список ListBox - применяется для хранения списка значений. Из списка выбирается одно или несколько значений. Свойства: Listlndex - возвращает номер текущего элемента списка, нумерация начинается с нуля. ListCount - число элементов в списке. Toplndex - элемент списка с наибольшим номером. ColumnCount - устанавливает число столбцов в списке. TextColumn - устанавливает столбец в списке, элемент которого возвращается свойством Text. Enable - True - запрещен выбор значений из списка, False - в противном случае. Text - возвращает выбранный с списке элемент.; List — возвращает элемент списка, стоящий на пересечении строки и столбца (List(row,colurrm) - синтаксис). MultiSelect - устанавливает способ выбора элемента списка. Значения: fmMiltiSelectSingle - выбор только одного элемента FmMultiSelectMulti - разрешен выбор нескольких элементов посредством либо щелчка, либо нажатием «Пробел». FmMultiSelectExtended - разрешено использование «Shift» при выборе ряда последовательностей элементов списка. ListStyle - значение fmListStylePlain - выбранный элемент из списка выделяется цветом. FmListStyleOption - перед каждым элементом в списке располагается флажок и выбор элемента из списка соответствует установке флажка. MatchEntry - выводит 1-й подходящий элемент из списка при наборе его имени на клавиатуре. Значения: frnMatchEntryNone - режим вывода подходящего элемента в списке отключен. FmMatchEntryLetter - выводит подходящий элемент по набра ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования... Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все... Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор... Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|