Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1к 2 семестр / Lektsii_po_informatikei / ЛЕКЦИЯ_13_Программирование на языке Visual Basic for Applicatin.doc
Скачиваний:
220
Добавлен:
02.04.2015
Размер:
1 Мб
Скачать

Функция InputBox

Функция выводит диалоговое окно, содержащее сообщение и поле для ввода значения одной переменной или нажатия кнопки; результат выполнения функции — текстовое значение.

InputBox(prompt[, title] [, default] [, xpos] _

[, ypos] [, helpfile, context])

default– текст в поле ввода по умолчанию;

Xпоз – расстояние по горизонтали между левой границей диалогового окна и левым краем экрана;

Yпоз –расстояние по вертикали между верхней границей диалогового окна и краем экрана;

Если нажимается кнопка ОК или клавиша Enter, функция возвращает пустую строку(“”).

Пример 5

Вывести в диалоговом окне (рис. 13.3) запрос на ввод значения переменной. Если значение не введено, переменной присваивается значение, заданное по умолчанию.

Рис. 13.3

Фрагмент программного кода:

Dim Msg, Title, Response, Default

Msg = "Введите число от 1 до 5"

Title = "Пример функции InputBox"

Defaut =”1”

Response = InputBox (Msg, Title, Default)

Управляющие конструкции vba

Управляющие конструкции VBA позволяют изменять порядок выполнения инструкций программного кода, организовывать циклическое повторение, управлять выполнением блоков инструкций, в зависимости от условий. Эти возможности присущи всем языкам структурного программирования.

Проверка условия — If

Условие — логическое выражение, принимающее значение True (Истина) или False (Ложь), или арифметическое выражение, для которого 0 эквивалентен False, а другие значения соответствуют True.

В зависимости от результатов проверки условия, выполняется определенный блок инструкций. Инструкция If имеет разновидности.

Вариант 1. Однострочный If — выполняется единственная инструкция в случае истинности условия:

If <условие> Then <инструкция>

Пример 6

Проверка значения TaxNalog, вычисление Sale, если TaxNalog больше 0.

Фрагмент программного кода:

IF TaxNalog>0 Then Sale=Summ1*(1+TaxNalog)

Вариант 2. Блочный If — выполняется заданная последовательность инструкций в случае истинности условия:

If <условие=True> Then

<блок инструкций>

End If

Пример 7

Проверка значения TaxNalog, если значение положительное, вычисляются значения Sale и SumNalog.

Фрагмент программного кода:

IF TaxNalog>0 Then

Sale=Summ1*(1+TaxNalog)

SumNalog=SumNalog+Sale

End If

Вариант 3. Выполнение определенного блока инструкций в зависимости от условия:

If <условие=True> Then

<блок инструкций1>

Else

<блок инструкций2>

End If

Пример 8

Проверка значения TaxNalog, вычисление значения Sale в зависимости от результата проверки.

Фрагмент программного кода:

IF TaxNalog>0 Then

Sale=Summ1*(1+TaxNalog)

Else

Sale=0

End If

SumNalog=SumNalog+Sale

Вариант 4. Последовательная проверка нескольких условий:

If <условие1=True> Then

<блок инструкций 1>

ElseIf <условие2=True> Then

<блок инструкций 2>

……………

ElseIf<условиеn=True> Then

<блок инструкций n>

Else

<блок инструкций Else>

End If

Пример 9

Выполнить проверку taxnalog и выбрать алгоритм вычисления Sale.

Фрагмент программного кода:

taxnalog = InputBox("Введите ставку налога")

summ1 = InputBox("Укажите сумму")

If taxnalog < 0.12 Then

sale = summ1 * (1 + taxnalog)

ElseIf taxnalog < 0.25 Then

sale = (summ1 - 200) * (1 + taxnalog)

ElseIf taxnalog < 0.35 Then

sale = (summ1 - 500) * (1 + taxnalog)

Else sale = (summ1 - 1000) * (1 + taxnalog)

End If

MsgBox sale

Select Case

Последовательная проверка условий для выбора альтернативы:

Select Case выражение

Case список_выражений1

<блок_инструкций1>

Case список выражений 2

<блок_инструкций2>

. . . . .

Case Else

<блок_инструкций_Else >

End Select

Проверяемое выражение может возвращать значение любого типа (логическое, числовое, строковое). Список выражений – одно или несколько выражений, разделенных стандартным разделителем – символ точка с запятой (;).

Элементы списка выражений могут задаваться как:

выражение

выражение1 To выражение2

Is логический_оператор(сравнение_выражения)

Пример 10

Для выбора алгоритма расчета sale выполнить проверку значения taxnalog.

Фрагмент программного кода:

