Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

End Sub. Если инструкция Dim для переменной отсутствует, ей присваивается тип по умолчанию, в данном случае Variant



Если инструкция Dim для переменной отсутствует, ей присваивается тип по умолчанию, в данном случае Variant. Именно он использован в программе БезОбъявленияПеременной для переменной Stringl. Поскольку переменные этого типа могут содержать любые данные, никаких проблем при выполнении программы не возникает. В следующем примере тип Variant присвоен переменной Stringl явно.

«Плюсы» и «минусы» типа Variant

Когда значение присваивается переменной типа Variant, VBA определяет его тип и соответствующим образом изменяет переменную. Тип Variant по умолчанию присваивается всем переменным, которые не описаны инструкцией Dim. Если вы хотите для неописанных переменных задать другой тип, используйте инструкцию DefType, о которой будет рассказано немного позже. Применение типа данных по умолчанию для всех переменных, конечно, сокращает код. Некоторые разработчики весьма высоко оценили этот способ, позволяющий использовать новые переменные в любом месте программы, не заботясь об их описании.

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

Во-первых, на значения типа Variant расходуется больше памяти. Одна такая переменная занимает 16 байт (плюс по 1 байту на символ, если в ней содержится строка), а это почти в два раза больше, чем для других «объемных» типов – Currency, Date и Double. Коротким программам требуется, как правило, незначительный объем памяти, но в больших приложениях со множеством переменных вы, безусловно, столкнетесь с проблемой производительности, а может быть, и исчер­паете всю доступную память системы.

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

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

Рассмотрим в качестве примера код для математических вычислений с переменной. Допустим, что при вызове подпрограммы в нее передается переменная Integer. В этом случае вам не надо проверять, будет ли для расчетов действительно использовано численное значение. Если же вы передаете в подпрограмму переменную Variant, вам придется проверять это каждый раз. Не исключено, что по ошибке в подпрограмму будет передана дата, строка или даже ссылка на объект, выяснение займет еще некоторое время и приведет к дальнейшему снижению производительности.

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





Дата публикования: 2014-11-26; Прочитано: 166 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...