Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Инф VBA

.pdf
Скачиваний:
31
Добавлен:
29.03.2016
Размер:
1.88 Mб
Скачать

80

Операторы циклов с постусловием

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

DO

<оператор 1>

. . .

<оператор n>

LOOP WHILE <условие работы цикла>

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

DO

<оператор 1>

. . .

<оператор n>

LOOP UNTIL <условие выхода из цикла>1

7. 10 Ввод и вывод данных в VBA

Рассмотрим несколько способов ввода информации при написании программ на языке программирования Visual Basic.

1.Ввод информации с листа Excel осуществляется с помощью объектов Range

и Cells. Эти объекты входят в состав объекта Worksheet и предствляет собой ячейку или диапазон ячеек рабочего листа.

<переменная>=Worksheets( "Имя листа"). Range("Имя диапазона").Value <переменная>=Worksheets("Имя листа"). Cells (номер строки, номер столбца).Value

Если программа работает с активным листом рабочей книги, то имя листа можно не указывать.

Пример:

Переменной a присвоить значение, находящееся в ячейке "B1":

a=Worksheets("Лист1").Range("B1").Value

a=Worksheets("Лист1").Cells(1,2).Value

81

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

2. Ввод информации пользователем с помощью диалогового окна InputBox.

<переменная>=InputBox(Приглашение [, Заголовок])

Приглашнние – это любой текст, который является подсказкой пользователю, какую информацию он должен ввести в специальное поле ввода,

находящееся в этом окне. Заголовок – это надпись в заголовке окна. Если параметр не указан, то в качестве заголовка используется имя приложения.

Введенное пользователем значение присваивается переменной. Для преобразования этого значения в другой тип данных используйте функции преобразования типов: Val(), CInt(), Cvar() и другие.

Пример:

im=InputBox("Введите свое имя, пожалуйста.", "Идентификация")

3. Ввод данных в пользовательскую форму.

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

<переменная>=ИмяФормы.Объект.Свойство

Пример:

x=UserForm1.TextBox1.Value

Вывод информации можно осуществить аналогичными методами:

1. Ввод информации в лист Excel.

Worksheets( "Имя листа"). Range("Имя диапазона").Value=<данные> Worksheets("Имя листа"). Cells (номер строки, номер столбца).Value=<данные>

Пример:

В ячейку"B1" поместить текст "Значение b", а в ячейку "С1" поместить значение из переменной b:

82

Worksheets("Лист1").Range("B1").Value="Значение b"

Worksheets("Лист1").Cells(1,3).Value=b

2. Вывод информации с помощью диалогового окна MsgBox.

MsgBox Текст [, Кнопки, Заголовок]

Текст – это строка сообщения, которая должна быть заключена в двойные кавычки. Текст может содержать до 1024 символов! Для того, чтобы этот текст выдавался не сплошной длинной строкой, его можно разбить на небольшие

«порции», между которыми вставляются специальные «невидимые» символы – переноса и возврата к левому краю страницы. Если не указан аргумент Кнопки,

то VBA предполагает, что в диалоговом окне сообщения присутствует только кнопка OK.

Пример:

Вывод числа х в диалоговое окно.

MsgBox "Полученное значение х=" & CStr(x)

3. Вывод данных в пользовательскую форму.

ИмяФормы.Объект.Свойство=<данные>

Пример:

UserForm1.TextBox2.Value=23

7.11 Массивы

В Visual Basic различают два вида переменных – простые переменные и переменные структурного типа. Переменные структурного типа предназначены для идентификации нескольких данных. Частным случаем переменной структурного типа является массив.

Массив – это упорядоченный набор однотипных значений – элементов массива.

Массив имеет имя, размер и базовый тип, которые задаются при описании массива. Доступ к элементам массива осуществляется по имени

83

массива и индексу элемента, который определяет номер (место) этого элемента в массиве. Размер массива – это количество элементов в массиве.