taxnalog = InputBox("Введите ставку налога")

summ1 = InputBox("Укажите сумму")

Select Case taxnalog

Case Is < 0.12

sale = summ1 * (1 + taxnalog)

Case Is < 0.25

sale = (summ1 - 200) * (1 + taxnalog)

Case Is < 0.35

sale = (summ1 - 500) * (1 + taxnalog)

Case Else

sale = (summ1 - 1000) * (1 + taxnalog)

End Select

MsgBox sale

GoTo

Инструкция обеспечивает принудительный переход к оператору, помеченному указанной меткой.

Метка — строка символов, которая указывается перед другой инструкцией программного кода, отделяется символом двоеточие (:). Количество меток не ограничено, имя метки должно быть уникально на уровне процедуры, например:

GoTo метка

Пример 11

Повторить ввод ставки налога и исходной суммы, если результат расчета суммы налога неудовлетворительный.

Фрагмент программного кода:

Met1: taxnalog = InputBox("Ставка налога - ",, 0.2)

summ1 = InputBox("Исходная сумма - ", , 2000)

If MsgBox("Сумма налога - " & taxnalog * summ1 & _ vbCrLf & "Выход-OK,повтор-Cancel", vbOKCancel, _ "Результат расчета суммы налога")=2 Then GoTo Met1

For Next

Инструкция For…Next организует циклическое выполнение группы инструкций под названием тела цикла. Для принудительного выхода из цикла используется инструкция Exit For. Имеются две разновидности.

Вариант 1. Последовательное изменение значений переменной цикла (счетчика) от начального (начало) до конечного (конец) значения с заданным шагом:

For счетчик = начало To конец [Step шаг]

тело цикла (инструкции)

Next [счетчик]

Вариант 2. Организация повторения цикла для каждого элемента массива или коллекции объектов. Заранее указывать число элементов не требуется, разрешается использование вложенных циклов.

For Each <элемент> In <группа>

тело цикла (инструкции)

Next [элемент]

элемент — переменная, используемая для ссылки на элементы коллекции однородных объектов (семейства);

группа — имя коллекции (семейства) объектов.

Пример 12

Ввод начального значения, шага изменения и конечного значения ставки налога и суммы налогообложения. Вычислить суммы налога.

Фрагмент программного кода:

taxnalog = InputBox("Введите начальную " & _

"ставку налога", , 0.2)

stepnalog = InputBox("Введите шаг ставки " & _

"налога — не более 0,2", , 0.15)

maxtaxnalog = InputBox("Введите конечную " & _

"ставку налога не более 0,5", , 0.5)

summ1 = InputBox("Укажите начальную сумму " & _

"не более 1000", , 1000)

stepsumm = InputBox("Укажите шаг суммы " & _

"не менее 100", , 200)

maxsumm1 = InputBox("Укажите конечную сумму " & _

"не более 10000", , 2000)

For I = taxnalog To maxtaxnalog Step stepnalog

For j = summ1 To maxsumm1 Step stepsumm

sale = j * (1 + I)

MsgBox " Сумма налога при ставке " & _

I & "для суммы " & j & " равна " & sale

Next j

Next I

While…Wend

Выполняется проверка условия, если условие истинно, выполняются операторы тела цикла. Это так называемый цикл с предусловием, выход из цикла должен быть предусмотрен в теле цикла.

While условие продолжения цикла

операторы тела цикла

Wend

Пример 13

Вводится ставка налога и облагаемая налогом сумма. Если рассчитанная сумма налога удовлетворяет, выйти с помощью кнопки ОК.

Фрагмент программного кода:

i = InputBox("Введите ставку налога 0,12-0,25", _

, 0.12)

While sale > 0

sale = InputBox("Введите начальную сумму", _

, 1000)

sale = sale * (1 - i)

If MsgBox("Остаточная сумма после ” & _

"вычета налога - " & sale, vbOKCancel) = _

vbOK Then GoTo Ext

Wend

Ext: MsgBox "Конец расчета", vbInformation

Do …Loop

Циклическое выполнение операторов, имеет различные способы задания.

Вариант 1. Предварительная проверка условия до начала выполнения тела цикла. В теле цикла изменяется условия продолжения цикла. Если условие ложно, при очередной проверке управление передается следующей за Loop инструкции. Принудительный выход из цикла — инструкция Exit Do.

Do While <условие продолжения цикла>

тело цикла

Loop

Пример 14

Задать количество повторений цикла ввода. Если вводимое число больше 1000, обработку прекратить.

Фрагмент программного кода:

ff = CDec(InputBox("Число повторений цикла", , 5))

‘ функция CDEC преобразует строку в число

Do While ff >=0

ff = ff - 1

