- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
For A = 1 To 5
sngC = Rnd()
For B = 1 To 5
Debug.Print sngC * Rnd()
Next
Next A
Если вы достаточно наблюдательны, то без труда сможете проследить за шагами, которые делает VBA в процессе выполнения этого программного кода.
1. Предварительная подготовка.
Программный код начинается с объявления переменной и инициализации генератора случайных чисел VBA.
2. Начало внешнего цикла For. . .Next.
VBA вызывает функцию Rnd, чтобы присвоить переменной sngC случайное значение.
3. Начало внутреннего цикла For. . .Next.
Этот цикл вычисляет пять других чисел, повторяя вызов функции Rnd при каждом проходе цикла. Результат отображается в окне Immediate.
4. Завершение внутреннего цикла после выполнения им всех пяти вычислений.
Теперь снова продолжится выполнение внешнего цикла. Подчиняясь оператору Next
A, VBA возвращается в начало внешнего цикла.
5. Пп. 2 и 3 повторяются еще для четырех проходов внешнего цикла.
Этот пример, вероятно, тривиален, но его можно заставить выполнять очень полезную работу, если немного подправить. Допустим, вам нужно создать мультимедиа-программу, случайным образом выбирающую пять компакт-дисков и проигрывающую по пять случайным образом выбранных фрагментов с каждого из дисков. В предположении, что вы знаете, как программировать выбор компакт-дисков и воспроизведение записей, предыдущий пример будет как раз подходящей заготовкой.
Использовать вложенные циклы For. . .Next очень удобно при обработке многомерных массивов, если организовать циклы так, чтобы каждый из них соответствовал одному измерению массива.
Немедленный выход с помощью Exit For
Оператор Exit For предназначен для немедленного прекращения выполнения цикла до того, как программа доберется до его конца. Обычно этот оператор используется в условном выражении (If . . . Then или Select Case), вложенном в главный цикл For . . .Next.
Удобно использовать Exit For, когда проверяются массивы, есть ли в них недопустимые значения, когда неправильные данные приводят к прекращению выполнения процесса.
Скажем, вы узнали о том, что какой-то злой гений ввел неправильную информацию в ваш прайс-лист и при этом оставлял свой "фирменный" знак. Поэтому при внесении изменений в цены из-за инфляции вам придется проверить для каждого из массивов, не испорчены ли в нем данные. Вот пример программного кода, который делает всю эту работу:
For р = 1 То varДлинаМассива
If varЦена(р) - "Здесь был Ваня!" Then
MsgBox "Данные испорчены."
Exit For
End If
varЦена(р) = varЦена(р) * sngCOLA
Next p
Задание шага цикла
Полный синтаксис оператора For. . .Next включает необязательное ключевое слово Step (шаг) в первой строке структуры, как, например, в следующем фрагменте программного кода:
Sub ListOddNumbers()
Dim strOddNumbers As String
For F = 1 To 33 Step 2
StrOddNumbers = strOddNumbers 5 F & " "
Next F MsgBox "Нечетными числами между 1 и 33 являются: " & _
Chr(13) & strOddNumbers
End Sub
В этом примере цикл создает строку, содержащую все нечетные числа из диапазона, определяемого значениями начало и конец цикла. Значение переменной-счетчика при каждом проходе цикла увеличивается на 2 - шаг, заданный значением аргумента Step. Поскольку начальным значением задано 1, F всегда будет нечетным, что упрощает задачу программирования операторов внутри цикла.
В общем, аргумент Step сообщает VBA, как вычислять следующее значение счетчика по достижении конца цикла. Обычно, когда аргумент Step явно не указан, счетчик увеличивается на 1. Указав аргумент Step, вы можете задать другое значение, на которое нужно будет увеличивать счетчик. При этом можно задать и отрицательное значение, тогда счетчик будет уменьшаться.
И еще раз повторяю- не будьте слишком хитроумными. Необычные значения аргумента Step могут порождать ошибки, которые трудно обнаружить просто потому, что ошибки при этом тоже бывают необычными. Поэтому используйте явное задание аргумента Step только тогда, когда этого явно требует ситуация, да и в этих случаях лучше сначала попытаться найти другие решения, уменьшающие вероятность появления осложнений.
Управление потоком с помощью Go То
Если ваша программа вдруг стала неуправляемой, укажите ей, куда идти, - с помощью передачи управления другому участку программного кода в процедуре. Оператор Go To в совокупности со специальным оператором метки в месте назначения позволяет по желанию перемещаться от одной точки в процедуре к другой. Метка- это оператор, просто отмечающий некоторое место в программном коде. Чтобы задать метку, напечатайте ее имя (согласно правилам создания имен в VBA), а после него - двоеточие.
Пример использования Go To
В следующем примере оператор Go To направляет поток программы из главной части процедуры к метке Special Value, если встречается необычное значение:
Function GoToExample (ItemNumber As Integer )
Dim intR As Integer
Select Case ItemNumber
Case 2412
Go To SpecialValue
Case Is < CutOffValue
DoSomething
Case >= CutOffValue
DoHardlyAnything
End Select
( операторы, выполняющие какое-то действия)
GoToExample = intR
Exit Function
SpecialVal ue:
DoSomethingSpecial
GoToExample = intR
End Function
Обратите внимание на формат метки SpecialValue - она размещается в своей отдельной строке и заканчивается двоеточием. Двоеточие здесь просто обязательно - при его отсутствии VBA непременно расстроится и выведет сообщение об ошибке.
Оправдания Go To
Использование оператора Go To считается в программировании признаком низкого качества. Дело в том, что использование этого оператора превращает программный код в "спагетти", когда путь выполнения программы скачет туда-сюда через всю программу. "Спагетти" трудно распутывать, а программный код по мере увеличения в нем числа операторов Go To быстро становится невозможным для чтения. Всегда, когда это возможно, используйте управляющие структуры, позволяющие программе выполняться последовательно.
Но иногда оператор Go To оказывается самым естественным способом для того, чтобы заставить программу делать то, что вам нужно. Может быть, ваша голова уже до предела нагружена невероятным сплетением вложенных циклов и условных операторов, требующих сложного множества критериев. В таких случаях оператор Go To проложит прямую дорогу к выходу из лабиринта, только не используйте его слишком часто.
Глава 9. "Бронированный" программный код: отладка и устранение ошибок.
В этой главе ...
~ Каталог всевозможных ошибок, стремящихся "одурачить" вашу программу
~ Принципы борьбы с ошибками
~ Замечательная возможность - режим паузы
~ Все средства отладки редактора Visual Basic, включая команды Step и окна Immediate, Locals и Watch
~ Использование редактора Visual Basic как калькулятора с помощью окон Immediate и Watch
~ Изощренные приемы отладки, уменьшающие риск появления ошибок при выполнении программы
Создание программного кода в VBA - это только полдела. Заставить этот программный код работать и работать так, как нужно, - вот что требует больше всего усилий. Вылавливание и уничтожение ошибок становятся решающим моментом в создании программы, и нам с вами пришло время выяснить, как это делается в VBA. В этой главе мы обсудим также приемы программной обработки ошибок, позволяющие программе грациозно выходить из трудных ситуаций, которые случаются во время ее выполнения.
Все возможные неприятности происходят обязательно
Программа, создаваемая с помощью VBA (как и любого другого языка программирования), обычно сопровождается тремя следующими типами ошибок.
* Ошибки компиляции. Синтаксические и другие ошибки, сразу же делающие невозможным выполнение программы.
* Логические ошибки. Изъяны проектирования программы, в результате которых программа делает то, что вы не планировали, или не делает того, что вы планировали.
* Ошибки выполнения. Приводят к остановке выполнения программы вследствие либо логических ошибок, либо возникновения ситуации, не предусмотренной в программе (подробно об этом - ниже, в подразделе "Откуда берутся ошибки выполнения").
Изо всех трех типов ошибок синтаксические, определенно, самые простые и для обнаружения, и исправления. Поэтому я коснусь синтаксических ошибок только вкратце, чтобы основное внимание уделить приемам выявления и искоренения ошибок двух других типов; по сути, они и являются настоящими ошибками.
Исправление синтаксических ошибок
Если вы допустите синтаксическую ошибку, редактор Visual Basic сообщит вам об этом почти сразу же, не дожидаясь, когда вы дадите указание выполнить программу. Если вы напечатаете что-то такое, что редактор Visual Basic не поймет, символы в строке с непонятным программным кодом станут красными, а как только точка ввода перейдет из этой строки на другую, вы получите сообщение, подтверждающее наличие ошибки и с некоторым разъяснением ее (при условии, что на вкладке Editor (Редактор) диалогового окна Options (Параметры) отмечен флажок Auto Syntax Check (Автоматическая проверка синтаксиса); чтобы открыть это диалоговое окно, выберите Tools=Options из меню). Например, если вы напечатаете If х = 3 и забудете напечатать Then, появится сообщение Compile error : Expected: Then or GoTo (Ошибка компиляции: ожидалось Then или GoTo).

