Access 2002

Оператор Select Case


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

Прочитав английское сокращение названия месяца, хранящееся в переменной strMonth, оператор Select Case присваивает переменной intMonth номер этого месяца. Но проблема в том, что VBA всегда начинает сверху и просматривает все перечисленные вами варианты до тех пор, пока не найдет нужный. Если чаще всего вы определяете номер декабря ("Dec"), то прежде чем его найти, ваш код вынужден будет выполнять по 11 сравнений.

Поэтому, если какой-то из вариантов встречается чаще других, его нужно поместить в оператор Select Case первым. Размещение вариантов в порядке их вероятности, а не просто по алфавиту, номерам и т. п., значительно ускорит выполнение вашего кода.

В первом из наших тестов определялся номер января (стоящего в операторе Select Case первым), а во втором — декабря (стоящего последним). Конечно, результаты тестов будут сильно зависеть от количества предложений Case. Чем их меньше, тем меньшим будет выигрыш во времени от их перестановки. У нас же выполнение более быстрого кода заняло 12% от времени выполнения более медленного. (Просмотрите также полные тестовые процедуры Test20a и Test20b в модуле класса Optimi zi ngTests.)

Тест 21: В цикле For.Next массивы обрабатываются быстрее, чем в цикле For Each.Next

Если вам нужно пройти в цикле по всем элементам массива, это можно сделать двумя способами:

О использовать цикл For.Next от нижней границы массива (определяемой функцией LBound) до верхней (определяемой функцией UBound);

Но, как вы уже видели, более короткий код не всегда быстрее выполняется. В данном случае тесты показали, что выполнение цикла For. Next требует 70% от времени выполнения цикла For Each. .Next.

Комментарии закрыты