Учебное пособие по информатике. Часть 3
.pdf71
Пример 2: Найти произведение первых n натуральных чисел.
Sub Factor ()
Const n as Integer=20, Fact as Integer=1 Dim i as Integer
For i=1 to n Fact = Fact*i Next i
MsgBox Format (Fact, “############”) „ Будет выведено 2432902008176640000
End Sub
Пример 3: Найти сумму элементов выделенного диапазона
With Selection n=.Rows.Count m=.Column.Count End With : S=0 For i=1 to n
For j=1 to m S=S+selection.Cells(i,j).value Next j
Next i
with Section.End(xlDown) „ Здесь под 1 столбцом выделенного
.offset (1,0).value = “Сумма” „диапазона выводится «сумма»,
.offset (1,1).value = S „а в соседней клетке значение
End With
2. Оператор Do_Loop является вторым оператором, позволяющим организовать циклический процесс.
Он создаѐт логически управляемый цикл. Имеет 4 модификации: а) условие True в начале цикла
Do [While <условие>] – выполняется пока условие истинно [<блок операторов>]
[Exit Do]
[<блок операторов>]
Loop
б) условие True в конце цикла:
Do
[<блок операторов>]
[Exit Do]
[<блок операторов>] Loop [While <условие>]
в) условие False в начале цикла:
Do [Until <условие>] |
– выполняется пока условие |
[<блок операторов>] |
не станет истинным |
[Exit Do]
[<блок операторов>]
Loop
г) условие False в конце цикла:
Do
[<блок операторов>]
72
[Exit Do]
[<блок операторов>]
Loop [Until <условие>]
Пример 1:
Option Explicit
Sub Do_Rnd()
Dim a As Single: Dim I as Integer Randomize
Do While True a = Rnd()
Debug.Print a „печать случайного числа
If a>0.99 Then Exit Do Loop
End Sub
Пример 2. Вычислить сумму в каждом столбце матрицы
Sub CommandButton1_Click() Dim i, j, s(3), x(5, 3) As Integer For j = 0 To 2
s(j) = 0
For i = 0 To 4
x(i, j) = Cells(i + 1, j + 1) s(j) = s(j) + x(i, j)
Next i
Лист1.Range("E" & i + 1).Value = s(j) Next j
End Sub
Пример 3: Найти сумму всех вводимых чисел.
S=0: Do
x=InputBox (“Введите число”)
If Not IsNumeric (x) then Exit Do S=S+x
Loop
Пример 4: Код, ожидающий правильного ввода пароля Do : Пароль = InputBox(“Введите пароль”)
Loop Until Пароль = “Привет”
3. Следующей разновидностью оператора цикла является оператор
While_Wend.
Его невозможно прервать – нет Exit Do. Он имеет следующую конструкцию:
While <условие> <блок операторов>
Wend
Пример: Бросается игральная кость до выпадения 6 очков.
Dim Бросок As integer, Очки As integer Randomize
Очки = Int(6*Rnd())+1
Бросок = 1 While Очки<6
Бросок = Бросок + 1
Очки = Int (6+ Rnd ())+1
73
Wend
MsgBox “Победили на броске” & CStr(Бросок)
4. Циклический оператор For Each_Next относится к операторам объектного типа, т.е. применяется к массивам и наборам элементов. Имеет вид:
For Each <элемент>In<набор>
[<блок операторов >]
[Exit For] „– используется для прерывания цикла [<блок операторов >]
Next [<элемент>]
Пример 1: Суммирование элементов массива
Dim A As Variant Dim b, s as Integer
A = Array (1, 4, 12, 23, 34, 3, 23) S = 0
b=InputBox (" введите с клавиатуры значение для b ") For Each b in A
S=S+b
Next b
Пример 2: S = 0
For Each с in Selection.Cells S = S+c.value
Next c 'Из выделенного диапазона
MsgBox “S=”&CStr(S)
Пример 3: Работа с семейством рабочих листов – удаление из книги рабочего листа Тест.
For Each Лист in Worksheets If Лист.Name = “Tест” then
Лист.Delete End If
Next Лист
Пример 4: Работа с семейством ячеек в диапазоне А1 : С4, ячейки с положительными значениями окрашиваются в синий цвет, а с неположительными – в красный.
With Ячейка
if .value <=0 then
.Interior.ColorIndex =3 else .Interior.ColorIndex =5 End if
End With Next Ячейка
Пример 5. Вычислить сумму элементов массива а(30), значения которых лежат в диапазоне [2,5].
Private Sub CommandButton1_Click() Dim а (30) Аs 1ntegег, i, k, sum Аs Integег
'внесение в массив значений элементов массива с рабочего листа i = 1
Dо Whi1е i <= 30
а(i) = Се11s( (i + 1) , 1) i = i + 1: Lоор
74
i =1 k = 1
sum = 0
Dо Whi1е i <= 30
If а(i) >= 2 And а(i) <= 5 Then Лист1.Rаngе("В" & k + 1).vа1ue = i k = k + 1
sum= sum + а (i) End If
i=i + 1 Lоор
Лист1.Rаngе("С2").vа1uе = sum End Sub
Privatе Sub СоmmandВutton2_С1iсk () Dim i Аs Integег
i = 1
Dо Whi1е i <= 30 Се11s ( (i + 1) , 2) = " " i = i + 1
Lоор
Се11s (2, 3) = " " End Sub
Можно использовать оператор цикла For_Next. Тогда программа примет вид, приведенный ниже:
Private Sub CommandButton1_Click() Dim a(10) As Integer, i, k, sum As Integer For i=0 to 9
a(i) = Cells((i + 1), 1) Next i
k = 1 sum = 0
For i=0 to 9
If a(i) >= 2 And a(i) <= 5 Then Лист1.Range("b" & k + 1).Value = i k = k + 1
sum = sum + a(i) End If
Next i Лист1.Range("c2").Value = sum End Sub
Пример 6: Оператор With избавляет программиста от использования большого количества повторений имени одного и того же объекта или работе с его свойствами и методами. Происходит структурирование кода, что делает его более прозрачным.
1 вариант:
With Range (“A1”)
.value = 3
.Font.Italic = True End With
2 вариант:
With Range (“A1”)
75
.value = 3 With .Font
.italic = True
.size = 12
.Bold = True
.Color = RGB(255, 30, 255) End With
End With
11 ВСТРОЕННЫЕ ДИАЛОГОВЫЕ ОКНА
11.1 Окно ввода информации
Встроенных диалоговых окон существует 2 типа: окно сообщений и окно ввода) [5].
Окно сообщений выводит простейшую информацию (MsgBox), а окно ввода (InputBox) обеспечивает ввод информации.
Функция InputBox – окно с двумя кнопками ОК и Cancel, строкой сообщения и полем ввода. Рассмотрим оператор, выдающий это окно на экран.
InputBox (Prompt[,Title] [,Default] [,xPos] [,yPos] [,Helpfile, Context]), где:
Prompt – строковое выражение, отображаемое в строке заголовка окна Title – строковое выражение, отображаемое в строке заголовка окна.
Default – строковое выражение, отображаемое в поле ввода по умолчанию, если не ввести другое.
xPos – расстояние по горизонтали между левой границей ДО и левым краем экрана (если нет, то по центру горизонтали)
yPos – расстояние по вертикали между верхней границей ДО и верхним краем экрана (если нет, на 1/3 высоты экрана)
Helpfile – адрес файла-справки о ДО, а Context – номер соответствующего раздела в системе.
Пример:
Option Explicit
Sub Msg_Inp()
Dim Response As Integer
Dim Message As String
Dim Default As String Dim Title As String Dim Help As String Dim Style As Integer Dim Ctxt As Integer
Message = «Введите Фамилию, Имя и Отчество студента» „ строка-„сообщение Title=”Пример окна для ввода” „Заголовок окна
Default = “Смирнов Игорь Александрович” „текст по умолчанию
Responce = InputBox (Message; Title; Default; 100; 100) End Sub
11.2 Встроенные диалоговые окна для обмена сообщениями
Они бывают нескольких типов [5, 8]. А) Простое окно-сообщение
Пример: MsgBox (“Строка сообщения”)
76
Б) Функция MsgBox – выводит на экран ДО с сообщением, устанавливая режим ожидания нажатия кнопки пользователя.
MsgBox ((Prompt[,Buttons] [,Title] [,Helpfile, Context]) Prompt – строковое сообщение в ДО
Buttons – числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых в ДО кнопок: 0 – ОК+отмена; 2 – стоп + повтор + пропустить; 3 – да + нет + отмена; 4 – да + нет; 5 – повтор + отмена.
Остальные пункты команды, как в InputBox. Кроме кнопок можно отображать коды значков: 16 – белый на сером; 48 – черный на светло сером;
Пример. Использование окна с кнопками Да, Нет, Отмена.
Sub Три_кнопки ()
Dim Сообщение As String: Dim Кнопкa As Integer
„В Переменной сообщение задаѐтся структура ДО Сообщение = vbYesNoCancel + vbQuestion + vbDefaultButton1
„Кнопка возвращает число при нажатии кнопки
Кнопка = MsgBox (“Выберите Да, Нет, или Отмена?”, Сообщение, “Ещѐ пример”) „В зависимости от полученного значения будет одно из сообщений из Select Case: Select Case Кнопка
Case vbYes: MsgBox “Выбрали Да”,vbInformation, “Еще пример” Case vbNo: MsgBox “Выбрали Нет” vbInformation, “Еще пример”
Case vbCancel: MsgBox “Выбрали Отмена”, vbInformation, “Еще пример” End Select
End Sub
Пример. Использование в программе.
Sub Msg_Priim()
Dim a As Single Randomize a=rnd()
MsgBox “Значение случ. числа” &cstr(a) End Sub
Пример. Ввод значения.
x= InputBox(“Введите х”, “Пример”) : y=x^2
Для вывода в окне командной кнопки используются коды, приведѐнные в табл. 5. Рассмотрим пример использования этих кодов.
Пример. Использование кодов кнопок.
Option Explicit
Sub Msg_Priim()
Dim Response As Integer, Msg As String Dim Title As String
Dim Help As String, Style As Integer, Ctxt As Integer
Msg= «Вы хотите продолжить?»
Style = 35‟vbYesNoCancel+ vbDefaultButton1+ vbQuestion
Title=”Пример окна сообщения” „ (Заголовок окна) Help = “DEMO.HLP” „Имя файла-подсказки
Ctxt = 0 „Номер контекста внутри файла-подсказки
Response = MsgBox ( Msg; Style; Title; Help; Ctxt ) „ присвоение „ переменной кода ответа:End Sub
|
|
77 |
|
|
Таблица 5 |
Код |
Константа |
Описание |
|
|
Коды командных кнопок: |
0 |
vb OK Only |
OK |
1 |
vb OK Cancel |
OK, Отмена |
2 |
vb AbortRetryIgnore |
Прекратить, Повторить, Игнорировать |
3 |
vb YesNoCancel |
Да, Нет, Отмена |
4 |
vb YesNo |
Да, Нет |
5 |
vb RetryCancel |
Повторить, Отмена |
|
|
Коды активности по умолчанию |
0 |
vbDefaultButton1 |
Активная первая |
256 |
vbDefaultButton2 |
Активная вторая |
512 |
vbDefaultButton3 |
Активная третья |
|
|
Коды пиктограмм |
16 |
vbCritical |
Важное сообщение |
32 |
vbQuestion |
Предупредительный запрос (справка) |
48 |
vbExclamation |
Предупредительное сообщение |
64 |
vbInformation |
Информационное сообщение |
|
|
Коды модальности |
0 |
vbApplicationModal |
Программное модальное описание (требуется |
|
|
обязательный ответ, работа приложения |
|
|
приостанавливается) |
4096 |
vbSystemModal |
Системное модальное описание (требуется |
|
|
обязательный ответ – работа всех приложений |
|
|
приостанавливается) |
Программное модальное описание (требуется обязательный ответ, работа приложения приостанавливается).
Системное модальное описание (требуется обязательный ответ – работа всех приложений приостанавливается).
11.3 Диалоговые окна пользователей
Они обеспечивают ввод и редактирование данных файлов и таблиц [8]. Для создания ДО выполнить команду:
Вид | Макрос | Диалог – тип вставляемого листа.
На экране есть панель инструментов Формы для размещения и настройки элементов окна и основа для построения ДО пользователя.
Состав пиктограмм панели инструментов Формы имеет вид, приведѐнный
втабл. 6.
Вдиалоговом окне могут размещаться элементы произвольного вида, которые сознают наборы объектов. Доступ к конкретному элементу – по имени набора и имени или порядковому номеру элемента внутри набора.
78
Таблица 6. Перечень пиктограмм |
||
Вид |
Название вида |
|
|
|
|
Метка (создание текстовых вставок в окне) |
Label |
|
Поле ввода текста |
EditBox |
|
Рамка группы (обеспечение элементов окна) |
GroupBox |
|
Командная кнопка (может быть назначена процедура |
CreateBatton |
|
или макросы) |
||
|
||
Поле ввода со списком (комбинированное окно) |
Combination List Edit |
|
Поле ввода с раскрывающимся списком |
Combination |
|
Drop_Down Edit |
||
|
||
Редактор органов управления (свойства объекта) |
Control Properties |
|
Переключатель координатной сетки |
Toggle grid |
|
Флажок (контрольный индикатор) |
Check Box |
|
Переключатель (кнопка выбора) |
OptionBatton |
|
Окно списка |
ListBox |
|
Раскрывающийся список (выпадающее окно) |
Drop_Down |
|
Линейка прокрутки |
ScrollBar |
|
Регулятор счетчика (спиннер) |
Spinner |
|
Редактор кода программы |
EditCode |
|
Выполнение диалога |
RunDialog |
Метки – не могут редактироваться пользователем в процессе работы с диалоговым окном, но могут изменяться программным путем с помощью свойства Caption объекта Labels()
Пример.
Sheets(“<имя_листа_диалога>”). Labels (“<имя_объекта_метки>”). Caption = “строка_текста”
Поле ввода – является многострочным, содержит текст, который можно корректировать. Поле ввода входит в набор EditBoxes(), его можно редактировать и программным способом.
Пример.
Sheets(“<имя_листа_диалога>”). EditBoxes (“<имя_окна>”). Text = “строка_текста”
Рамка группы – обеспечивает объединение нескольких элементов ДО. Он изображается в первую очередь, а за тем в него размещают новые элементы. Для задания строки текста в новой строке рамки программным путем, используется его свойство Caption.
Флажок – обеспечивает аддитивный выбор, имеет свойство Value (значение True или False) и образует набор CheckBoxes().
Выбран – не выбран Кнопка переключателя – обеспечивает альтернативный выбор из списка
взаимоисключающих опций. Образуют набор OptionBattons () Свойство Value имеет значения True или False - не выбрана кнопка.
79
Окно списка – предоставляет для выбора список значений, при этом редакция списка невозможна. Список формируется только программным путем. Он может быть организован с помощью свойств объекта:
1)ListFillRange – ссылка на диапазон ячеек электронной таблицы, содержащая значения элементов списка.
2)List() – перечисление элементов списка, непосредственно, замена старого списка новым целиком.
Раскрывающийся список – подобен окну списков, но входит в набор
DropDowns()
Поле ввода со списком – объединяет окно списка и окно редактирования. При выборе элемента списка он автоматически появляется в окне редактирования, где его корректируют (здесь два различных окна).
Поле ввода с раскрывающимся списком – представляет собой комбинацию выпадающего списка, элементы которого редактируются.
Линейка прокрутки – создаѐт вертикальную или горизонтальную линейку прокрутки. Value содержит положение ползунка – число, доступ к линейкам через набор ScrolBars().
Свойства Min и Max – это диапазон значений, а свойства LargeChange и SmallChange содержат величину изменения Value.
Регулятор счетчика – аналогичен линейке прокрутки, но нет свойства
LargeChange.
12 КОНТРОЛЬНЫЕ ВОПРОСЫ
1.Что входит в основные понятия языка VBA?
2.Перечислите пункты меню для создания функции пользователя
3.Какие встроенные типы данных вы знаете?
4.Как описываются переменные?
5.Как описываются массивы переменных?
6.Как объявляют константы?
7.Какие операции языка VBA вы знаете?
8.Какие операторы языка VBA вы знаете?
9.Как вызвать процедуру?
10.Перечислите операторы управления
11.Какая конструкция у оператора повтора?
12.Какие есть встроенные диалоговые окна?
13.Как создать окно ввода информации?
14.Укажите оператор для вызова встроенного диалогового окна для обмена сообщениями
15.Как создают диалоговые окна пользователей?
80
ЛИТЕРАТУРА
1.Информатика. Базовый курс. 2-е издание. Под ред. Симоновича С.В. –
СПб.:Питер, 2005. – 640 с.
2.Могилев А.В., Пак Н.И., Хеннер Е.К. Информатика. – М.: Academia, 2004. – 848 с.
3.Гофман В., Хоменко А. Delphi. Быстрый старт. - СПб: БХВ-Петербург,
2002.
4.Основы программирования в DELPHI. Часть 1. – Новосибирск, СГГА
5.Гарнаев А.Ю. Microsoft Excel 2002: разработка приложений. – СПб.: БХВ-Петербург, 2003. – 768 с.
6.Брайан Сайлер, Джефф Споттс. Использование Visual Basic 6. Специальное издание: пер. с англ. – М.: Издательский Дом «Вильямс», 1999. –
832 с.
7.Михаэль Райтингер, Геральд Муч. Visual Basic 6: для пользователя: пер.
снем. – Издательская группа BHV, 1999. – 416 с.
8.Волченков Н.Г. Программирование на Visual Basic 6: В 3-х ч. – М.:
ИНФРА-М, 2000. – 288 с.
9.Глушаков С.В., Сурядный А.С. Microsoft Excel 2007. – М.: АСТ МОСКВА, 2008. – 416 с.
10.Березин Б.Н., Березин С.Е. Начальный курс С и С++. – М.: ДИАЛОГ-
МИФИ, 1996. – 288 с.
11.Либерти Д. Освой самостоятельно С++. 10 минут на урок, 2-е издание: пер. с англ. – М.: Издательский Дом «Вильямс», 2005. – 352 с.
12.Культин Н.Б. С/С++ в задачах и примерах. – СПб: БХВ-Петербург, 2001.
– 288 с.
13.Керниган Б., Ритчи Д., Фьюэр А. Язык программирования Си. – М.: Финансы и статистика, 1985. – 601 с.
14.Уэйт М., Прата С., Мартин Д. Язык Си. Руководство для начинающих:
пер. с англ. – М.: Мир, 1988. – 512 с.
15.Райслорф К., Хендерсон К. Borland C++ Builder. Освой самостоятельно.
– М.: БИНОМ, 1998. – 704 с.
16.Теллес М. Borland C++ Builder: библиотека программиста. – СПб.:
Питер Ком, 1998. – 512 с.
17.Холингвэрт Д., Баттерфилд Д., Сворт В., Олсоп Д. и др. С++ Builder. Руководство разработчика: В 2-х томах. – М.: Издательский Дом «Вильямс», 2001. Том 1. Основы. – 880 с. Том 2. Сложные вопросы программирования. –
832 с.
18.С++ Builder в задачах и примерах. – СПб.: БХВ-Петербург, 2005. –
336 с.
19.Самоучитель С++ Builder. – СПб.: БХВ-Петербург, 2004. – 320 с.
20.Гридасов А.Ю., Вдовин С.А. Автоматизация бухгалтерского учета на современном малом и среднем предприятии. – Новосибирск, НГТУ, 2002.
21.Харитонов С.А. Бухгалтерский и налоговый учет в программе «1С:Бухгалтерия 8.0». – М.: Кнорус, 2005.