Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лекция 1 Решение практических задач с применением ЭВМ

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 9.11.2024

PAGE  22


EMBED CorelDRAW.Graphic.13  

начало

Ввод a,b

Вывод nod

Условие

a mod b<>0

od=b

b=r

a=b

r=a mod b

конец

да

нет

начало

Ввод n, d

Вывод n

простое

число

ч

Условие

n mod d<>0

d=d+1

r=n mod d

конец

да

нет

Условие

 n=d

Вывод n

непростое

число

нет

да

начало

Ввод n, d

Вывод n

простое

число

ч

Условие

n mod d<>0

d=d+1

r=n mod d

конец

да

нет

Условие

 n=d

Вывод n

непростое

число

нет

да

Лекция 1

Решение практических задач с применением ЭВМ. Основные этапы.

Основные этапы решения задач на ЭВМ:

1.Содержательная постановка задачи.

  1.  Математическая постановка задачи.
  2.  Формализация задачи (выбор метода решения).
  3.  Составление алгоритма решения задачи.
  4.  Составление программы на языке программирования.
  5.  Отладка программы на ЭВМ – выявление и исправление ошибок.
  6.  Рабочий счет (решение задачи с рабочими данными на ЭВМ) и анализ результатов (тестирование).
  7.  Составление инструкции к программе.

При постановке задачи (этап 1-3) требуется сформулировать задачу предельно четко, ясно; с учетом особенностей используемой ЭВМ и языка программирования; наметить сначала общий подход к ее решению, а затем и строгий математический метод.

Содержательная постановка задачи – формулировка задачи, излагаемая в терминах некоторой конкретной области науки. Суть этого этапа в том, что четко формулируется: Что дано? Что найти? Как найти? (Треугольник, вписанный в круг, найти, как расположен центр окружности по отношению к треугольнику).

Математическая постановка задачи – это формулировка нашей задачи как задачи некоторого раздела математики. На этом этапе также рассматриваются вопросы: Что дано? Что найти? Как найти? Однако это формулируется на языке математики.

Свойства  математической постановки задачи:

  1.  модель объекта не тождественна реальному объекту;
  2.  модель объекта не определяется однозначно реальным объектом;
  3.  для любой выбранной модели объекта необходимо доказать соответствие ее реальному объекту;
  4.  в случае приближенной модели объекта результаты решения задачи также являются приближенными.

 Формализация задачи (выбор метода решения). Этот процесс обычно выполняется за два шага:

Шаг 1. Выбор структуры данных, т.е. представление данных и результатов задачи в виде, допустимом в языке программирования (как правило, в виде совокупности переменных и массивов, файлов и т.д.).

Шаг 2. Выбор способа (порядка) решения задачи, который включал бы только те операции над элементами данных, которые допустимы в языке программирования.

2. Алгоритм. Свойства алгоритма, схема алгоритма

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

Пример.  Алгоритм заварки чая:

  1.  Подготовить исходные величины – чай, воду, чайник, стакан, ложку.
  2.  Налить в чайник воду.
  3.  Довести воду до кипения и снять с огня.
  4.  Всыпать в чайник чай.
  5.  Чай готов процесс прекратить.

Основные свойства алгоритма.

  1.  Дискретность алгоритма. Это свойство означает, что процесс решения задачи расчленен на отдельные элементарные действия (шаги).
  2.  Определенность алгоритма. Это свойство означает, что каждая команда алгоритма должна быть понятна исполнителю.
  3.  Результативность алгоритма. Свойство алгоритма, состоящее в том, что он всегда приводит к результату.  
  4.  Массовость алгоритма. Это свойство заключается в том, что каждый алгоритм, разработанный для решения некоторой задачи, должен  быть применим для решения задач этого типа при всех допустимых значениях исходных данных.

 Алгоритм — последовательность инструкций исполнителю для решения доставленной задачи (от англ, algorithm; назван в честь великого узбекского математика IX Аль Хорезми). Существуют разные способы задания алгоритмов:

 1) словесный - позволяет описать алгоритм с помощью слов и предложений.

 2) графический — когда каждое действие записывается в соответствующей  геометрической фигуре.

Графическое представление хода решения задачи – самый наглядный способ записи алгоритма. Блок-схемы наиболее распространенный способ изображения алгоритмов.

  Алгоритм, заданный словесно или графически (блок-схемой), может быть обработан с помощью ЭВМ только в том случае, если он переведен на какой-либо язык программирования. Выбор языка зависит от многих факторов — как объективнее, так и субъективных: наличия техники, программного обеспечения, наличия литературы. Программа — запись алгоритма на языке программирования.                  

 Система программирования Visual Basic относится к группе программных средств общим названием системы программирования. Система программирования обеспечивает пользователя средой для обработки программ, в Visual Basic это, называется проектированием приложений. В систему программирования Visual Basic входит текстовый редактор для написания текстов программ и конструктор форм. Программист пишет исходные тексты программ  на формализованном языке, который представляет собой последовательность команд или операторов. Разработка интерфейса программы выполняется с помощью конструктора форм. Чтобы программа выполнялась, исходные тексты переводятся на машинный язык. Это делает компилятор, который также входит в систему программирования. Не выходя из среды Visual Basic, вы можете многократно запускать свою программу на выполнение, проверяя и отлаживая  ее работу, и возвращаться обратно. Таким образом, программа может находиться либо в проектирования, либо в режиме выполнения.

 Структура программы:

Заголовок Sub(процедура).

Объявление переменных  и констант Dim (переменные и константы).

Тело программы

Вывод результатов (Msgbox).

Конец программы  Еnd Sub.

Способы записи чисел

Используются в основном 2 способа:

  1.  Запись числа с фиксированной точкой, например:

123,456; 454; 9,456.

  1.  Запись числа с плавающей точкой (нормализованная, экспоненциальная запись). Например: 2,14E+3 тоже, что и 2,14*103=2140.

Общая форма записи числа N в таком виде:

, т.е. ,

здесь  - мантисса числа N (;  - порядок числа N).

В языках программирования обычно .

Примеры:

1E+0=1; 9E-2=0,09  3,65E+2=365.

В Visual Basic используются числа с плавающей точкой обычной точности (Single) - количество чисел не более 7 и числа с плавающей точкой двойной точности - количество чисел не более 17.

Например 1/3=0,3333333 (для типа Single) и 1/3=0,333333333333333 (для типа Double).

Данные

В VBA могут использоваться следующие виды данных: 1)константы; 2)простые переменные и массивы.