Массивы могут быть одномерными (для обозначения элементов используется один индекс) и многомерными (элемент определяется несколькими индексами).

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

Декларация массива имеет следующий вид:

[Public | Private] Dim ИмяМассива (индексы) As Тип Данных

Dim — ключевое слово, указывающее, что объявляется переменная;

ИмяМассива — идентификатор, определяющий имя массива; Индексы — значение индекса (номера) последнего элемента в массиве, считая с нулевого;

As — ключевое слово, предваряющее указание типа элементов массива;

Тип_Данных — любой, действительный для Visual Basic тип данных — базовый, или созданный пользователем.

Примеры.

Dim A(7) Аs Integer - одномерный массив A из 8 элементов.

Dim М(4,5) As String - двумерный массив M из 5 строк и 6 столбцов.

По умолчанию значение нижней границы массива при таком объявлении равно 0. При необходимости базовый индекс можно изменить. Можно устанавливать как положительные, так и отрицательные базовые индексы

Dim A(3 То 10) Аs Integer

Dim М(-5 То -1,-6 То-1) As String

Иногда в процессе выполнения программы размер массива требуется изменить. В этом случае первоначально массив декларируют как динамический. Для этого в декларации не указывается размерность, например:

Dim МуАrrау( ) Аs String

Количество элементов в динамическом массиве и его размерность в процессе выполнения программы можно переопределить с помощью

84

ключевого слова ReDim. Синтаксическая конструкция переопределения массива имеет вид:

ReDim [Рreserve] ИмяМассива(индексы)[Аs ТипДанных]

где ReDim — ключевое слово, указывающее, что переопределяются размеры массива; Рreserve — необязательное ключевое слово, с помощью которого дается указание, чтобы все элементы переопределяемого массива сохранили свое значение; индексы — размерности массива (до 60).

Контрольные вопросы к главе 7.

1.В VBA имена констант, переменных и процедур должны удовлетворять следующим требованиям:

A.должны начинатьcя с буквы

B.могут содержать точки и символы объявления типа

C.длина имени неограниченна

D.могут быть ключевыми словами (именами операций, операторов,

встроенных функций)

2.Какой тип данных применяется для описания переменных, которые содержат текст?

A.Single

B.Boolean

C.Currency

D.String

3.В VBA для организации циклов с неизвестным заранее числом шагов используется следующий оператор цикла:

A.For ...Next

B.For ...Each.. Next

C.If ...Then... Else...EndIf

D.Do While...Loop

E.Select Case

85

4.В VBA вывод информации в окне сообщений осуществляет следующая функция:

A.MsgBox текст, кнопки, заголовок

B.Input (текст, заголовок)

C.ActiveCell.FormulaR1C9 = "(строка)"

D.Selection.Type.Text «строка»

5.Какая из перечисленных инструкций является встроенной функцией VBA?

A.function

B.sqr

C.sub

D.set

6.Какие виды массивов существуют:

A.статистические и динамические

B.статические и динамные

C.статические и динамические

D.статистические и динамные

7.В VBA функция пользователя, математически определенная как y=2cos3x,

создается с помощью следующей процедуры:

A

Public Function y(x As single)As single

 

y=2cos3x

 

End Function

 

 

B

Sub функция(x)

 

функция=2*cos(3*x)

 

End Sub

 

 

C

Public Function y(x As single)As single

 

y=2*cos(3*x)

 

End Function

 

 

D

Type y(x)

 

y=2*cos(3*x)

 

 

86

End Type

8.Даны примеры программного объявления двумерного массива. Какой из вариантов неправильный?

A.Dim A(5,9) As Integer

B.Dim A(7x5) As Single

C.Dim A(1 То 19,1 То 7) As Variant

D.Dim A(3,7) As Double

9.Какой из массивов является одномерным?

A.Dim A(1,1) As Integer

B.Dim As Single

C.Dim A(3,7,9) As Double

D.Dim A(-5 То 7) As Variant