If CDec(InputBox("Введите любое число," & _

"меньше 1000", , 1000)) >= 1000 Then

Exit Do

End If

Loop

Вариант 2. Задается условие прекращения цикла. Если условие истинно, цикл не выполняется, управление передается инструкции, следующей за Loop.

Do Until <условие прекращения цикла>

тело цикла

Loop

Пример 15

Фрагмент программного кода:

ff = CDec(InputBox("Число повторений цикла", , 5))

Do Until ff < 0

ff = ff - 1

If CDec(InputBox("Введите любое число, " & _

"меньше 1000", , 1000)) >= 1000 Then

Exit Do

End If

Loop

Вариант 3. Для первого выполнения цикла условие не проверяется. В теле цикла выполняется изменение условия продолжения цикла. Цикл продолжается, пока условие истинно. Если условие ложно, управление передается инструкции, следующей за Loop While. Принудительный выход из тела цикла выполняется с помощью инструкции Exit Do:

Do

тело цикла

Loop While <условие продолжения цикла>

Пример 16

Фрагмент программного кода:

ff = CDec(InputBox("Число повторений цикла", , 5))

Do

ff = ff - 1

If CDec(InputBox("Введите любое число, " & _

"меньше 1000", , 1000)) >= 1000 Then

Exit Do

End If

Loop While ff > 0

Вариант 4. Для первого выполнения цикла условие не проверяется. В теле цикла выполняется изменение условия. Цикл продолжается, пока условие истинно. Если условие ложно, управление передается инструкции, следующей за Loop While. Принудительный выход из тела цикла выполняется с помощью инструкции Exit Do:

Do

тело цикла

Loop Until <условие прекращения цикла>

Пример 17

Фрагмент программного кода:

ff = CDec(InputBox("Число повторений цикла", , 5))

Do

ff = ff - 1

If CDec(InputBox("Введите любое число, " & _

"меньшее 1000", , 1000)) >= 1000 Then

Exit Do

End If

Loop Until ff <= 0

Пример 18

Создать процедуру, которая вызывает процедуры:

  • подачи звукового сигнала определенного тона;

  • вывода сообщения;

  • сохранения документа в папке с указанным именем.

Option Explicit

Sub Main() ‘Главная процедура

MultiBeep 56 ‘Вызов MultiBeep с 1 параметром

Message ‘Вызов Message без параметра

SaveDoc "c:\Metod", "Ex1.doc"

‘Вызов SaveDoc с 2 параметрами

End Sub

‘**********************************

Sub MultiBeep(bps)

Dim i As Integer

For i = 1 To bps

Beep

Next i

End Sub

‘**********************************

Sub Message()

MsgBox "Сохраните документ!"

End Sub

‘**********************************

Sub SaveDoc(dr As String, fl As String)

‘Параметры — имена папки и файла

Dim all As String

If Dir(dr) <> "" Then ‘Проверка наличия папки

all = dr & "\" & fl

‘сохранить активный документ

ActiveDocument.SaveAs FileName:=all, _

FileFormat:=wdFormatDocument

Else

MsgBox "Папки нет, файл не сохранен"

End If

End Sub

Пример 19

Создать функцию вычисления наращенной суммы, размещаемой на депозитном счете на заданный срок под определенный годовой процент с условием дополнительных вложений.

Формула для вычисления:

p mt – фиксированная сумма ежегодного взноса;

r – годовая процентная ставка;

n – срок;

type - тип выплат: 1 - в начале, 0 - в конце учетного периода;

pv – начальный капитал;

fv – наращенная сумма.

Public Function FVAL(pv As Single, nr As Single, _

pmt As Single, kper As Byte) As Single

If nr / 100 > 1 Then

MsgBox "Таких годовых процентов, как " _

& CStr(nr) & " не бывает"

Exit Function

Else

FVAL = pv * (1 + nr / 100) ^ kper + _

pmt * (1 + nr / 100) ^ kper / nr / 100

End If

End Function

‘**********************************************

Public Sub Bank()

Dim ppv As Single, pnr As Single, ppmt As Single, pkper As Byte

ppv = InputBox("Начальный капитал - ")

pnr = InputBox("Годовой процент - как целое число")

ppmt = InputBox("Ежегодный взнос - ")

pkper = InputBox("Срок размещения - ")

MsgBox "На первоначальный капитал - " & ppv & _

"руб. под " & pnr & " % годовых " & _

" и ежегодном взносе - " & ppmt & _

" руб. в течение - " & pkper & _

" лет Вы заработаете - " & _ CStr(Round(FVAL(CSng(ppv), CSng(pnr), _

CSng(ppmt), CByte(pkper)), 2)) & _

" руб.", vbInformation, _

"Результат финансовой функции"

End Sub