Константы.VBA используются числовые и текстовые константы. Числовые константы записываются в программе в виде конкретного числа (вещественного или целого).

 Переменная — именованное место в памяти компьютера, которое имеет ИМЯ (Идентификатор) и ЗНАЧЕНИЕ. Имя переменной (Идентификатор) — последовательность букв, цифр и спецсимволов (!, #, $, @, %^ А), начинающаяся с буквы и содержащая до 40 символов.

Типы данных

Типы данных являются одним из важнейших элементов языка VBA. Подобно всем современным языкам программирования VBA поддерживает несколько типов данных, которые можно использовать для объявления типов переменных или создания массивов.

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

Типы данных   

Таблица 1

Тип данных

Значения

Размер, байт

1

2

3

Byte (байт)

От 0 до 255

1

Boolean (логический)

True или False

2

Integer (целое)

От -32768 до 32767

2

Long (длинное целое)

От -2147483648 до 2147483647

4

Single (с плавающей точкой обычной точности)

От -3,402823E38 до -1,401129E-45 для отрицательных значений;

1,401129E-45 до 3,402823E38 для положительных значений

4

Double (с плавающей точкой двойной точности)

От -1,79769313486232E308 до

-4,94065645841247E-324 для отрицательных значений;

4,94065645841247E-324 до

1,79769313486232E308 для положительных значений

8

Currency (денежный)

От -922337203685477,5808

До 922337203685477,5807

8

Decimal (масштабируемое целое)

79228162514264337593545950335

без дробной части

7,9228162514264337593545950335

с 28 знаками справа от запятой, минимальное ненулевое значение равняется

0,0000000000000000000000000001

14

Date (даты и время)

От 1 января 100 г. До 31 декабря 9999 г.

8

Object (объект)

любой указатель объекта

4

String (строка переменной длины)

От 0 до приблизительно 2 миллиардов

10+длина строки

String (строка постоянной длины)

От 1 до приблизительно 654000

длина строки

Variant (числовые подтипы)

Любое числовое значение (до границ диапазона для типа Double)

16

Variant (строковые подтипы)

Как для строки (String) переменной длины

22+длина строки

Тип данных, определяемый пользователем (с помощью ключевого слова Type)

Диапазон каждого элемента определяется его типом данных

Размер определяется пользователем

Переменные типа Byte, Boolean,Integer, Long, Currency, Decimal, Double и Date в VBA называют числовыми переменными. Числовыми переменными также являются переменные подтипов Empty (что означает отсутствие инициализации переменной), Integer, Long, Currency, Decimal, Double, Date, Error и Bate типа Variant.

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

VBA не требует обязательного объявления переменных. В случае если переменная не была объявлена, ей автоматически присваивается тип Variant. Этот тип является универсальным и может содержать данные различных подтипов: Long, Integer, String и т.д.

 

  Операторы

Операторы предназначены для выполнения различных операций над операндами. Например, оператор  «+» выполняет операцию сложения двух чисел или выражений, являющихся операндами. Большинство операторов VBA требует наличия двух операндов. Все операторы можно разделить на несколько групп:

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

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

Операторы сравнения предназначены для  выполнения операций сравнения логических выражений. Результатом их выполнения является значение типа Boolean.

Оператор присваивания «=».

Арифметические операции

Знаки операций

Возведение в степень

^

Изменение знака на обратный

-

Умножение

*

Деление

/

Целочисленное деление

\

Определение остатка от целочисленного деления

MOD

Сложение

+

Вычитание

-

Операция сравнения

Знак операции

Равно

=

Не равно

<>

Меньше

<

Больше

>

Меньше или равно

<=

Больше или равно

>=

Лекция 2

Булева операция

Оператор

Отрицание

NOT

Конъюнкция (логическое «И»)

AND

Дизъюнкция (логическое «Или»)

OR

Исключающее «Или»

XOR

Эквиваленция

EQV

Импликация

IMP

И – истина, Л – ложь.

Выражение 1

Выражение 2

NOT

AND

OR

XOR

EQV

IMP

И

И

Л

И

И

Л

И

И

И

Л

Л

Л

И

И

Л

Л

Л

И

И

Л

И

И

Л

И

Л

Л

И

Л

Л

Л

И

И

Функции

Тригонометрические функции

Функция

Оператор

Что делает

1

Arctg x

ATN(x)

Возвращает арктангенс указанного числового выражения

2

Cos

COS()

Возвращает косинус указанного угла. Угол задан в радианах.

3

Sin 

SIN()

Возвращает синус указанного угла. Угол задан в радианах.

4

Tg  

TAN()

Возвращает тангенс указанного угла. Угол задан в радианах.

Уголв радианах=Уголв градусах; где =3,141592654.

Связь между обратными тригонометрическими функциями

ArcSin x=Arctg(; ArcCos=Arctg(

Математические функции

Математическая запись

Функция

Выполняемое действие

ABS(x)

Возвращает абсолютное значение числовой переменной x

CDBL(x)

Переводит числовое выражение в значение с двойной точностью

CSNG(x)

Переводит числовое выражение в значение с обычной точностью

CINT(x)

Округляет числовое выражение до целого значения

ex

EXP(x)

Возвращает e, возведенное в степень x

Ln(x)

LOG(x)

Возвращает натуральный логарифм числового выражения

INT(x)

Возвращает наибольшее целое, меньшее или равное числовому выражению

FIX(x)

Округляет выражение с плавающей точкой до его целой части

RND(x)

Возвращает случайное число одинарной точности от 0 до 1

SQR(x)

Возвращает квадратный корень числового выражения

SQN(x)

Возвращает значения, указывающее знак числового выражения

в частности

Работа с символьной информацией

Обработка числовой информации в тексте – функции val, str$.

Символьные функции

функция

Выполняемое действие

ASC(x)

Возвращает код ASII первого символа в символьной переменной x

CHR(x)

Возвращает символ соответствующий коду ASII x

INSTR(x,y)

Возвращает позицию первого обнаружения строки x в строке y

LEFT(x,n)

Возвращает n символов, стоящих с левого края символьной переменной x 

LTRIM(x)

Удаляет начальные пробелы в символьной переменной x

MID(x,I,k)

Вырезает из символьной переменной x k символов, начиная с i-того

RIGTH(x,n)

Возвращает n символов, стоящих с правого края символьной переменной x

RTRIM(x)

Удаляет конечные пробелы в символьной переменной x

SPASE(n)

Возвращает n пробелов

STR(x)

Переводит числовое значение переменной в символьное

STRING(L,x)

Возвращает L символов, совпадающих с первым символом символьной переменной x

VAL(x)

Переводит символьное значение переменной x в числовое значение

Инструкции принятия решения (оператор условия и оператор выбора)

  

Инструкции принятия решения позволяют выполнять группы инструкций в зависимости от определенного условия. В VBA для принятия решения используются две инструкции: If …then …else и Select Case.   

Инструкция  Ifthenelse

Инструкция  If …then …else задает выполнение определенных групп инструкций в зависимости от значения выражения. Ее синтаксис приведен ниже:

Синтаксис 1.

If <выражение> Then <операторы Then > [Else <операторы Else>].

Или второй вариант синтаксиса.

If <выражение> Then 

<операторы Then >

[Else <операторы Else>]

End if.

Параметры выражение, выражение 1, выражение2 — логические УСЛОВИЯ.  Это

логические константы, переменные и выражения, принимающие значения True (истина) или False (ложь).

Параметры операторы1, операторы2, ... представляют собой один или более операторов в одной или нескольких строках. Операторы в одной строке разделяются двоеточиями.

При выполнении условного блокового оператора проверяется первое выражение и при его истинности выполняется первый блок операторов. Иначе (если выражение ложно) проверяются все логические условия, следующие за словом Elseif до тех пор. пока не будет найдено условие, принимающее значение "истина". В этом случае выполняется блок операторов, следующий за словом Then, иначе (если условие не найдено) выполняется блок операторов, следующий за словом Else. Блоки Elseif и Else необязательны. Любые блоки в операторе могут содержать вложенные блоковые операторы if. Оператор if должен быть первым в строке программы. Условный однострочный оператор отличается от блокового наличием операторов после слова Then в этой же строке. Однострочный оператор более подходит для кратких условий и простых действий, приводящих к записи строк небольшой длины. Блочный оператор if, хотя и требует больше строк для записи, но более нагляден, понятен, лучше показывает структуру ветвления. Поэтому он более предпочтителен на начальных этапах знакомства с программированием ветвлений.

Пример 1.

Найти корень квадратный b из вещественного числа a.

Программа:

Sub pr1()

Dim a As Single, b As Double

a = Val(InputBox("введите a:"))

If a >= 0 Then b = a ^ 0.5

MsgBox "a=" & a & " " & "b=" & b

End Sub

Блок- схема программы примера 1

Если ввести а равное 121, то получим b=11. Если ввести а равное -4,то в результате для b не будет ответа.

Пример 2.

Найти корень квадратный b из вещественного числа a.

Sub prвариант1()

Dim a As Single, b As Double

a = Val(InputBox("введите a:"))

If a >= 0 Then

b = a ^ 0.5

MsgBox "a=" & a & " " & "b=" & b

Else

MsgBox "действительных корней нет"

End If

End Sub

Блок- схема программы примера 2.

Sub prвариант2()

Dim a, b

a = Val(InputBox("введите a:"))

If a >= 0 Then b = a ^ 0.5: MsgBox "b=" & b Else MsgBox "действительного корня нет"

End Sub

Если ввести а равное 121, то получим b=11. Если ввести а равное -4,то в результате для будет сообщение «действительных корней нет».

Синтаксис 2(блоковый).

If <выражение 1> then

[<операторы 1>]

[elseif <выражение 2> then

        [<операторы 2>]

……

[else

     [<операторы n>]

End if

Пример 3.

Вводится число x. Если  вывести на экран значение функции, график которой приведен на рисунке. Если x<-1 или x>1, вывести на экран надпись: «Функция не определена».

Sub pr11()

Dim x, y

x = Val(InputBox("введите x:"))

If x >= -1 And x <= 0 Then

y = (1 - x ^ 2) ^ 0.5

MsgBox "x=" & x & Chr(10) & Chr(13) & _

"y=" & y

ElseIf x > 0 And x < 1 Then

y = 1 - x ^ 2

MsgBox "x=" & x & Chr(10) & Chr(13) & _

"y=" & y

Else

MsgBox "функция не определена"

End If

End Sub

Блок- схема программы примера 3.

        Инструкция Select Case 

Синтаксис

Select Case <выражение для проверки> Case <список 1>

<блок операторов 1>

Case  <список 2>

<блок операторов 2>

………..

Case Else

<блок операторов п>

End Select

Параметр выражение для проверки — любое числовое или строковое выражение, в зависимости от значения которого выполняется соответствующий блок операторов. Параметры список 1, список 2 и т. д. — это списки выражений, записанных в следующих формах:

 выражение   [, выражение. . . ], например Case  1,   3,   5,   7,   9;

Case a,   b,   с,   d

 выражение   То выражение, например: Case  5  То  13;   Case  a  To d

 Is операция отношения, например:

Case  Is<20;   Case  Is <>a В списках могут быть использованы различные формы записи, например:

Case 2, 5, 8 То 15. 18, 25 То 30, Is >50

Sub testsub1()

Dim sngналог As Single, intпараметр, sngсумма

intпараметр = Val(InputBox("введите целое число:"))

sngсумма = Val(InputBox("введите число:"))

Select Case intпараметр

Case 0

 sngналог = sngсумма * 0

Case 1

 sngналог = sngсумма * 0.05

Case 2

 sngналог = sngсумма * 0.1

Case 3

 sngналог = sngсумма * 0.15

Case 4

 sngналог = sngсумма * 0.2

Case Else

sngналог = sngсумма * 0

End Select

MsgBox "sngналог=" & sngналог

End Sub  

В этом примере осуществляется выбор ставки налога (0; 0,05; 0,10; 0,15; 0,20) в зависимости от значения выражения intпараметр. Предусмотрен также вариант

выбора, когда значения выражения intпараметр не совпадают ни с одним выражением в предложениях Case.

Инструкция Go to

Существует еще одна инструкция безусловного перехода Go to, которая в общем виде записывается так:

Go to Метка.

Метка это идентификатор с двоеточием, стоящий перед инструкцией, которая должна быть выполнена после инструкции Go to.

Пример 1 написать программу вычисления  , если введен правильный пароль.

Sub pparol()

Dim parol, x, y

finish:

parol = (InputBox("введите пароль"))

If parol <> "nataly" Then 'nataly правильный пароль

MsgBox "неверный пароль, доступ запрещен"

GoTo finish

End If

x = Int(Rnd * 10 + 1): y = x ^ 0.5

MsgBox "x=" & x & "y=" & y

End Sub

Sub pr42()

'Ввести три любых числа, сумму двух чисел поделить на  третье, сделать проверку, что в знаменателе число <>0.

Dim x, y, sum, z

x = Val(InputBox("введите x:"))

y = Val(InputBox("введите y:"))

1: z = Val(InputBox("введите z:"))

If z <> 0 Then

sum = (x + y) / z

ElseIf z = 0 Then

MsgBox "введен ноль"

GoTo 1

End If

MsgBox "sum=" & sum

End Sub

Лекция 3   

Циклы

  Циклы предназначены для многократного выполнения группы инструкций. В VBA для организаций циклов используются инструкции For…next, While…Wend, Do …Loop и For Each… Next.

Инструкция For…next

  Эта инструкция повторяет выполнение группы инструкций указанное число раз.

  Синтаксис инструкции Fornext:

For Счетчик = Начало To Конец [Step Шаг]

 [Инструкции]

 [Exit For]

 [Инструкции]

Next[Счетчик]

Синтаксис инструкции содержит Fornext элементы, представленные в табл. 1.

  Таблица  Элементы синтаксиса инструкции Fornext

Элемент 

Описание

 

Счетчик 

Обязательный элемент. Числовая переменная (за исключением типа Boolean), используемая в качестве счетчика цикла. Эта переменная не может быть элементом массива 

Начало 

Обязательный элемент — начальное значение переменной Счетчик 

Конец 

Обязательный элемент конечное значение переменной Счетчик

Шаг 

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

Инструкции 

Необязательный элемент — одна или несколько инструкций. составляющих тело цикла

  Аргумент Шаг может быть как положительным, так и отрицательным. Значение этого аргумента определяет выполнение цикла в соответствии с правилами, приведенными в табл. 2.

  Таблица 2. Выполнение цикла в зависимости от значения аргумента Шаг    

Значение           

Условие

Положительное или 0    

Отрицательное

Счетчик<= Конец

Счетчик>= Конец

  После выполнения всех инструкций цикла значение элемента Шаг добавляется к текущему значению переменной Счетчик. После этого инструкции цикла либо выполняются еще раз, либо цикл завершается (если значение счетчика сравниваетcя со значением элемента конец) и выполнение программы продолжается с инструкции, следующей за инструкцией Next.

Пример цикла ForNext

Подсчитать сумму четных чисел в диапазоне от 0 до 10 включительно.

Sub p1()

Dim i As Integer, sum As Integer

For i = 0 To 10 Step 2

sum = sum + i

Next i

MsgBox "sum=" & sum

End Sub

                   

Подсчитать произведение четных чисел в диапазоне от 2 до 10 включительно.

Sub p2()

Dim i As Integer, pr As Integer

pr = 1

For i = 2 To 10 Step 2

pr = pr * i

Next i

MsgBox "pr=" & pr

End Sub

                       

Допускается организация вложенных циклов For..Next. При этом счетчик каждого цикла должен иметь уникальное имя.

Пример вложенных циклов: создать таблицу умножения.

Sub p3()

Dim i, j As Integer

Dim a(2 To 9, 1 To 10), str_a

For i = 2 To 9

For j = 1 To 10

a(i, j) = i & "x" & j & "=" & (i * j)

str_a = str_a & " " & a(i, j) & "  "

Next j, i

MsgBox str_a

End Sub

Инструкция DoLoop 

Инструкция DoLoop имеет два варианта синтаксиса: в первом варианте условие проверяется в начале цикла, во втором условие проверяется после выполнения инструкций тела цикла.

При использовании ключевого слова While цикл будет выполняться, пока условие имеет значение True, со словом Until - пока условие не примет значение True.

Первый вариант синтаксиса инструкции DoLoop:

Do [{While | Until} Условие]

    [Инструкции]

    [Exit Do]

    [Инструкции]  

    loop

Пример. Даны два положительных целых числа найти их наибольший общий делитель (например 45 и 27 нод=9)

Sub nod()

Dim a, b, r, nod

a = Val(InputBox("введите a:"))

b = Val(InputBox("введите b:"))

Do While (a Mod b) <> 0

r = a Mod b

a = b

b = r

Loop

nod = b 'nod – наибольший общий делитель

MsgBox "a=" & a & " " & "b=" & b & Chr(10) & Chr(13) & _

"nod=" & nod

End Sub

Пример. Определение простого числа. Например 11 mod 2=1,

 11 mod 3=2, 11 mod 4=2, 11 mod 5=1, 11 mod 6=5, 11 mod 7=4,

11 mod 8=3, 11 mod 9=2, 11 mod 10=1, 11 mod 11=0, 11 простое число.

Sub prostoe()

Dim n, d, r

n = Int(Rnd * 100) + 1

d = 2

Do While n Mod d <> 0

r = n Mod d

d = d + 1

Loop

If d = n Then

MsgBox "n простое число" & " " & "n=" & n

Else

MsgBox "n – непростое число" & " " & "n=" & n

End If

End Sub

Второй вариант синтаксиса инструкций DoLoop

Do

   [Инструкции]

   [Exit Do]

  [Инструкции]

   Loop  [{While | Until} Условие]

Пример. Определение простого числа.

Sub prostoe1()

Dim n, d, r

n = Int(Rnd * 100) + 1

d = 2

Do

r = n Mod d

d = d + 1

Loop While n Mod d <> 0

If d = n Then

MsgBox "n простое число " & "n=" & n

Else

MsgBox "n не простое число" & " " & "n=" & n

End If

End Sub

                  

Таблица 3, Элементы синтаксиса инструкции Do Loop

 

Элемент

Описание

Условие

Необязательный элемент. Представляет числовое выражение или строковое выражение, которое имеет значение True или False. Если условие имеет значение Null, то оно рассматривается как значение False.

Инструкции

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

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

Лекция 4

Массивы

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

Одномерный массив можно представить как строку или столбец переменных, а двумерный – как таблицу или матрицу, в которой переменные расположены  в m строках и n столбцах.

Определение массивов. Массивы в столбцах должны быть определены в операторе Dim.

Различают статические и динамические массивы.

    Объявление статического массива

Статические массивы –  это массивы, величина которых известна в начале выполнения программы. Динамические массивы – это массивы, величина которых определяется во время выполнения программы. Но независимо от типа массива имя массива должно быть определено в начале программы. Если это статический массив, то сразу указывается его размерность.

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

Dim имя_массива(размерность_1[,размерность_2]) as (тип элементов массива

Где:

имя_массива - имя переменной, определяемое по общим правилам

           записи переменной, возможно с указанием типа

           хранимых данных;

размерность_1; - индексы массива – целые положительные числа.

размерность_2    Индекс массива определяет число элементов в

                одном измерении.

Тип элементов массива – определяет значение элементов

                       массива: «целые числа», «вещественные                    

                       числа», «символьные переменные».  

Например,

Dim a(20) as Integer

Объявляется массив из 21 элемента, индекс массива изменяется от 0 до 20.

Можно задавать многомерные массивы, например:

Dim a(20,20) as Integer

Объявляется массив размерностью 2121.

Другой формат записи оператора Dim позволяет определять индексы массива с произвольного числа.

Dim имя_переменной(нач.зн. TO кон.зн.]) As {тип элементов массива}

Где:

Нач. зн. – начальное значение индекса;

Кон. зн. – конечное значение индекса.

Например:

Dim a(3 to 10) as Integer

В этом случае задается массив из 8 элементов. Индекс элементов массива изменяется от 3 до 10.

Объявление динамического массива

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

Создание динамического массива осуществляется следующим образом.      

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

Dim a() as Integer

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

ReDim a(n) – объявляет массив из n+1 элемента, причем x нужно определить заранее, индекс элемента массива меняется от 0 до x+1;

ReDim a(20) - объявляет массив из 21 элемента, индекс элемента массива меняется от 0 до 21;

ReDim a(1 to 20) -  объявляет массив из 20 элементов, индекс элемента массива меняется от 1 до 20.

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

Sub prim3()

Dim a(), str_a, i, n

n = Val(InputBox("введите количество элементов массива n:"))

ReDim a(n)

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

ReDim a(4)

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_anew = str_anew & a(i) & " "

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

str_anew

End Sub

Если вы хотите изменить размер массива, не потеряв при этом данных, то необходимо воспользоваться ключевым словом Preserve. Например, приведенный ниже программный код увеличивает размер массива на единицу без потери хранящихся в массиве данных:

ReDim preserve a(n+1).

Sub prim33()

Dim a(), str_a, i, n

n = Val(InputBox("введите количество элементов массива n:"))

ReDim a(n)

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

ReDim Preserve a(n+1)

For i = 0 To n+1

a(n+1)=13

str_anew = str_anew & a(i) & " "

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

str_anew

End Sub

Ввод и вывод элементов массива

 

  1.  Ввод и вывод элементов статического массива.

В этом примере осуществляется ввод и вывод массива a(20), состоящего из 21 элемента.

Sub prim1()

Dim a(20), str_a,i

For i = 0 To 20

a(i) = Int(Rnd * 100) + 1 ‘ввод элементов массива

str_a = str_a & a(i) & " " ‘преобразование числовых переменных в       

                           ‘строковые и сцепление их один за

Next i                      ‘другим

MsgBox str_a                ‘ вывод элементов массива

End Sub

В этом примере осуществляется ввод и вывод массива a(3 to 10), состоящего из 8 элементов.

Sub prim2()

Dim a(3 To 10), str_a,i

For i = 3 To 10

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

MsgBox str_a

End Sub

  1.  Ввод и вывод элементов динамического массива.

В этом примере осуществляется ввод и вывод массива a().

Количество элементов массива n+1.

Sub prim3()

Dim a(), str_a, i, n

n = Val(InputBox("введите количество элементов массива n:")) ‘вводится количество элементов

ReDim a(n) ‘указывается количество элементов массива

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

MsgBox str_a

End Sub

В этом примере осуществляется ввод и вывод массива a(20).

Количество элементов массива 21.

Sub prim4()

Dim a(), str_a, i

ReDim a(20)

For i = 0 To 20

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

MsgBox str_a

End Sub

В этом примере осуществляется ввод и вывод массива a(1 to 20).

Количество элементов массива 20.

Sub prim5()

Dim a(), str_a, i

ReDim a(1 To 20)

For i = 1 To 20

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

MsgBox str_a

End Sub

Лекция 5

Способы обработки массивов

  1.  Нахождение суммы, произведения, среднего арифметического, среднего геометрического элементов массива.

1.1 Нахождение суммы элементов массива.

Sub prim6()

Dim a(), str_a, i, sum

n = Val(InputBox("введите количество элементов массива  n:"))

ReDim a(n)

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

sum = sum + a(i)

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sum=" & sum

End Sub

Нахождение суммы четных и нечетных элементов массива.

Sub prim7()

Dim a(4), str_a, i, sumchet, sumnechet

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) Mod 2 = 0 Then sumchet = sumchet + a(i)

If a(i) Mod 2 <> 0 Then sumnechet = sumnechet + a(i)

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sumchet=" & sumchet & "sumnechet=" & sumnechet

End Sub

Нахождение суммы элементов массива, значения которых находятся в интервале от 50 до 100.

Sub prim8()

Dim a(4), str_a, i, sum

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) >= 50 And a(i) <= 100 Then sum = sum + a(i)

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sum=" & sum

End Sub

1.4 Нахождение суммы элементов массива с четными индексами и суммы элементов массива с нечетными индексами.

 Sub prim9()

Dim a(4), str_a, i, sum1, sum2

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If i Mod 2 = 0 Then sum1 = sum1 + a(i)

If i Mod 2 <> 0 Then sum2 = sum2 + a(i)

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sum1=" & sum1 & "sum2=" & sum2

End Sub

Нахождение суммы индексов четных элементов и произведения индексов нечетных элементов массива. Начальное значение произведения надо задавать равным 1.

Sub prim11()

Dim a(1 To 4), str_a, i, sum, pr

pr = 1

For i = 1 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) Mod 2 = 0 Then sum = sum + i

If a(i) Mod 2 <> 0 Then pr = pr * i

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sum=" & sum & "pr=" & pr

End Sub

2.Нахождение произведения и среднего геометрического элементов массива.

Нахождение среднего арифметического и среднего геометрического элементов массива.

Sub prim12()

Dim a(4), str_a, i, sum, pr

pr = 1

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

sum = sum + a(i)

pr = pr * a(i)

Next i

sa = sum / 5: sg = pr * (1 / 5)

MsgBox str_a & Chr(10) & Chr(13) & _

"sa=" & sa & "sg=" & sg

End Sub

Задан массив а(4), найти индексы тех элементов, значения которых превосходят цифру 50.

Sub prim13()

Dim a(4), str_a, i, str_b, b(4)

pr = 1

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) > 50 Then

b(i) = i

str_b = str_b & b(i) & " "

End If

Next i

MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _

"массив индексов:" & str_b

End Sub

3 Обработка элементов массива.

3.1 Задан массив а(4), значения элементов которого заданы генератором случайных чисел, заменить единицами, те элементы, значения которых превосходят 50.

  

Sub prim14()

Dim a(4), str_a, i, str_anew

pr = 1

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) > 50 Then a(i) = 1

