Управляющая инструкция Do-Loop 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Управляющая инструкция Do-Loop



Она похожа на инструкцию While- Wend, однако дополнительно обладает двумя важными особенностями.

Во-первых, условие завершения цикла Do- Loop можно задавать не только в его начале, но и в конце. Условие в конце цикла гарантирует, что он будет выполнен хотя бы один раз.

Во-вторых, условие можно сделать критерием как выполнения цикла Do- Loop, так и его завершения. Последняя возможность в цикле While- Wend также доступна — чтобы цикл выполнялся, пока не соблюдено некоторое условие, его надо указать в инструкции While с логическим оператором Not.

Рассмотрим несколько простых примеров. В программе WhileWend инструкция While- Wend применялась для определения момента, когда в последовательности случайных чисел появлялась семерка. В DoWhileLoop та же операция осуществляется циклом Do- Loop.

Sub DoWhileLoop()

Dim LotteryEntry As Integer

LotteryEntry = 0

Do While LotteryEntry <> 7

LotteryEntry = Int(10 * Rnd())

Beep

Loop

MsgBox "Выпал номер " & LotteryEntry & ". Вы выиграли!!"

End Sub

Как видите, эта программа мало отличается от программы WhileWend: во-первых, перед ключевым словом While появилось слово Do, во-вторых, в конце цикла вместо Wend стоит Loop. Однако цикл Do - Loop позволяет переписать эту процедуру еще несколькими способами. В следующем примере слово While заменено словом Until, а вместо оператора неравенства в сравнении LotteryEntry и 7 задан оператор равенства.

Sub DoUntilLoop()

Dim LotteryEntry и

LotteryEntry = 0

Do Until LotteryEntry = 7

LotteryEntry = Int(10 * Rnd())

Beep

Loop

MsgBox "Выпал номер " & LotteryEntry & ". Вы выиграли!"

End Sub

Цикл Do- Loop позволяет внести в эту процедуру еще несколько изменений. Например, в программе DoLoopUntil ключевое слово Do оставлено в начале цикла, а условие завершения и ключевое слово Until переместились в его конец, за ключевое слово Loop. В таком варианте цикл обязательно выполняется хотя бы один раз, поскольку условие завершения не проверяется, пока не будут выполнены все инструкции из тела цикла. Поэтому мы можем удалить инструкцию для инициализации переменной LotteryEntry.

Sub DoLoopUntil()

Dim LotteryEntry As Integer

DO

LotteryEntry = Int(10 * Rnd())

Beep

Loop Until LotteryEntry =7

MsgBox "Выпал номер " & LotteryEntry & ". Вы выиграли!"

End Sub

А теперь заменим ключевое слово Until в конце цикла словом While. Тогда мы сможем вернуть в условие знак неравенства вместо знака равенства:

Sub DoLoopWhile()

Dim LotteryEntry As Integer

Do

LotteryEntry = Int(10 * Rnd())

Beep

Loop While LotteryEntry <> 7

MsgBox "Выпал номер " & LotteryEntry & ". Вы выиграли!"

End Sub

Инструкция With

Инструкция With позволяет существенно сократить обращение к объекту и обладает тремя основными достоинствами: уменьшает объем кода, делает его понятнее и производительнее.

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

Sub БезИспользованияWith()

ActiveWorkbook.Worksheets(2).Range("A1").Font.Bold = True

ActiveWorkbook.Worksheets(2).Range("A1").Font.Italic = True

ActiveWorkbook.Worksheets(2).Range("A1").Font. Size = 22

ActiveWorkbook.Worksheets(2).Range("A1").Font. Name = _

"Times New Roman"

ActiveWorkbook.Worksheets(2).Range("A1").Font.Colorlndex = 3

Worksheets(2).Select

End Sub

