Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Неявное описание переменных и тип Variant
В VBA есть одна интересная возможность, которой с удовольствием пользуются ленивые разработчики, но отвергают программисты, привыкшие работать организованно. Это неявное описание переменных. Вы, вероятно, обратили внимание, что все переменные, использованные в примерах программ, описаны в инструкциях Dim. В действительности, делать это не обязательно. Если VBA не находит описания переменной, он определяет ее самостоятельно. Рассмотрим следующий пример. Sub С_ОбъявлениемПеременной() Dim String1 As String String1 = "Привет!" MsgBox String1 End Sub Если Вы удалите из этой программы вторую строку, результат ее действия не изменится: Sub БезОбъявленияПеременной() String1 = "Привет!" MsgBox String1 End Sub Если инструкция Dim для переменной отсутствует, ей присваивается тип по умолчанию, в данном случае — Variant. Именно он использован в программе БезОбъявленияПеременной для переменной Stringl. Поскольку переменные этого типа могут содержать любые данные, никаких проблем при выполнении программы не возникает. В следующем примере тип Variant присвоен переменной Stringl явно. «Плюсы» и «минусы» типа Variant Когда значение присваивается переменной типа Variant, VBA определяет его тип и ответствующим образом изменяет переменную. Тип Variant по умолчанию присваивается всем переменным, которые не описаны инструкцией Dim. Если Вы хотите для неописанных переменных задать другой тип, используйте инструкцию DefType о которой мы расскажем немного позже. Применение типа данных по умолчанию для всех переменных, конечно, сокращает код. Некоторые разработчики весьма высоко оценили этот способ, позволяющий использовать новые переменные в любом месте программы, не заботясь об их описании. Тем не менее у неявного описания переменных есть три недостатка, о которых, вероятно, знают программисты, заботящиеся о структуре и организации приложений. Во-первых, на значения типа Variant расходуется больше памяти. Одна такая переменная занимает 16 байт (плюс по 1 байту на символ, если в ней содержится строка), а это почти в два раза больше, чем для других «объемных» типов — Currency, Date и Double. Коротким программам требуется, как правило, незначительный объем памяти, но в больших приложениях со множеством переменных Вы, безусловно, столкнетесь с проблемой производительности, а может быть и исчерпаете всю доступную память системы.
Второй недостаток также связан с производительностью. Когда переменной типа Variant присваивается значение, VBA перестраивает ее соответственно новому типу, на что уходит определенное время. Особенно существенны потери при этом в циклах, так как переменные перестраиваются по несколько раз. Третий недостаток — трудно отслеживать данные в переменных типа Variant. Вы никогда не сможете точно сказать, что хранится в такой переменной, поскольку в ней может быть все, что угодно. Это сильно затрудняет отладку программы и поиск ошибок в ней. Все упростится, если все Ваши переменные всегда содержат данные только определенного типа. Рассмотрим в качестве примера код для математических вычислений с переменной. Допустим, что при вызове подпрограммы в нее передается переменная Integer. В этом случае Вам не надо проверять, будет ли для расчетов действительно использовано численное значение. Если же Вы передаете в подпрограмму переменную Variant, Вам придется проверять это каждый раз. Не исключено, что по ошибке в подпрограмму будет передана дата, строка или даже ссылка на объект, выяснение займет еще некоторое время и приведет к дальнейшему снижению производительности. Однако все перечисленные недостатки не означают, что от типа Variant нужно полностью отказаться. Он очень полезен, когда Вы не знаете заранее тип значения, сохраняемого в переменной. Допустим, Ваше приложение выдает на экран приглашение на ввод целого числа. Но пользователь может ввести действительное число или даже строку — все имеют право на ошибку! Поэтому Ваша подпрограмма должна воспринимать данные любого типа. Поместите введенное значение в переменную Variant, а затем скопируйте в переменную нужного типа для дальнейшего использования.
|
|||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 46; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.157.12 (0.007 с.) |