str_anew = str_anew & a(i) & " "

Next i

MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _

"новый массив:" & str_anew

End Sub

3.2 Нахождение максимального и минимального элементов массива и обмен их местами.

Sub prim15()

Dim a(4), str_a, i, str_anew, max, min, imax, imin

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

max = a(0): imax = 0: min = a(0): imin = 0

For i = 1 To 4

If a(i) > max Then max = a(i): imax = i

If a(i) < min Then min = a(i): imin = i

Next i

a(imax) = min: a(imin) = max

For i = 0 To 4

str_anew = str_anew & a(i) & " "

Next i

MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _

"max=" & max & "imax=" & imax & Chr(10) & Chr(13) & _

"min=" & min & "imin=" & imin & Chr(10) & Chr(13) & _

"новый массив:" & str_anew

End Sub

3.2 Подсчет количества элементов массива, например больших 50.

 Sub prim17()

Dim a(4), str_a, i, str_anew, k

k = 0

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) > 50 Then k = k + 1

str_anew = str_anew & a(i) & " "

Next i

MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _

"k=" & k

End Sub

3.3 Обработка двух массивов.

Заданы два массива a(4) и b(4) заполнить их случайными значениями и поменять местами четвертые элементы массивов.

Sub prim16()

Dim a(4), b(4), str_a, str_b, i, str_anew, str_bnew, buf

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

