Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Глобальные переменные




Закрытие пользовательской формы, удаление ее из оперативной памяти, уничтожает все визуальные компоненты и их настройки. Например, в какое положение установлены переключатели, какие строки выбраны из списка и так далее.

При программировании визуальных компонентов в операторах 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 глобальные переменные связаны с радиокнопками и работают правильно.


Поделиться:

Дата добавления: 2015-08-05; просмотров: 58; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты