Выбрать главу

Dim strGSting As String

strGSting = #July 22, 1904#

переменная будет содержать строку "22.07.1904", пока какой-нибудь другой оператор не изменит ее. А теперь можете смеяться надо мной, но я рекомендовал бы использовать кавычки просто для того, чтобы быть уверенными, что ваша переменная содержит именно то, что вы собирались в нее поместить.

Функции VBA Asс и Chr конвертируют ANSI-символы в соответствующие им числовые коды и наоборот. С помощью функции Chr в строку можно поместить символы, которые в ней нельзя напечатать (например, кавычки). Функция Asс возвращает числовой код первого символа в строке.

Строки фиксированной длины

В VBA предусмотрено объявление строк двух типов. При стандартном объявлении строк (например, с помощью оператора Dim strMessage As String) создается переменная, которая может хранить строку любой длины. Вы можете изменить размер такой переменной, просто присвоив ей строку другой длины.

Но иногда удобнее зафиксировать длину строковой переменной. Это чаще всего нужно в тех случаях, когда приходится считывать и записывать данные файлов прямого доступа, что не предполагается рассматривать в этой книге, но обсуждается на соответствующей Webстранице ("www . s el denhous e . com/vba). Пока что достаточно объяснений по поводу того, как объявлять строки фиксированной длины. Вот пример такого объявления:

Dim strFixe d As String * 5

Объявленная таким образом переменная всегда будет содержать ровно 5 символов. Если ей присвоить более короткую строку, VBA добавит после символов этой строки нужное число пробелов. Если же переменной присвоить более длинную строку, VBA сохранит в переменной только 5 первых символов, отбросив остальные: strFixed = "abc" ' теперь strFixed содержит "abc" strFixed = "Fourscore and seven years" ' а теперь "Fours"

Глава 8. Управление потоком.

В этой главе ...

~ Использование управляющих структур для управления происходящим

~ Проверка условий с помощью условных выражений

~ Принятие решений с помощью операторов If. . .Then и SelectCase

~ Повторение выполнения действий с помощью операторов For...Next, For Each.. .Next и Do ... Loop

~ Разветвления с помощью операторов Go То

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

Укрощение диких программ с помощью управляющих структур

Управляющие структуры можно разбить на три главные группы - условные операторы, циклы и операторы With.

* Условный оператор определяет, какую из ветвей программного кода выполнять, в зависимости от того, какое значение (True или False ) принимает некоторое условие. К условным операторам VBA относятся If... Then и Select Case.

* Цикл повторяет выполнение некоторого блока программного кода либо заданное число раз, либо до тех пор, пока некоторое условие не примет значение True или False. Если известно заранее, сколько раз необходимо выполнить цикл, то используйте For. . .Next, а если продолжение повторения программного кода зависит от выполнения некоторого условия, используйте Do ... Loop (этот оператор доступен в нескольких вариантах). Чтобы повторить некоторые действия по отношению к объектам в коллекции, используйте цикл For Each. . .Next, который будет обсуждаться в главе 12.

* Оператор With позволяет выполнить множество действий с одним и тем же объектом без необходимости каждый раз указывать объект (см. главу 12).

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

Анатомия управляющих структур

Что делает управляющую структуру структурой, так это то, что управляющая структура является не просто отдельным оператором, а целым блоком операторов. Моделью для всех управляющих структур служит базовый оператор If ... Then:

If a < b Then ' Если а меньше b, то

b = a ' положить значение b равным а.

a = с ' а затем положить а равным с.

End If ' Это все - продолжить выполнение программы.

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

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

Вложенные управляющие структуры

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

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

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

В следующем примере структура Do While... Loop вложена внутрь структуры

If . . . Then, а еще одна структура If ... Then вложена в Do While ... Loop:

If a < b Then ' начало внешней структуры If...Then

Do While b > с ' начало вложенного цикла Do While...Loop

b = b - 1

If с > d Then ' начало вложенной структуры If...Then

d = a

End If ' Конец внутренней структуры If...Then

Loop ' Конец цикла Do While...Loop

End If ' Конец внешней стуктуры If...Then

Используйте отступы!

Правильное использование отступов служит основой создания понятного программного кода. В примере из предыдущего раздела каждая пара операторов, определяющих одну структуру, напечатана с одним и тем же отступом. При наличии отступов проще выяснить, например, какому из операторов If. . .Then соответствует данный оператор End If. Операторы, выполняемые в рамках данной структуры, тоже имеют один и тот же отступ, поэтому сразу видно, что все они находятся под юрисдикцией одной структуры.

Курс на использование условных выражений

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

Но, с другой - когда в результате один блок программного кода выполнен, а другой - нет, вы имеете полное основание повторить за Фростом: "Это и явилось причиной всех различий".

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

If. . .Then и Select Case. Весь последующий материал этого раздела посвящен использованию условных выражений в этих структурах. Две другие структуры, For. . . Next и For Each. . . Next, условных выражений не используют.

Как работает условное выражение

Структуры If. . .Then, Select Case и Do . . .Loop принимают решение о последующих действиях на основе простого теста: какое значение принимает выражение- True (Истина) или False (Ложь)? Условием здесь может быть любое выражение VBA. (Не забывайте, что в VBA 0 эквивалентен False, а все другие значения рассматриваются как True.)