b(i) = Int(Rnd * 10) + 1

str_b = str_b & b(i) & " "

Next i

buf = a(4)

a(4) = b(4)

b(4) = buf

For i = 0 To 4

str_anew = str_anew & a(i) & " "

str_bnew = str_bnew & b(i) & " "

Next i

MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _

 "исходный массив b:" & str_b & Chr(10) & Chr(13) & _

 "новый массив a:" & str_anew & imin & Chr(10) & Chr(13) & _

"новый массив b:" & str_bnew

End Sub

3.3 Обработка элементов массива в блоках разветвления и циклов.

Структура программы:

  1.  Заголовок.
  2.  Описание переменных.
  3.  Ввод элементов массива (или массивов).
  4.  Условие.
  5.  Инструкции, если Условие выполняется.
  6.  Инструкции, если Условие не выполняется.
  7.  Вывод результата.

Пример: Заданы два массива a(4) и b(4), если количество отрицательных элементов массива a(4) больше количества отрицательных массива b(4), то положительные элементы массива a(4) заменить на 1, а положительные элементы массива b(4) заменить на нули, иначе посчитать сумму элементов массива a(4) и произведение элементов массива  b(4).   

 

Sub prim18()

Dim a(4), b(4), str_a, str_b, i, str_anew, str_bnew, k, t, sum, pr

k = 0: t = 0: pr = 1

For i = 0 To 4

a(i) = Int(Rnd * 100) - 50

str_a = str_a & a(i) & " "

b(i) = Int(Rnd * 10) - 5

str_b = str_b & b(i) & " "

If a(i) < 0 Then k = k + 1

If b(i) < 0 Then t = t + 1

Next i

If k > t Then

For i = 0 To 4

If a(i) > 0 Then a(i) = 1

If b(i) > 0 Then b(i) = 0

str_anew = str_anew & a(i) & " "

str_bnew = str_bnew & b(i) & " "

Next i

MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _

 "исходный массив b:" & str_b & Chr(10) & Chr(13) & _

 "новый массив a:" & str_anew & imin & Chr(10) & Chr(13) & _

"новый массив b:" & str_bnew & imin & Chr(10) & Chr(13) & _

"k=" & k & "t=" & t

Else

For i = 0 To 4

sum = sum + a(i): pr = pr * b(i)

Next i

MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _

 "исходный массив b:" & str_b & Chr(10) & Chr(13) & _

 "sum=" & sum & "pr=" & pr & Chr(10) & Chr(13) & _

"k=" & k & "t=" & t

End If

End Sub

Лекция 6

3.4 Просмотр диапазона ячеек рабочего листа с помощью объекта Sheets (рабочие листы) и метода Range для доступа к ячейкам.

Sub pr61()

'Написать программу для заполнения ячеек в любом диапазоне

'вычислить общую сумму введенных чисел

Dim i, n, x, sum, str_x As String

n = Val(InputBox("введите n:"))

i = 1: sum = 0

For i = 1 To n

x = Int(Rnd * 100) + 1

str_x = str_x & x & " "

sum = sum + x

Sheets("лист1").Cells(i, 3).Value = x

Sheets("лист1").Cells(5, 4) = sum

Next i

End Sub

Создание массива и заполнение его элементами ячеек рабочего листа.

Sub pr()

Dim i As Integer,mass(), str_mass 'переменная для элементов массива

ReDim mass(10)

For i = 1 To 10

Sheets("лист1").Cells(1, i).Value = Int(100 * Rnd + 1)

mass(i) = Sheets("лист1").Cells(1, i).Value

str_mass = str_mass & mass(i) & " " 'накопление элементов массива для                                                              ‘вывода заполненных значений

Next i

MsgBox str_mass

End Sub

3.5 Заполнение элементов массива значениями рабочего листа и нахождение суммы.

Sub ss1()

Dim sum

For Each c In Sheets("Лист1").Range("a1:a10")

   sum = sum + c

Next c

MsgBox "Цикл закончен!" & "sum=" & sum

End Sub

(1,i) – первая цифра строка, вторая столбец.

Формат записи оператора определения функции:

FUNCTION имя [(параметры)] [STATIC]

 [блок_операторов]

 имя=выражение

 [блок_операторов]

END FUNCTION

Где:

 

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

Параметры - одна или несколько переменных, указывающих параметры, которые передаются в функцию при ее вызове:

перемен[()] [AS тип] [, перем[()] [AS тип]].

Переменная - имя переменной VBA.

Тип - тип данных переменной (INTEGER, LONG, SINGLE, DOUBLE, STRUNG или тип данных, определенный пользователем).

STATIC - Указывает, что значения локальных переменных функции сохраняются между вызовами функции.

Выражение - Возвращаемое значение функции

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

'Вычисление факториала рекурсия

Sub pфакториала()

Dim n, f

n = Val(InputBox("введите n:"))

f = fuc(n)

MsgBox "f=" & f

End Sub

Function fuc(t)

If t > 1 Then fuc = t * fuc(t - 1) Else fuc = 1

End Function

Процедуры-функции и процедуры

 Кроме процедур обработки событий, определяющих событийный принцип работы Windows-приложений, важное место в языке Visual Basic 6.0 занимает общие процедуры. Под процедурами понимается часть программы, peaреализующая вспомогательный алгоритм и допускающая многократное  обращение к ней из различных частей программы.

 Процедуры помогают значительно упростить коды программ, в которых имеются повторяющиеся действия, возможно, с отличающимися параметрами. Это процедуры-функции Function. . .End Function,  позволяющие возвращать определяемые в них значения функций, и процедуры Sub end sub, способные изменять значения  нескольких переменных.  Кроме Function и sub имеются процедуры Property, используемые для и чтения значений свойств.

 Различают процедуры общего назначения на уровне проекта и закрытые процедуры. Процедуры на уровне проекта записываются в отдельных модулях, создаваемых командой главного меню Проект | Добавить модуль. Они доступны для всех процедур всех модулей проекта. Закрытые процедуры записываются в коде модуля (например, модуля формы) и доступны только для процедур своей формы. Процедуры на уровне проекта и закрытые процедуры по области действия можно сравнить с глобальными контейнерными переменными.

Процедуры Sub…End Sub

Синтаксис процедуры Sub.. .End Sub такой:

[Private I Public]    [Static]   Sub имя   [(список)]

[операторы]

[Exit Sub]

[операторы]

End Sub

Слова Private, Public и static играют ту же роль, что и в процедуре-функции Параметр имя — глобальное имя процедуры, ограниченное длиной в 40 символов. Параметр список — список разделенных запятыми имен переменных передаваемых процедуре при ее вызове. В операторе предусмотрен альтернативный выход с помощью оператора Exit sub. В отличие от процедуры-функции Function имя процедуры sub не может быть использовано в выражениях. Процедуры могут быть рекурсивными, т. е. могут вызывать сами себя.

Вызов процедуры sub.. .End sub допускается двумя способами: с оператором  Call и без него. Оператор call передает управление процедуре. Вызов имеет два вида синтаксиса.

Синтаксис 1:

Call имя процедуры [(список аргументов)]

Синтаксис 2:

имя процедуры [(список аргументов)]

Пример использования двумерного массива для создания таблицы умножения.

Sub p3()

Dim i, j As Integer

Dim a(1 To 10, 1 To 10), str_a

For i = 2 To 9

For j = 1 To 10

a(i, j) = i & "x" & j & "=" & (i * j)

str_a = str_a & " " & a(i, j) & "  "

Next j, i

MsgBox str_a

End Sub

Пример обработки символьных переменных.

Sub p()

Dim AnyString, MyStr

AnyString = "13.05.2006"    ' Define string.

MyStr = Right(AnyString, 4)    ' Returns "Hello World".

MsgBox MyStr

End Sub

Таблица умножения

Sub p3()

Dim i, j As Integer

Dim a(1 To 10, 1 To 10), str_a

For i = 2 To 9

For j = 1 To 10

a(i, j) = i & "x" & j & "=" & (i * j)

str_a = str_a & " " & a(i, j) & "  "

Next j, i

MsgBox str_a

End Sub

