КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Глобальные переменныеЗакрытие пользовательской формы, удаление ее из оперативной памяти, уничтожает все визуальные компоненты и их настройки. Например, в какое положение установлены переключатели, какие строки выбраны из списка и так далее. При программировании визуальных компонентов в операторах If приходится записывать длинную иерархическую цепочку, чтобы получить доступ к значению свойства вложенного визуального компонента. Чтобы сделать операторы If короче, а программу понятнее, и сохранять состояние переключателей при закрытии пользовательской формы, используют глобальные переменные, в которых сохраняют значения свойств визуальных компонентов. С каждой радиокнопкой свяжем переменную p…, которая равна 1, если радиокнопка включена, и равна 0, если радиокнопка выключена. Переменные будут вещественные, как и курсы валют, чтобы в вычислениях меньше было преобразований типов. Запишем алгоритм преобразования входной суммы денег Sinput в рублевую сумму Srub: Srub=Sinput*(pInRub + pInEuro*KursEuro + pInDoll*KursDoll) Преобразуем рублевую сумму денег Srub в выходную сумму Sout: Sout=Srub*(pOutRub + pOutEuro/KursEuro + pOutDoll/KursDoll) В каждой скобке только одна переменная p… равна 1, а две остальные равны 0. Поэтому пересчет денег избавлен от условных операторов If. Всего в задаче 11 вещественных переменных: 6 – радиокнопки, 2 –курсы валют, 2 – входная и выходная сумма, 1 – рублевая сумма. Нужно, чтобы этими переменными могли пользоваться (могли их видеть) все программы в независимом модуле Валя и в модуле формы. Эти переменные должны быть глобальными. Локальная переменная. Создается оператором Dim в той программе, где используется. Доступна (видна) только внутри программы, где создана. Уничтожается, как только программа завершит работу. Модульная переменная. Создается оператором Dim, который должен находиться вначале модуля до первого оператора (Sub или Function) первой программы модуля. Доступна (видна) всем программам только этого модуля. Уничтожается по завершению работы всего проекта. Глобальная переменная. Создается оператором Public, который должен находиться вначале модуля до первого оператора (Sub или Function) первой программы модуля. Доступна (видна) всем программам во всех модуля проекта. Уничтожается по завершению работы всего проекта. Для всех видов переменных тип задается конструкцией As … Добавим глобальные переменные в модуль Валя, в макросе Валюта перед запуском формы ValCalc сделаем начальные установки глобальных переменных, свойств радиокнопок и курсов валют, запустим форму ValCalc и распечатаем глобальные переменные после закрытия окна ValCalc. Public pInRub As Double Public pInDoll As Double Public pInEuro As Double Public pOutRub As Double Public pOutDoll As Double Public pOutEuro As Double Public KursDoll As Double Public KursEuro As Double Public Sinput As Double Public Sout As Double Public Srub As Double
Sub Валюта() pInRub = 1: pInDoll = 0: pInEuro = 0 ValCalc.InRub.Value = 1 'включить радиокнопку pOutRub = 1: pOutDoll = 0: pOutEuro = 0 ValCalc.OutRub.Value = 1 'включить радиокнопку KursEuro = 45.07 ValCalc.KrsEuro.Text = KursEuro KursDoll = 30.62 ValCalc.KrsDoll.Text = KursDoll Sinput = 0: Srub = 0: Sout = 0
ValCalc.Show
MsgBox "входные " & pInRub & pInEuro & pInDoll _ & vbNewLine & "выходные " & pOutRub & pOutEuro & pOutDoll _ & vbNewLine & "KursEuro " & KursEuro _ & vbNewLine & "KursDoll " & KursDoll _ & vbNewLine & "вх.сумма " & Sinput _ & vbNewLine & "руб.сумма " & Srub _ & vbNewLine & "вых.сумма " & Sout End Sub В макросе Валюта оператор ValCalc.Show запустит форму ValCalc, и она будет окном на экране до тех пор, пока в окне не нажмем кнопку <Выход>. Закроем окно ValCalc. Только тогда завершится работа оператор ValCalc.Show, и в окне функции MsgBox распечатаются глобальные переменные. Эта печать нужна нам только для отладки программы Валюта. Когда программа будет готова, мы закомментируем оператор с функцией MsgBox. Свяжем глобальные переменные с радиокнопками. Включение радиокнопки будет запускать макрос, в котором переменной для этой кнопки присваивается 1, а двум другим переменным присваивается 0. В окне программы MsVB на форме ValCalc сделаем двойной щелчок на радиокнопке «Входная валюта Рубли». Откроется модуль формы, а в нем – только что созданный макрос для этой радиокнопки. Private Sub InRub_Click() End Sub Как видно, макрос радиокнопки реагирует на событие «щелчок по кнопке», это событие включает эту радиокнопку и выключает остальные зависимые радиокнопки. Напомним, что фрейм объединяет радиокнопки в группу зависимых переключателей. Вставим в пустой макрос операторы присваивания значений глобальным переменным. Порядок операторов присваивания не важен, будем соблюдать порядок радиокнопок на форме. Private Sub InRub_Click() pInRub = 1 pInEuro = 0 pInDoll = 0 End Sub Такие же макросы нужно сделать для остальных 5 радиокнопок. Самый быстрый способ – скопировать макрос, изменить имя радиокнопки и вставить 1 на новое место. Немного больше придется потрудиться, когда появится макрос для первой радиокнопки Out. Не забывайте после сделанных изменений в тексте программы сохранять рабочую книгу. Если после запуска программы VBA компьютер повиснет так серьезно, что придется вызывать диспетчер задач Windows (<Ctrl+Alt+Del>) снова открывать рабочую книгу, в текстах программ VBA сохранится только то, что сохранено в рабочей книге. Запустим макрос Валюта, и в окне ValCalc щелкнем «Входная валюта Евро» и «Выходная валюта Доллары». Щелкнем кнопку <Выход>. На экране появится окно функции MsgBox. Как видно, входные 010 и выходные 001 глобальные переменные связаны с радиокнопками и работают правильно.
|