10.Какой из программных кодов грамотно написан на языке Visual Basic?

A

Private Sub

 

Dim x = 4

 

If x < 5 Then

 

x = 2 * x

 

End If

 

MsgBox "x=" & CStr(x)

 

 

B

Private Sub CommandButton1_Click()

 

x = UserForm2.TextBox1.Value

 

If x < 5

 

x = 2x

 

Else

 

x = x + 2

 

End If

 

MsgBox "x=" & CStr(x)

 

End Sub

 

 

C

Private Sub CommandButton1_Click()

 

 

87

Dim x As Single

x = UserForm2.TextBox1.Value

If x < 5 Then x = 2 * x

Else

x = x + 2

End If

MsgBox "x=" & CStr(x)

End Sub

DPrivate Sub CommandButton1_Click()

Dim x As Single

x = UserForm2.TextBox1.Value

If x < 5 Then x = 2 * x

Else

x = x + 2

MsgBox "x=" & CStr(x)

End Sub

88

Лабораторный практикум

Лабораторная работа № 1 на тему: «Создание общей процедуры и

подпрограмм пользователя с линейным алгоритмом»

Постановка задачи.

Составить программу вычисления площади треугольника со сторонами a, b и острым углом между ними градусов

Требуется разработать:

A.общую процедуру для расчета расстояния;

B.оформить вычисление площади в виде отдельной процедуры;

C.оформить вычисление площади в виде функции;

Выполнение.

Для определения площади треугольника воспользуемся формулой:

S 12 ab sin .

Так как тригонометрические функции в VBA определены для аргументов,

выраженных в радианах, то от угла в градусах (обозначим ) перейдем к радианам (обозначим r ) по формуле: r /180. В программе будем обозначать через alfag, r – через alfarad.

Ввод и вывод данных. Для нашей задачи исходными данными являются

две стороны a b и угол alfag, которые будут храниться в ячейках рабочего листа. Результат – площадь s, которую выведем тоже в рабочий лист.

Удобно все данные, их идентификаторы и типы представить в виде

таблицы:

 

Табл.10

 

 

 

 

 

 

 

Описание переменной

Идентификатор

Тип

 

 

 

 

 

 

 

Сторона a

a

Single

 

 

 

 

 

 

 

Сторона b

b

Single

 

 

 

 

 

 

 

Угол

alfag

Single

 

 

 

 

 

 

 

Имя процедуры

Площадь1

Single

 

 

 

 

 

 

 

Имя функции

Площадь2

Single

 

 

 

 

 

89

A. Приступим к созданию общей процедуры:

1.Загрузите приложение Excel и создайте рабочую книгу с именем

«Лабораторная работа 1».

2. Введите исходные данные в рабочий лист, как показано на рисунке

 

 

 

 

 

 

 

 

Рис. 13

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

B

 

 

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

a=

 

7,8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

b=

 

16,1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

alfa град=

 

25,7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.Одним из способов запустите редактор VBA.

4.Если в проекте нет модуля, то создайте его, выполнив команду меню редактора VB: Вставка→Модуль(Insert→Module);

5.В модуль вставьте основную процедуру ОсновняПоцедура_A, выполнив команду меню редактора VB: Вставка→Процедура (Insert→ Procedure);

6.В открывшемся диалоговом окне “Вставка процедуры” установите переключатель “Подпрограмма (Sub)”, в поле имени укажите имя процедуры –

ОсновняПоцедура_A. Щелкните на OK. В окне редактирования кода появится заготовка общей процедуры вида:

Public Sub ОсновняПоцедура_A ()

End Sub

Под заголовком функции поместите код подпрограммы. Сделайте

комментарий к разработанной подпрограмме.

Dim a, b, akfag, s As Single

'объявили переменные

a=Range (“B1”).Value

'ввод исходных данных с листа

b=Range (“B2”).Value

 

alfag=Range (“B3”).Value

 

alfarad=alfarad*3.14/180

'переход от градусов к радианам