Процедуры и функции VBA. Параметры формальные и фактические. Локальные и глобальные переменные.
Модуль VBA — это лист с текстом программы, вставленный в рабочую книгу.
Модуль включает в свой состав функции и процедуры. Важное отличие функции от процедуры заключается в том, что функция возвращает результат вычисления. При этом в теле функции необходимо предусмотреть оператор, который присваивает результат вычисления ячейке памяти, имя которой совладает с именем функции.
При вызове процедуры или функции передают в них некоторые переменные путем замены формальных параметров на фактические. (Фактические параметры берутся при вызове ф-ции. Формальные параметры берутся из задач.) Внутри процедуры этим переменным может быть присвоено какое-нибудь новое значение, которое сохранится в переменной и после возврата из процедуры.
Если объявить переменные внутри процедуры, то оперировать этими переменными можно только внутри процедуры. Такие переменные называются локальными, т.е. область видимости локальных переменных - это код процедуры.
Если объявить переменные в начале программного модуля, то эти переменные будут видимы во всех процедурах модуля. Такие переменные называются глобальными, и в указанном случае область видимости глобальных переменных - это весь модуль.
Подпрограммы. В языке VBA подпрограммы делятся на два вида: подпрограммы-функции и подпрограммы—процедуры, которые подразделяются на две группы: встроенные и определяемые пользователем.
Функции Многократно повторяющуюся часть программы можно оформить подпрограммой - функцией. Функция состоит из описания и ее вызова.
Описание функции.
Общий вид функции пользователя:
Function Имя_Функции(список формальных параметров) As Тип описания функции
Раздел операторов
End Function
Имя функции - это любой идентификатор, определяемый пользователем.
Тело функции представляет собой раздел операторов, где должен находиться хотя бы один оператор, который присваивает имени функции одно значение.
Список формальных операторов с их типом описания заключается в круглые скобки и отделяется друг от друга запятыми.
Если тип описания формальных операторов не указывать (по умолчанию будет тип Variant).
Вызов функции. Общий вид вызова функции:
переменная = Имя Функции (фактические параметры)
Фактические параметры указываются через запятую круглых скобках.
Фактические параметры должны быть объявлены как формальные и количество фактических параметров должно быть равно количеству формальных.
Между формальными и фактическими параметрами должно быть полное соответствие, т.е. формальных и фактических параметров должно быть одинаковое количество; порядок следования фактических и формальных параметров должен быть один и тот же; тип каждого фактического параметра должен совпадать с типом соответствующего ему формального параметра
Фактические параметры бывают параметры - значения и параметры - переменные.
Подпрограммы — процедуры. Кроме функций пользователя, на листе модуля можно записывать процедуры. Процедура, как и функция, состоит из двух частей: описания и вызова функции.
Описание процедуры. Синтаксическая структура описания имеет следующий вид:
Sub Имя_Процедуры (список формальных параметров)
Тело процедуры
End Sub
Sub — ключевое слово (процедура)
End Sub - ключевое слово (конец процедуры)
Процедура начинается с заголовка процедуры Sub
Имя процедуры — это любой идентификатор, который выбирает сам пользователь.
Тело процедуры - это раздел операторов, которые размещаются между заголовком и концом процедуры.
Описание процедуры должно быть правильно синтаксически оформлено. Работать процедура начинает при ее вызове главной программы.
Вызов процедуры.
Имя_Процедуры_Список фактических параметров
Список фактических параметров от имени_Процедуры записывается через пробел, и отделяются друг от друга запятой, в круглые скобки не заключаются. В отличие от функций пользователя, процедуры нельзя вызывать из ячеек рабочего листа.
Функция передаёт в главную программу при её вызове только одно значение, а процедура может передавать одно или несколько значений при её вызове.
Sub процедурысортировка1()

Dim a(6) As Integer, i As Byte, str_a As String, str_b As String, buf As Integer, str_anew As String’ фактические  параметры

Call vvod(a, str_a, 6) 'обращение к процедуре ввода массива

Call sortirovka(a, 6, 6) 'обращение к процедуре сортировки массива

Call vivod(a, str_anew, 6)

MsgBox str_a & Chr(10) & Chr(13) & _

str_anew

End Sub

Sub vvod(x, str_x, n) 'процедура ввода элементов массива,  список формальных параметров

For i = 0 To n

x(i) = Int(Rnd * 10) + 1

str_x = str_x & x(i) & " "

Next i

End Sub

Sub sortirovka(x, n, m) 'процедура сортировки элементов массива, список формальных      параметров

For i = 0 To n - 1

 For j = 0 To m - 1

 If x(j) > x(j + 1) Then

 buf = x(j) 'обмен j и j+1 элементов.

 x(j) = x(j + 1)

 x(j + 1) = buf

 End If

 Next j, i

End Sub

Sub vivod(x, str_xnew, n) 'процедура вывода элементов массива,  список формальных параметров

For i = 0 To n

str_xnew = str_xnew & x(i) & " "

Next i

End Sub

Option Explicit
Dim x As Integer, y As Integer, p As Integer
Function F(x As Integer) As Single
F = 4*x / (3-2*2)
End Function
Sub My_pr()
Cells(1,1) = “
ТАБЛИЦА
Cells(2,1) = “x”
Cells(2,1) = ”y”
p = 3
For x = 0 To 12
If 3 – 2*x = 0 Then GoTo M
y = F(x)
Cells(p, 1) = x
Cells(p, 2) = y
p = p + 1
M: Next x
End Sub

Классификация

Статическая и динамическая типизация переменных

Если тип переменной определяется на этапе компиляции, имеет место статическая типизация, а если на этапе выполнения программы — динамическая. В последнем случае иногда говорят, что переменная не имеет типа, хотя данные, содержащиеся в ней, безусловно, относятся к определённому типу данных, но выясняется это уже во время выполнения программы.

В большинстве случаев статическая типизация позволяет уменьшить затраты ресурсов при выполнении программы, поскольку для динамической типизации требуются затраты ресурсов на выяснение типов данных их приведение в выражениях с смешанными типами. Статическая типизация позволяет перекладывать проверку типов на этапе компиляции программы. Это также упрощает обнаружение ошибок ещё на этапе разработки, когда их исправление обходится менее дорого. Тем не менее во многих случаях необходимо применение динамической типизации. Например, необходимость поддержания совместимости при переходе на новый формат представления данных (например, старая часть проекта посылает процедуре дату символьной строкой, а новые объекты используют более современный числовой тип).

Статические и динамические переменные

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

Динамическая адресация нужна только тогда, когда количество поступающих на хранение данных заранее точно не известно. Такие данные размещают в специальных динамических структурах, тип которой выбирается в соответствии со спецификой задачи и с возможностями выбранной системы программирования. Это может быть стек, куча, очередь и т. п. Даже файл, в том смысле, который заложил Н.Вирт в Паскаль, является динамической структурой.

Локальные и глобальные переменные. Области видимости

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

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

Простые и сложные переменные

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

Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом».

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

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

Объектная модель MS Excel

Объектная модель MS Excel по общим принципам идентична объектной модели MS Word. Эта модель также имеет иерархическую структуру, в корне которой находится объект Application (Excel.Application), через который обеспечивается доступ к любой коллекции или внутреннему объекту приложения MS Excel или к компонентам открытых рабочих книг. Обшая структура объектной модели MS Excel представлена на рис. 1.4.

Рис. 1.4. Объектная модель MS Excel

Как уже сказано, вершиной объектной модели MS Excel является объект Application, непосредственно включающий такие объекты и коллекции, как Selection — текущий выделенный объект, WorkBooks — коллекция открытых рабочих книг, коллекции различных элементов управления, диалоговых окон и другие свойства приложения MS Excel. Объект Selection имеет свойства текущего выделенного объекта, поэтому нет смысла рассматривать здесь структуру модели этого объекта. Если выделена ячейка, то Selection = Ячейка, если диаграмма, то Selection = Диаграмма. Когда выделена область ячеек, Selection = Коллекции столбцов и строк. Коллекция рабочих книг представляет собой список открытых рабочих книг, доступ к которым осуществляется по индексу. Каждый элемент такой коллекции представляет собой объект "рабочая книга". Панели управления, меню, кнопки, диалоги и другие объекты, предназначенные для управления приложением, собраны в соответствующие коллекции элементов управления.

Основным элементом объекта "рабочая книга" является коллекция рабочих листов. Элементом коллекции является отдельный рабочий лист, который может представлять собой обычный лист (в виде таблицы) или быть в виде диаграммы. В последнем случае он ничего, кроме диаграммы, содержать не может. Рассмотрим вариант листа в виде таблицы (рис. 1.5).

Рис. 1.5. Объектная модель листа рабочей книги

Основной объект рабочего листа, с которым приходится работать, — ячейка. Ячейка как объект сама обладает множеством свойств и объектов, входящих в нее. Из них наиболее важными и часто используемыми являются: текст, шрифт, стиль текста, границы, заливка. Чтобы получить доступ к ним, необходимо получить доступ к самой ячейке, а затем изменять ее свойства. Ячейки объединены в области ячеек Range. Свойства области ячеек во многом совпадают со свойствами самой ячейки, но есть и отличия, состоящие в задании координат и размеров области. Ячейки объединены в строки и столбцы. Объединения строк и столбцов представляют собой коллекции, доступ к которым производится по числовому индексу или по буквенному обозначению столбца. На рабочем листе могуг располагаться внешние объекты: рисунки, фрагменты документов Word, звуки, видеозаписи и другие объекты, которые объединены в коллекцию внешних OLE-объектов. Прорисовка или, точнее, воспроизведение этих объектов полностью выполняется внешними программами, зарегистрированными в системе как OLE-серверы. Доступ к таким объектам производится через элементы коллекции OLEObjects, а доступ к их свойствам возможен только через эти OLE-серверы. Приложение Excel обладает большим набором собственных графических объектов, которые можно разместить на рабочем листе. Мы можем использовать рисунки, надписи, геометрические фигуры, диаграммы, которые обычно объединены в коллекции. Например, коллекция ChartObjects содержит набор диаграмм, которые располагаются на рабочем или на отдельном листе. Каждая диаграмма, в свою очередь, также содержит набор объектов и коллекций. Рассмотрение свойств, состава и содержания диаграмм — отдельная тема этой книги (см. главу 14).

Рис. 1.6. Объектные модели диалогов Найти в Excel (а) и Найти и заменить в Word (6)