Здесь для изменения свойств объекта Font ячейки A1 второго рабочего листа пришлось ввести 5 команд, состоящих более чем из 360 символов. В этих командах мы 21 раз обращались к объектам и свойствам (рассчитывается по числу точек в инструкциях), а на каждое обращение уходит определенное время. Перепишем ту же программу, используя инструкцию With.

Sub With_Инструкция()

With ActiveWorkbook.Worksheets(2).Range("A1").Font

.Bold = True

.Italic = True

.Size =22

.Name = "Times New Roman"

.Colorlndex = 3

End With

Worksheets(2).Select

End Sub

Программа With_Инструкция содержит 202 символа (56% от объема БезИспользованияWith) и 9 обращений к объектам и свойствам (43%). Можно утверждать, что инструкция With в два раза уменьшает время, необходимое на ввод программы, и в два раза ускоряет ее выполнение. Сравнение этих примеров, конечно, не совсем корректно. В действительности число обращений к объектам в программе БезИспользованияWith можно сократить и без инструкции With. Тем не менее, ее преимущества видны здесь ясно. Естественно, далеко не всегда использование этой инструкции приводит к таким заметным изменениям, и все-таки Ваши программы только выиграют, если Вы запомните следующее правило.

Замечание:

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

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

Sub Пример_с_With()

With ActiveWorkbook.Worksheets(3)

.Select

.Unprotect

With. Range("A1")

MsgBox.Value

.Value = 200

.RowHeight =60

.ColumnWidth = 20   

.Font.Size = 20

.Interior.ColorIndex = 3

End With

End With

End Sub

В процедуре Пример_с_With инструкция With использована дважды — одна внутри другой. Сначала программа вызывает методы Select и Unprotect для третьего рабочего листа и выводит в информационном окне содержимое ячейки A1. Затем свойствам Value, RowHeight и ColumnWidth этой ячейки присваиваются новые значения с одновременным изменением размера шрифта и цвета фона.

Встроенные функции VBA

Наряду с рассмотренными функциями в VBA имеется большой набор функций, которые можно отнести к следующим категориям:

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

§ функции проверки типов;

§ функции преобразования форматов;

§ функции обработки строк;

§ функции времени и даты;

§ финансовые функции

Рассмотри некоторые функции из этих категорий:

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

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

Функция Возвращаемое значение
Abs(Число) Абсолютная величина (модуль) числа
Sin(Число) Синус числа
Cos(Число) Косинус числа
Rnd(Число) Случайное число из интервала [0,1).
Sqr(Число) Квадратный корень из числа
Fix(Число), Округляет положительное число до меньшего и отрицательное — до большего
Int(Число) Округляет положительные и отрицательные числа до меньшего.

Функции проверки типов

Отвечают на вопрос, является ли переменная переменной определенного типа. В VBA имеются следующие функции проверки типов:

Функция Описание
IsArray(VarName) Возвращает True, если аргумент является массивом
IsDate(VarName) Возвращает True, если аргумент является датой
IsEmpty(VarName) Возвращает True, если переменной-аргументу не присвоено никакое значение
IsError(VarName) Возвращает True, если аргумент содержит код ошибки
IsNul(VarName) l Возвращает True, если аргумент содержит значение Null
IsNumeric(VarName) Возвращает True, если аргумент является числом
IsObject(VarName) Возвращает True, если аргумент является объектом

10.3. Функции преобразования форматов

Служат для преобразования одних типов данных в другие:

Функция Описание
CInt(expression) Переводит число в целочисленный формат: Dim MyDouble, MyInt MyDouble = 2345.5678 ' MyDouble - тип Double MyInt = CInt(MyDouble) ' MyInt возвращает 2346
CStr (expression) Переводит число в строковый формат: Dim MyDouble, MyString MyDouble = 459.001 ' MyDouble - тип Double. MyString = CStr (MyDouble) ' MyString возвращает "459,001" – если в Windows установлен стандарт, подразумевающий десятичную запятую или 459.001 – если стандарт подразумевает десятичную точку.
Str(Number) Переводит число в строковый формат. Dim MyString MyString = Str(459) ' возвращает " 459". MyString = Str(-459.65) ' возвращает "-459.65" MyString = Str(459.001) ' возвращает " 459.001" Замечание: 1) функция Str в качестве десятичного разделителя «узнает» только точку. Если могут быть использованы другие разделители (например, в приложениях других стран), то для конвертации данных используйте функцию CStr. 2) обратите внимание: если знак не указан, то в возвращаемой строке  перед первой цифрой стоит пробел.
Val(String) Возвращает число, содержащееся в строке. В качестве допустимого десятичного разделителя функция Val допускает только точку. Dim MyValue MyValue = Val("2345") ' возвращает 2345 MyValue = Val(" 2 34 5") ' возвращает 2345 MyValue = Val("23 and 45") ' возвращает 23

Функции обработки строк

Функция Описание
LCase(String) Преобразует все буквы строки в строчные.
UCase(String) Преобразует все буквы строки в заглавные.
Left «Откусывает» подстроку слева на заданное количество символов. Синтаксис: Left(String,Length)   q String – исходная строка q Length – число символов MyString = Left(“Марья Ивановна”,5) ' возвращает "Марья"
Right «Откусывает» подстроку справа на заданное количество символов. Синтаксис: Right(String,Length)   q String – исходная строка q Length – число символов MyString = Right(“Марья Ивановна”,8) ' возвращает "Ивановна"
Mid «Откусывает» подстроку из середины строки на заданное количество символов. Синтаксис: Mid(String, Start[,Length])   q String – исходная строка q Start – позиция символа в строке, с которого начинается нужна подстрока q Length – число символов MyString = Mid(“Марья Ивановна”, 7, 4) ' возвращает "Иван"
Len (String) Возвращает длину строки. MyStringLen = Len(“Марья Ивановна”) ' возвращает 14
LTrim (String) Удаляет пробелы слева. MyString = LTrim (“ Марья Ивановна ”) ' возвращает “Марья Ивановна ”
RTrim (String) Удаляет пробелы справа. MyString = RTrim (“ Марья Ивановна ”) ' возвращает “ Марья Ивановна”
Trim (String) Удаляет пробелы и слева, и справа. MyString = Trim (“ Марья Ивановна ”) ' возвращает “Марья Ивановна”
InStr Возвращает позицию первого вхождения одной строки внутри другой. Синтаксис: InStr([ start, ] string1, string2 [, compare ]) q start – числовое выражение, задающее позицию, с которой начинается поиск. Если этот параметр опущен, то поиск начинается с первой позиции; q string1 – строка, в которой выполняется поиск; q string2 – искомая подстрока; q compare – задает способ сравнения строк. Допустимые значения: 0 – для двоичного сравнения, 1 – для посимвольного значения без учета регистра. MyStringVal = InStr(“Марья Ивановна”, “Ивановна”)   ' возвращает 7

Функции времени и даты

Функция Возвращаемое значение
Date() Возвращает значение типа Variant, содержащее текущую системную дату MyDate = Date()' возвращает 12.09.2007, если сегодня 12 сентября 2007 года
Day, Month, Year Возвращает значение типа Variant (Integer), содержащее целое число, которое представляет день, месяц, число в значении даты MyDay = Day(Date)' возвращает 12, если сегодня 12 число MyMonth = Month(Date)' возвращает 9, если сегодня сентябрь MyYear = Year(Date)' возвращает 2007, если сегодня 2007-й год

Обработка ошибок

Когда Вы пишите программу, очень важно чтобы она анализировала ошибки, возникающие по вине пользователя и информировала его об этом. Это можно сделать двумя способами:

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

2-й способ – обрабатывающий ошибки. В случае появления ошибки программа перехватывает её и создает программный отклик.

Как правило, в программировании сочетаются оба способа.



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 38; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.151.141 (0.028 с.)