Чтобы убедиться в гибкости, универсальности и больших возможностях для программирования объектов MS Office, рассмотрим еще одну коллекцию объектов, присутствующую как в Word, так и в Excel. Это коллекция диалогов (диалоговых окон), которые пользователь обычно открывает нажатием той или иной кнопки или выбором команды меню. Она принадлежит объекту Application. В объектной модели все диалоги представлены в виде элементов коллекции Dialogs, доступ к которым обеспечивается через числовой индекс. Посредством параметров метода Show элемента коллекции происходят передача параметров в диалог и его выполнение — такова модель диалогов для приложений Excel (рис. 1.6, а), для приложений Word модель диалога несколько отличается. Отличие заключается в том, что в диалог Word параметры передаются через свойства объекта-элемента коллекции (рис. 1.6, б).

У объекта Item() наряду с типичными свойствами и методами есть присущие только ему свойства и методы. Например, у диалога Найти и заменить есть свойство Find, определяющее текст для поиска — до запуска диалога.

В Excel объект коллекции Dialogs несколько отличается от диалогов Word. Здесь рассмотрим только объектную модель коллекции диалогов для Excel в целом (рис. 1.7).

Рис. 1.7. Объектная модель коллекции диалогов Excel

На этом рисунке представлена только малая часть всевозможных диалогов коллекции — показаны диалоги, наиболее часто используемые программистами и пользователями. Обычно в диалог передаются значения, которые устанавливают значения элементов управления, а возвращаются значения True или False, в зависимости от результата действия пользователя.

Можно подвести итог: приложения из состава MS Office, например Word и Excel, представляют собой взаимосвязанные объекты и коллекции объектов. Каждый объект или коллекция включает в себя множество параметров и других объектов, коллекций. В свою очередь, сами объекты и коллекции имеют хозяина (Parent), в состав которого они входят. На вершине объектной модели находятся объекты Word.Application для текстового процессора Word и Excel.Application — для табличного прцессора Excel. Через эти объекты, в основном, и осуществляется связь этих приложений с внешними программами. Как все это работает, вы узнаете из следующих глав книги.

Об объектах и коллекциях

Если вы полностью изучили первую часть этой главы, то должны иметь представление о VBA и знать основные методы управления модулями VBA в редакторе Visual Basic . Кроме того, вы ознакомились с примерами кода VBA , а в предыдущих разделах уже встречались с такими элементами, как объекты и свойства. В этом разделе приводится дополнительная информация об объектах и коллекциях объектов.

Работая с кодом VBA , вы должны четко понимать назначение объектов и объектной модели Excel . Целесообразнее рассматривать объекты с точки зрения иерархической структуры.

На вершине объектной модели находятся объект Application — в данном случае. Excel . Но если вы программируете в VBA , запуская VBE в Microsoft Word , то объектом Application будет выступать Word .

Иерархия объектов

Объект Application (то есть Excel ) содержит другие объекты. Ниже приведено несколько примеров объектов, которые находятся в объекте Application :

Workbooks (коллекция всех объектов Workbook —рабочих книг);

Windows (коллекция всех объектов Window — окон);

Addlns (коллекция всех объектов Addln — надстроек).

Некоторые объекты могут содержать другие объекты. Например, коллекция Workbooks состоит из всех открытых объектов Workbook , а объект Workbook включает другие объекты, некоторые из которых представлены ниже:

Worksheets (коллекция объектов Worksheet — рабочих листов);

Charts (коллекция объектов Chart —диаграмм);

Names (коллекция объектов Name — имен).

Каждый из этих объектов, в свою очередь, может содержать другие объекты. Коллекция Worksheets состоит из всех объектов Worksheet рабочей книги Workbook . Объект Worksheet включает другие объекты, среди которых следующие:

ChartObjects (коллекция объектов. ChartQb ject — элементов диаграмм);

Range — диапазон;

PageSetup — параметры страницы;

PivotTables (коллекция объектов PivotTable — сводных таблиц).

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

О коллекциях

Одной из ключевых концепций в программировании на языке VBA являются коллекции. Коллекция — это группа объектов одного класса (и сама коллекция тоже является объектом). Как указывалось выше, Workbooks — это коллекция всех открытых, в данный момент объектов Workbook . Worksheets — коллекция всех объектов Worksheet , которые содержится в конкретном объекте Workbook . Вы можете одновременно управлять целой коллекцией объектов или отдельным объектом этой коллекции. Чтобы сослаться на один объект из коллекции, введите название или номер объекта в скобках после названия коллекции: Worksheets ("Лист1")

Если лист Лист1 — это первый рабочий лист в коллекции, то можно использовать следующую ссылку.

Worksheets (1)

На второй лист в рабочей книге Workbook ссылаются как на Worksheets (2) и т.д.

Кроме того, существует коллекция с названием Sheets , состоящая из всех листов рабочей книги, рабочих листов и листов диаграмм. Если Лист1 — первый лист в книге, то на него можно сослаться так:

Sheets (1)

Ссылки на объекты

Если вы ссылаетесь на объект в VBA , для обращения к нему вводятся названия всех расположенных выше в иерархической структуре объектов, разделенных точкой. Что делать, если в Excel открыты две рабочих книги, и в обеих имеется рабочий лист с названием Лист1? В этом случае в ссылке упоминается контейнер требуемого объекта: Workbooks ("Книга1"). Worksheets ("Лиет1"}

Без указания рабочей книги редактор Visual Basic искал бы лист Лист1 в активной рабочей книге.

Чтобы сослаться на определенный диапазон (например, ячейку А1) на рабочем листе с названием Лист1 в рабочей книге Книга1, можно использовать следующее выражение:

Workbooks(" Книга 1").Worksheets(" Лист 1").Range("Al")

Полная ссылка из предыдущего примера включает объект Application и выглядит таким образом:

Application.Workbooks(" Книга 1").Worksheets(" Лист 1").Range(“Al”)

Однако в большинстве случаев можно опускать объект Application в ссылках (кроме него использоваться больше нечему). Если объект Книга1 — это активная рабочая книга, то опустите ссылку на нее и запишите рассматриваемое выражение следующим образом:

Worksheets ("Лист1"). Range (" Al ")

Если Лист1 является активным рабочим листом, можно еще более упростить выражение:

Range (" Al ")

Работа с объектами Range

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

Объект Range содержится в объекте Worksheet и состоит из одной ячейки или диапазона ячеек на отдельном рабочем листе. В следующих разделах будут рассмотрены три способа задания ссылки на объекты Range в программе VB А.

¦ Свойство Range объекта класса Worksheet или Range .

¦ Свойство Cells объекта Worksheet .

¦ Свойство Offset объекта Range .

Свойство Range

Свойство Range возвращает объект Range . Из справочных сведений по свойству Range вы узнаете, что к данному свойству обращаются с помощью нескольких вариантов синтаксиса:

объект. Range ( ячейка1) ;

объект. Range ( ячейка1, ячейка2).

Свойство Range относится к одному из двух типов объектов: объекту Worksheet или объекту Range . В данном случае ячейка! и ячемка2 указывают параметры, которые Excel будет воспринимать как идентифицирующие диапазон (в первом случае) или очерчивающие диапазон (во втором случае). Ниже следует несколько примеров использования метода Range .

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

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

Свойство Range также поддерживает имена , определенные в рабочих книгах. Поэтому если ячейка называется Ввод, то для введения значения в эту ячейку может использоваться оператор

Worksheets( " Лист 1”). Range(" Ввод ").Value = 1

В следующем примере в диапазон из 20-ти ячеек на активном листе вводится одинаковое значение. Если активный лист не является рабочим листом, то отображается сообщение об ошибке:

ActiveSheet.Range("Al:B10").Value = 2

Приведенный ниже пример приведет к тому же результату, что и предыдущий.

Range (" Al ", " B 10") = 2

Отличие заключается лишь в том, что опущена ссылка на лист, поэтому предполагается активный рабочий лист. Кроме того, пропущено свойство, поэтому используется свойство по умолчанию (для объекта Range это свойство Value ). В этом примере используется второй синтаксис ссылки на свойство Range . В данном случае первый аргумент — это левая верхняя ячейка диапазона, а второй аргумент— это ячейка в правом нижнем углу диапазона.

В следующем примере для получения пересечения двух диапазонов применяется оператор пересечения Excel (пробел). Пересечением является одна ячейка— Сб. Следовательно, данный оператор вводит значение 3 в ячейку С б:

Range ("С1:С10” “А6:Е6") = 3

Наконец, в следующем примере значение 4 вводится в пять ячеек, т.е. в независимые диапазоны. Запятая выполняет роль оператора объединения:

Range (" A 1, A 3,А5,А7,А9") = 4

До настоящего момента во всех рассмотренных примерах использовалось свойство Range объекта Worksheet . Вы также можете использовать свойство Range объекта Range . Сначала будет непросто, однако постарайтесь разобраться.

Ниже показан пример использования свойства Range объекта Range (в данном случае объектом Range является активная ячейка). В этом примере объект Range рассматривается как левая верхняя ячейка на рабочем листе, а затем в ячейку, которая в таком случае была бы В2, вводится значение 5. Другими словами, полученная ссылка является относительной для верхнего левого угла объекта Range . Следовательно, следующий оператор вводит значение 5 в ячейку, расположенную справа внизу от активной ячейки:

ActiveCell . Range ("В2”) = 5

Существует также намного более понятный способ обратиться к ячейке по отношению к диапазону— это свойство Offset (см. далее в этой главе).

Свойство Cells

Другим способом сослаться на диапазон является использование свойства Cells . Как и Range , вы можете использовать свойство Cells в объектах Worksheet и Range . Справочная система указывает на три варианта синтаксиса свойства Cells :

объект. Cells ( номер_строки, номер_столбца) ;

объект. Cells ( номер_строки) ;

объект . Cells .

Проиллюстрируем на примерах особенности применения свойства Cells . Вначале в ячейку А1 листа Лист1 введите значение 9. В данном случае используется первый синтаксис, где аргументами являются номер строки (от 1 до 65536) и номер столбца (от 1 до 256):

Worksheets ("Лист1"). Cells (1, 1)= 9

Ниже приведен пример, в котором значение 7 вводится в ячейку D 3 (т.е. пересечение строки 3, столбца 4) активного рабочего листа:

ActiveSheet . Cells (3, 4) = 7

Вы можете также использовать свойство Cells объекта Range . При этом объект Range , который возвращается свойством Cells , задается относительно левой верхней ячейки диапазона Range , на который мы ссылаемся. Сложно? Может быть. Приведем пример. Следующая инструкция вводит значение 5 в активную ячейку. Помните, что в данном случае активная ячейка рассматривается как ячейка А1 на рабочем листе:

ActiveCell . Cells (1, 1) = 5

Настоящее преимущество представленного типа ссылок на ячейки станет очевидным, когда речь пойдет о переменных и циклах (см. главу 8). В большинстве случаев в аргументах не будет использоваться фактическое значение. Вместо

него используется переменная.

Чтобы ввести значение 5 в ячейку, которая находится под активной, можно обратитесь к такой инструкции:

ActiveCell . Cells (2, 1) = 5

Предыдущий пример можно описать так: необходимо начать с активной ячейки, рассматривая ее как ячейку А1. Затем обратиться к ячейке во второй строке и первом столбце.

Иной синтаксис метода Cells использует один аргумент, который задается в диапазоне от 1 до 16777216. Второе число равно количеству ячеек на рабочем листе (65536 строк умножить на 256 столбцов). Ячейки нумеруются, начиная с А1 вправо, затем вниз и вправо вдоль следующей строки. 256-я ячейка — это IV 1. а 257-я — А2.

Далее в ячейку НЭ активного листа (520-ю ячейку на рабочем листе) введем значение 2: ActiveSheet . Cells (520) = 2

Чтобы отобразить значение в последней ячейке на рабочем листе ( IV 65536), используйте оператор

MsgBox ActiveSheet . Cells (16777216)

Этот синтаксис можно использовать и с объектом Range . В таком случае будет получена ячейка по отношению к указанному объекту Range . Например, если объект Range — это диапазон A 1-. D 10 (40 ячеек), то свойство Cells может иметь аргумент от I до 40 и возвращать одну из ячеек объекта Range . В следующем примере значение 2000 вводится в ячейку А2, так как А2 является пятой ячейкой (считая сверху направо, затем вниз) в указанном диапазоне: Range (" Al : D 10"). Cells {5) =2000

В предыдущем примере аргумент свойства Cells не ограничен значениями между 1 и 40. Если аргумент превышает количество ячеек в диапазоне, счет продолжается, будто диапазон больше, чем он есть на самом деле. Следовательно, оператор, подобный предыдущему, может изменить значение ячейки, которая находится за пределами указанного диапазона Al – D 10 .

Третий синтаксис свойства Cells возвращает все ячейки на указанном рабочем листе. В отличие от двух других, в этом синтаксисе, получаемые в результате данные — не одна ячейка, а целый диапазон. В приведенном ниже примере использован метод ClearContents по отношению к диапазону, полученному с помощью свойства Cells для активного рабочего листа. В результате будет удалено содержимое каждой ячейки на рабочем листе:

ActiveSheet . Cells . ClearContents

Лабораторная работа № 5_7. Разработка пользовательских форм в VBA
вернуться на главную страницу можно, воспользовавшись ссылкой.

Чтобы создать новую пользовательскую форму в VBA необходимо находясь в среде VBA выполнить команду Insert(Вcтавить)/UserForm(Форма) и затем в появившемся окне формы необходимо установить его размеры, название (свойство Caption) и необходимые параметры. Из панели элементов управления выбрать необходимые элементы и разместить их на форме. Исходные данные задаются посредством элементов управления поле (TextBox), поле со списком (ComboBox), список (ListBox), счетчик (SpinButton), полоса прокрутки (ScrollBar).

Выходные данные отображаются на форму посредством элементов управления поле, поле со списком, список. Соответствующие надписи на форме осуществляются посредством элемента управления надпись (Label). Для выбора действий используются элементы управления флажок (CheckBox), переключатель (OptionButton), выключатель (ToggleButton). Выполнение и завершение макросов осуществляется посредством элемента управления кнопка (CommandButton). Для вставки рисунков используется элемент управления рисунок (Image), для работы с вкладками и страницами используются элементы управления набор вкладок (TabStrip) и набор страниц (Page)

Задания

На VBA составить пользовательские формы для решения следующих задач:

1. из трех заданных чисел A, B, C найти число, ближайшее по значению к заданному числу М. Исходные данные и результат размещаются в элементах управления поле пользовательской формы. Все поля должны иметь соответствующие надписи.

2. вычислить приближенное значение arctg(x) в заданной точке х по формуле

с заданной точностью е;

Исходные число Х и результат У разместить в элементах управления поле пользовательской формы, сделав соответствующие надписи полей. Точность е выбирать из списка элемента управления поле со списком.

3. найти НОД или НОК двух натуральных чисел m и n. Исходные числа и результат разместить в элементах управление поле пользовательской формы. Для выбора операции НОД или НОК использовать элемент управления переключатель;

4. найти среднее арифметическое и/или среднее геометрическое положительных чисел заданного массива. Исходный массив чисел разместить в диапазоне В1:С10 на листе 1 Excel. Для выбора действия использовать элемент управления флажок. Результат разместить в элементах управления поле пользовательской формы.

5. найти коэффициенты первой производной многочлена Pn(x). Коэффициенты исходного многочлена Pn(x) выбирать из выделенного диапазона листа 1 Excel, коэффициенты полученного многочлена разместить в строке листа 1, начиная с ячейки Е1.

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

Указания по выполнению Лабораторной работы № 5_7. Разработка пользовательских форм в VBA
вернуться на главную страницу можно, воспользовавшись ссылкой.

Для создания новой пользовательской формы необходимо, находясь в среде VBA выполнить команду Insert(Вcтавить)/UserForm(Форма) и затем в появившемся окне формы установить его размеры, название (свойство Caption) и необходимые параметры.

Одновременно со вставкой формы откроется панель элементов управления (Toolbox) - открыть ее можно также, воспользовавшись меню View/Toolbox. Элементы управления из панели (всего их 16) необходимо разместить на форме. Сама панель выглядит так:

Создание диалогового окна. После выбора необходимых элементов управления для ввода и вывода данных а также кнопок в пользовательской форме будет создано диалоговое окно. Как правило, одна из кнопок будет выбрана в качестве "ОК", то есть с ее нажатием пользователем будет начато выполнение программы - ввод исходных данных, их обработка, и вывод результатов. Для изменения принятой по умолчанию подписи кнопки CommandButton1 на необходимую "ОК" можно переопределить свойство Caption в диалоговом окне Свойства (Properties), которое открывается при нажатии на кнопку. Однако проще будет изменить подпись непосредственно в самой конпке, одним кликом мыши выделив ее, а вторым - открыв соответствующее поле для редактирования. В окне Свойства (Properties) можно также изменить подпись (переопределить свойство Caption) непосредственной всей формы с принятого по умолчанию значения UserForm1 на необходимое.

После размещения в форме элементов управления необходимо написать процедуру обработки события нажатия кнопки ОК. Для этого ее необходимо дважды кликнуть мышью. Активизируется модуль UserForml, в котором будут введены "операторные скобки" Процедуры обработки: Private Sub CommandButtonl Click () ... End Sub.

Обратите внимание, что

  для ввода данных, как правило, используются элементы управления поле (TextBox), поле со списком (ComboBox), список (ListBox), счетчик (SpinButton), полоса прокрутки (ScrollBar).

  Для отображения на форму выходных данных применяются элементы управления поле, поле со списком, список.

  Надписи на форме осуществляются посредством элемента управления надпись (Label).

  Для выбора действий используются элементы управления флажок (CheckBox), переключатель (OptionButton), выключатель (ToggleButton).

  Выполнение и завершение макросов осуществляется посредством элемента управления кнопка (CommandButton).

  Для вставки рисунков используется элемент управления рисунок (Image).

  Для работы с вкладками и страницами используются элементы управления набор вкладок (TabStrip) и набор страниц (MultiPage)

Указания по выполнению заданий:

#

Способ ввода/вывода данных

Пример

2.

Поле (TextBox)

x=Val(TextBox1.value) 'воод данных из поля
TextBox1.value =Str(y)
'вывод данных в поле

Для того, чтобы сделать соответствующую подпись поля, необходимо перенести на форму элемент управления Надпись (
Label) и изменить его свойство Caption в диалоговом окне Свойства (Properties) или изменить подпись непосредственно в самой Надписи.

2.

Поле со списком (ComboBox)

Для ввода данных в список необходимо до "основной" подпрограммы (то есть той, которая "обрабатывает" нажатие на кнопку "ОК") ввести еще одну - вводящую данные в поле со списком. Ниже представлены два варианта - в одном из них данные берутся из ячеек l6, l7 и l8 листа "5.7", а во втором - вычисляются программно.

Private Sub UserForm_Activate()
Worksheets.Item("5.7").Activate
Dim e As Range
Set e = Range("l6:l8")
Dim a As Variant
For Each a In e
ComboBox1.AddItem (a)
Next a
End Sub

Или
Private Sub UserForm_Initialize()
ComboBox1.Clear
For i = 1 To 3
ComboBox1.AddItem (10 ^ (-i))
Next i
End Sub


e=Val(ComboBox1.value)
'ввод данных из поля со списком

3.

Переключатель (OptionButton)

If OptionButton1.Value=True Then...
указание. при объединениии двух переключателей в рамку (Frame) сначала разместите на форме рамку.

4.

Флажок (CheckBox)

If CheckBox1.Value = True Then...

4.

Исходный массив чисел разместить в диапазоне (Range) В1:С10 на листе 1

Set A = Worksheets("Лист1").Range("B1:C10")

5.

Коэффициенты исходного многочлена выбирать из выделенного диапазона (поле для ввода диапазона - RefEdit)

Set A = Range(RefEdit1.Text)
Или
A = Range(RefEdit1.Value)

6.

Cчетчик (SpinButton)

Private Sub SpinButton1_Change()
TextBox2.Value = SpinButton1.Value
End Sub

6.

Cписок (ListBox)

ListBox1.AddItem (i)

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ПРИЛОЖЕНИЙ

Для создания пользовательских диалогов, при решении тех или иных прикладных задач, служат пользовательские формы User Form. На пользовательской форме, в зависимости от решаемой задачи, размещают элементы управления. Элементы управления – это объекты, со своими свойствами, методами и событиями.

Объект (object) ) совокупность данных(свойств) и процедур работы с ними (методов).

Свойство представляет собой атрибут объекта, определяющий его характеристики (размер, цвет и др.) и состояние объекта (видимость и др.).

Объект.Свойство = Значение свойства

Пример. Изменить заголовок окна Word посредством задания свойства Caption.

Application.Caption = "Лабораторная 3"

Метод представляет собой действие, выполняемое над объектом.

Объект.Метод

Пример. Закрыть приложение (объект Application) MS Word.

Application.Quit

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

Элементы управления форм

Надпись (Label)

Используется для создания заголовков, к элементам управления, не имеющих свойства Caption, таких как ListBox, TextBox.

К основным свойствам данного элемента управления относят:

Caption – текст надписи

WordWrap - устанавливается многострочный режим ввода текста в поле, если выбрано значение True и однострочный режим, если выбрано значение False

Visibleустанавливает видимость надписи во время выполнения программы (True - выводится, False – не выводится)

AutoSize - возможность автоматического изменения размера, в зависимости от объема введенного текста (True - да, False – нет)

Font – установка параметров шрифта текста надписи

Heigth – установка высоты надписи

Width – установка ширины надписи

Поле (TextBox)

Используется для ввода текста или для вывода результатов расчетов программы.

К основным свойствам данного элемента управления относят:

Maxlength – максимальная длина текста, вводимого в поле

Multiline - устанавливается многострочный режим ввода текста в поле, если выбрано значение True и однострочный режим, если выбрано значение False

Text – текст, заданный по умолчанию

Enable – возможность внесения изменений в содержимое поля, во время выполнения программы (True - можно, False – нельзя)

Кнопка (CommandButton)

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

К основным свойствам данного элемента управления относят:

Caption – текст на кнопке

Enable – возможность нажатия кнопки, во время выполнения программы (True - можно, False – нельзя)

Pictureустановка на кнопке картинки

WordWrap - устанавливается многострочный режим ввода текста на кнопке, если выбрано значение True и однострочный режим, если выбрано значение False

Visibleустанавливает видимость кнопки во время выполнения программы (True - выводится, False – не выводится)

Примечания:

свойство name для всех элементов управления, устанавливает имя объекта в программе

свойство TabIndex для всех элементов управления, устанавливает очередность выбора объекта на форме при нажатии на кнопку Tab

свойство TabStop в основном для всех элементов управления, устанавливает возможность выбора объекта на форме при нажатии на кнопку Tab

Список (ListBox)

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

К основным свойствам данного элемента управления относят:

Enabled – возможность выбора значения из списка во время работы программы (True - нельзя, False – можно)

Text – выбранный в списке элемент

RowSourceдиапазон, содержащий элементы списка

MultiSelect - способ выбора элементов списка: fmMultiSelectSingle(выбор только одного элемента);

fmMultiSelectMulti(выбор нескольких элементов посредством щелчка или клавиши Пробел)

ColumnCountколичество столбцов

ColumnHeadsзаголовки столбцов

ListIndex – возвращает номер выбранного элемента списка

List – возвращает элемент списка

К основным методам данного элемента управления относят:

Additem (item, index) – добавление элемента item в список, под номером index

Removeitem(index) – удаляет элемент списка с номером index. Нумерация элементов списка начинается с 0.

Clear – удаляет все элементы списка

Поле со списком (ComboBox)

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

Во многом свойства данного элемента управления схожи, с вышеописанным (ListBox), однако есть и специфические, которые мы и рассмотрим:

DropButtonStyle - устанавливает вид раскрывающегося списка

ListRows – число элементов в раскрывающемся списке

К основным методам данного элемента управления относят:

Additem (item, index) – добавление элемента item в список, под номером index

Removeitem(index) – удаляет элемент списка с номером index. Нумерация элементов списка начинается с 0.

Clear – удаляет все элементы списка

Способы заполнения списков значениями

Поэлементно. Список состоит из одной колонки

Массивом. Список состоит из одной колонки

Прочитать предварительно введенные значения из ячеек рабочего листа

Поэлементно. Список состоит из нескольких колонок

Массивом. Список состоит из нескольких колонок

События элементов управления

Рассмотрим общие события элементов управления:

Click – щелчок мыши;

Change – происходит при изменении значения элемента управления

Создание пользовательской формы

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

запустить редактор VBE, выбрав команду Сервис – Макрос – Редактор Visual Basic (Alt + F11)

выбрав команду создания формы Insert – Form

поместить на форму требуемые элементы управления. Панель элементов вызывается командой View - ToolBox 

настроить, при необходимости свойства элементов управления и свойства формы

описать процедуры обработки событий для решения конкретной задачи

запустить программу на выполнение F5

Примечание: прервать выполнение программы можно комбинацией Ctrl + Break

Свойства формы

StartUpPosition – расположение формы (1 – по центру, 2 – по центру экрана, 3 – в верхнем левом углу экрана)

Методы формы

Showпоказать форму

Hide – закрыть форму

Пример Создать пользовательский диалог в Excel для решения задачи нахождения площади треугольника, заданного сторонами a, b, c.

Порядок выполнения задания:

Запустить редактор VBE (Alt + F11)

Создайте форму. Для этого: выполнить команду InsertUserForm

Добавьте на форму, указанные на рисунке элементы управления:

Нажмите на кнопку  Вычислить дважды, и запишите код, указанный ниже:

Запустить процесс вычислений. Нажмите на кнопку

Заполнить текстовые поля исходных данных любыми значениями

Нажмите кнопку Вычислить для получения результата

Повторите при необходимости вычисления для разных исходных данных.

Закройте форму.

Пример Создать пользовательский диалог в Excel, для заполнения массива D размера N случайными числами, и сохранения его в список. Создать новый массив B из отрицательных элементов массива D. Вычислить сумму, произведение и количество элементов массива кратных числу d. Найти минимальный четный элемент массива.

Порядок выполнения задания:

Запустить редактор VBE (Alt + F11), если он не активен

Создайте форму. Для этого: выполнить команду InsertUserForm

Добавьте на форму, указанные на рисунке элементы управления (два списка listbox; четыре текстовых поля textbox; кнопку и необходимое количество надписей)

Нажмите на кнопку  Вычислить дважды, и запишите код, указанный ниже:

Процесс решения задачи разбит на отдельные процедуры, которые вызываются из основной процедуры при помощи команды Call. Для создания новых процедур используется команда InsertProcedure.

Запустить процесс вычислений. Нажмите на кнопку

Решите задачу. Нажмите на кнопку Вычислить.

Выполните несколько тестов.

Закройте форму.

Порядок выполнения работы

Загрузите MS Excel 

Решите задачу разными способами: найти площадь треугольника, заданного сторонами a, b, c

Способ 1 (ввод/вывод данных, методом чтения с/на ячейки рабочего листа):
нажмите для перехода к описанию выполнения задания 

Способ 2 (ввод/вывод данных при помощи функций Inputbox и Msgbox):

нажмите для перехода к описанию выполнения задания

Способ 3 (для решения задачи создадим пользовательскую функцию):

нажмите для перехода к описанию выполнения задания

Способ 4 (для решения задачи создадим пользовательский интерфейс):

нажмите для перехода к описанию выполнения задания

Решите задачу по обработке массивов: создать пользовательский диалог в Excel, для заполнения массива D размера N случайными числами, и сохранения его в список. Создать новый массив B из отрицательных элементов массива D. Вычислить сумму, произведение и количество элементов массива кратных числу d. Найти минимальный четный элемент массива.

нажмите для перехода к описанию выполнения задания

Индивидуальные задания

1. Вычислить значение функции в заданных точках (составить пользовательскую функцию на VBA)

 

Вариант

Задание

1

2

3

4

5

6

7

8

9

10

11

12

2. Создать пользовательский диалог для решения задачи

1

Ввести маcсив из N элементов. Найти максимальный элемент массива и сумму положительных элементов.

2

Ввести маcсив из N элементов. Найти минимальный элемент массива и сумму отрицательных  элементов.

3

Ввести маcсив из N элементов. Найти максимальный отрицательный элемент массива и количество положительных  элементов.

4

Ввести маcсив из N элементов. Найти минимальный положительный элемент массива и количество неотрицательных элементов.

5

Ввести маcсив из N элементов. Найти максимальный элемент массива и произведение элементов, значение которых больше числа b.

6

Ввести маcсив из N элементов. Найти минимальный нечетный элемент массива и произведение положительных элементов.

7

Ввести маcсив из N элементов. Найти максимальный элемент и количество элементов меньших 5.

8

Ввести маcсив из N элементов. Найти минимальный неотрицательный элемент массива и произведение ненулевых элементов.

9

Ввести маcсив из N элементов.  Найти минимальный элемент массива и количество элементов равных 7.

10

Ввести маcсив из N элементов. Найти максимальный четный элемент массива и сумму элементов равных числу b.

11

Ввести маcсив из N элементов. Найти максимальный положительный элемент массива и произведение отрицательных элементов.

12

Ввести маcсив из N элементов. Найти максимальный элемент массива и количество элементов меньших 5.




1. венец жизни христианской I В праздник Введения во храм Пресвятой
2. . Географічне розташування.
3. Тема 27 Культура как система ценностей образов действий индивидов План-
4. Магии Арбателя авторства и даже объема этой книги остается загадкой
5.  У пацієнта спостерігаються точкові крововиливи на слизовій ротової порожнини та шкіри
6. Роль налогов в современном государстве Сущность налогообложения находится на стыке финансовоэкономичес
7. на тему- Заключна частина промови прокурора Заключна частина обвинувальної промови прокурор
8. Чудесный нож Филип Пулман Чудесный нож Темные начала ~ 2 Сканирование и распознаван
9. Цинссера сыпной спорадический тиф спорадический отдалённый эндогенный рецидив сыпного тифа в отсутствие
10. Создайте класс Комплексное Число. В классе должны присутствовать функции ...
11. Дипломная работа- Прогнозирование банкротства и разработка рекомендаций в области антикризисного управления на предприятии
12. тема общественных отношений обеспечивающих безопасные условия жизни общественный порядок безопасность ли
13. Формирование учебной мотивации младших школьников с нарушениями интеллекта
14. Тема- ПСИХОЛОГИЧЕСКИЕ ТЕОРИИ ДЕЯТЕЛЬНОСТИ Одесса2008г
15. Тема- теории поведения личности в организации Содержание Введение Глава 1
16. малина хаза чиновникишлюхи ВЛАДИВОСТОК- МАЛИНА ХАЗА ШЛЮХИ
17. Современное население мира составляет более 65 млрд
18. социология впервые был введён в научный оборот О
19. Тема 4. Кейнсіанська модель макроекономічної рівноваги План заняття 1
20. ва Финансовая политика госва явлся частью общей соцэк политики госва по обеспечению сбалансированного