Remkomplekty.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel dim

В чем разница между dim и set в vba

извините меня, как новичок в VBA.

иногда я использую

в других случаях я использую

в чем разница? И когда я должен использовать что?

7 ответов

нет причин использовать set если не ссылаться на ссылку на объект. Хорошая практика-использовать его только в этом контексте. Для всех других простых типов данных просто используйте оператор присваивания. Это хорошая идея dim (размерность) все переменные, однако:

примерами простых типов данных будут integer , long , boolean , string . Это просто типы данных и не имеют собственных методов и свойств.

пример object будет Range , a Worksheet или Workbook . Они имеют свои собственные методы и свойства.

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

однако, я не думаю, что это то, о чем вы действительно просите.

иногда я использую:

это никогда не будет работать. Без Set вы получите ошибку выполнения #91 объектная переменная или переменная блока With не задана. Это потому, что ты должны использовать Set для присвоения значения переменных ссылке на объект. Тогда код выше будет работа.

я думаю, что приведенный ниже код иллюстрирует то, что вы действительно спрашиваете. Предположим, мы не объявляем тип и пусть r быть тип.

Итак, давайте разбей то, что здесь происходит.

r объявляется как вариант

r установлен до Range содержащая ячейка «A1»

r установлен до стоимостью на свойство по умолчанию of Range(«A1») .

в этом случае свойством диапазона по умолчанию является .Value , так что следующие две строки кода эквивалентны.

дополнительные сведения о свойствах объекта по умолчанию см. В разделе чип Пирсон «член класса по умолчанию».

что касается вашего Set пример:

в других случаях я использую

это не сработало бы без предварительного объявления этого r это Range или

Dim: вы определяете переменную (здесь: r-переменная диапазона типов)

Set: вы устанавливаете свойство (здесь: установите значение r в диапазон («A1») — это не тип, а значение).

вы должны использовать set с объектами, если r был простым типом (например, int, string), то вы просто напишете:

Dim просто объявляет значение и тип.

Set присваивает значение переменной.

Если переменная определена как объект, например, Dim myfldr как папка, ей присваивается значение с помощью ключевого слова «Set».

Dim является коротким для измерения и используется в VBA и VB6 для объявления локальных переменных.

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

надеюсь, что проясняет разницу для вас.

в соответствии с инструкцией VBA help on SET он устанавливает ссылку на объект.поэтому, если вы измените свойство, фактический объект также изменится.

другие свойства Vars также меняются, поэтому:

VBA Excel. Массивы (одномерные, многомерные, динамические)

Массивы в VBA Excel: одномерные, многомерные и динамические. Объявление и использование массивов. Операторы Public, Dim и ReDim. Функции Array, LBound, UBound.

Массивы – это множества однотипных элементов, имеющих одно имя и отличающиеся друг от друга индексами. Они могут быть одномерными (линейными), многомерными и динамическими. Массивы в VBA Excel, как и другие переменные, объявляются с помощью операторов Dim и Public. Для изменения размерности динамических массивов используется оператор ReDim. Массивы с заранее объявленной размерностью называют статическими.

Одномерные массивы

Объявление одномерных (линейных) статических массивов в VBA Excel:

В первом случае публичный массив содержит 10 элементов от 0 до 9 (нижний индекс по умолчанию – 0, верхний индекс – 9), а во втором случае локальный массив содержит 9 элементов от 1 до 9.

По умолчанию VBA Excel считает в массивах нижним индексом нуль, но, при желании, можно сделать нижним индексом по умолчанию единицу, добавив в самом начале модуля объявление «Option Base 1». Вместо верхнего индекса можно использовать переменную.

Многомерные массивы

Объявление многомерных статических массивов в VBA Excel аналогично объявлению одномерных массивов, но с добавлением размерностей дополнительных измерений через запятую:

Третий массив состоит из 10000 элементов – 10×10×10×10.

Динамические массивы

Динамические массивы в VBA Excel, в отличие от статических, объявляются без указания размерности:

Такие массивы используются, когда заранее неизвестна размерность, которая определяется в процессе выполнения программы. Когда нужная размерность массива становится известна, она в VBA Excel переопределяется с помощью оператора ReDim:

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

С помощью оператора ReDim невозможно изменить обычный массив, объявленный с заранее заданной размерностью. Попытка переопределить размерность такого массива вызовет ошибку компиляции с сообщением: Array already dimensioned (Массив уже измерен).

При переопределении размерности динамических массивов в VBA Excel теряются значения их элементов. Чтобы сохранить значения, используйте оператор Preserve:

Обратите внимание!
Переопределить с оператором Preserve можно только последнюю размерность динамического массива. Это недоработка разработчиков, которая сохранилась и в VBA Excel 2016. Без оператора Preserve можно переопределить все размерности.

Использование массивов

Приведу два примера, где не обойтись без массивов.

1. Как известно, функция Split возвращает одномерный массив подстрок, извлеченных из первоначальной строки с разделителями. Эти данные присваиваются заранее объявленному строковому (As String) одномерному динамическому массиву. Размерность устанавливается автоматически в зависимости от количества подстрок.

2. Данные в массивах обрабатываются значительно быстрее, чем в ячейках рабочего листа. Построчную обработку информации в таблице Excel можно наблюдать визуально по мерцаниям экрана, если его обновление (Application.ScreenUpdating) не отключено. Чтобы ускорить работу кода, можно значения из диапазона ячеек предварительно загрузить в динамический массив с помощью оператора присваивания (=). Размерность массива установится автоматически. После обработки данных в массиве кодом VBA полученные результаты выгружаются обратно на рабочий лист Excel. Обратите внимание, что загрузить значения в диапазон ячеек рабочего листа через оператор присваивания (=) можно только из двумерного массива.

Функции Array, LBound, UBound

Функция Array

Функция Array возвращает массив элементов типа Variant из первоначального списка элементов, перечисленных через запятую. Нумерация элементов в массиве начинается с нуля. Обратиться к элементу массива можно, указав в скобках его номер (индекс).

Что означает DIM в Visual Basic и BASIC?

Что означает DIM в Visual Basic?

10 ответов:

Dim первоначально (в BASIC) обозначал размерность, так как он использовался для определения размеров массива.

(первоначальная реализация BASIC была Dartmouth BASIC, которая произошла от FORTRAN, где указано измерение.)

В настоящее время Dim используется для определения любой переменной, а не только массивов, поэтому ее значение больше не интуитивно понятно.

Dim имели разные значения, приписываемые ему.

я нашел ссылки о Dim смысл «Объявить В Памяти», более актуальной ссылкой является документ на Dim Заявление опубликовано Oracle как часть Siebel VB Language Reference. Конечно, вы можете утверждать, что если вы не объявляете переменные в памяти, где вы это делаете? Может быть «объявить в модуле» — это хорошая альтернатива, учитывая, как Dim is используемый.

на мой взгляд, «объявить в память» — это на самом деле мнемоника, созданный, чтобы сделать проще научиться использовать Dim . Я вижу «объявить в памяти» как лучшее значение, поскольку он описывает то, что он делает в текущих версиях языка, но это не правильное значение.

на самом деле, у истоков Basic Dim используется только для объявления массивов. Для обычных переменных не было использовано ключевое слово, вместо этого их тип был выведен из их имени. Для например, если имя переменной заканчивается $ тогда это строка (это то, что вы можете увидеть даже в именах методов до VB6, например Mid$ ). И так, вы использовали Dim только чтобы дать измерение к массивам (обратите внимание, что ReDim изменение размера массивов).

Читать еще:  Сжпробелы excel английский

действительно, Имеет Ли Это Значение? Я имею в виду, что это ключевое слово имеет свое значение внутри искусственного языка. Это не должно быть слово на английском или любом другом естественном языке язык. Так что это может означать все, что вы хотите, все, что имеет значение, это то, что он работает.

во всяком случае, это не совсем верно. AS BASIC-это часть нашей культуры, и понимание того, почему она стала такой, какая она есть — я надеюсь — поможет улучшить наше видение мира.

Dim. К моему разочарованию, они не говорят, что значит Dim стоять, и только сказать, как он используется.

но прежде чем моя надежда померкла, мне удалось найти это система микрокомпьютер Би-би-си, используемых руководство (это утверждает, что с 1984 года, и я не хочу в этом сомневаться). Микрокомпьютер Би-би-си использовался вариант BASIC под названием BBC BASIC и он описан в документе. Хотя, он не говорит, что делает Dim стоять, он говорит (на странице 104):

. вы можете измерить N$, чтобы иметь столько записей, сколько вы хотите. Для например, DIM N$(1000) создаст массив строк с пространством для 1000 различные наименования.

как я уже сказал, он не говорит, что Dim обозначает размерность, но служит доказательством того, что связывание Dim С Dimension было обычным делом на момент написания этого документа.

теперь, я получил полезный сюрприз позже (на странице 208), название раздела, который описывает ключевое слово DIM (Примечание: это не указано в содержании) говорит:

тусклое измерение массива

Итак, я не получил цитату » Dim означает. «но я думаю, что ясно, что любой порядочный человек, который способен прочитать эти документы, будет считать это Dim средства измерения.

с обновленной надеждой, я решил искать о том, как . Опять же, я не нашел учетной записи по этому вопросу, но все же я смог найти окончательную цитату:

прежде чем вы сможете использовать массив, вы должны определить его в инструкции DIM (dimension).

вы можете найти это в рамках истинные основные онлайн-руководства пользователя на веб-странице True BASIC inc, компании, основанной Томас Курц Евгений, соавтор BASIC.

так, в reallity, Dim это сокращение для DIMENSION и да. Это существовало в Фортране раньше, поэтому вполне вероятно, что он был выбран влиянием Фортрана как Патрик Макдональд сказал в своем ответе.

это сокращение от Dimension, поскольку оно первоначально использовалось в BASIC для указания размера массивов.

DIM — (сокращение от dimension) определите размер массивов

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

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

измерение переменной, в основном вы говорите компилятору, что вам понадобится переменная этого типа в какой-то момент.

Это означает измерение, но обычно читается как «создать переменную» или «выделить пространство для этого.»

переменной. Первоначально это было сокращение от «dimension», которое не является термином, который используется в программировании (за пределами этого конкретного ключевого слова) в какой-либо значительной степени.

DIM означает объявление в памяти DIM x как новое целое число создает пространство в памяти, где хранится переменная x

в тот день DIM зарезервировал память для массива, и когда память была ограничена, вы должны были быть осторожны, как вы ее использовали. Однажды я написал (в 1981 году) базовую программу на TRS-80 Model III с 48 КБ оперативной памяти. Он не будет работать на аналогичной машине с ОЗУ 16Kb, пока я не уменьшу размер массива, изменив оператор DIM

сокращение для измерения. Это тип переменной. Вы объявляете (или» сообщаете » Visual Basic), что настраиваете переменную с этим словом.

ключевое слово Dim является необязательным, когда мы используем его с модификаторами-Public, Protected, Friend,Protected Friend,Private,Shared,Shadows,Static, ReadOnly и т. д. например: Static nTotal As Integer

для ссылочного типа, мы должны использовать новая ключевое слово для создания нового экземпляра класса или структуры. например, Dim lblTop As New System.Windows.Forms.Label .

оператор Dim может использоваться без типа данных при установке опция вывести на. В этом случае компилятор выводит тип данных переменная от типа ее выражения инициализации. Пример :

приведенное выше утверждение эквивалентно- Dim nExpVar As Integer

Переменные и константы в VBA

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

Например, константа Pi хранит значение 3,14159265… Число “Пи” не будет изменяться в ходе выполнения программы, но все же хранить такое значение удобнее как константу.

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

Типы данных

Все переменные и константы относятся к определённому типу данных. В таблице ниже приведены типы данных, используемые в VBA, с описанием и диапазоном возможных значений:

Очевидно, что пользуясь приведённой выше таблицей и правильно выбирая тип данных, можно использовать память более экономно (например, выбрать тип данных Integer вместо Long или Single вместо Double). Однако, используя более компактные типы данных, нужно внимательно следить за тем, чтобы в коде не было попыток уместить в них не соразмерно большие значения.

Объявление переменных и констант

Примечание переводчика: Говоря о переменных в VBA, стоит упомянуть ещё один очень важный момент. Если мы объявляем переменную, но не присваиваем ей какое-либо значение, то она инициализируется значением по умолчанию:
• текстовые строки – инициализируются пустыми строками;
• числа – значением 0;
• переменные типа Boolean – False;
• даты – 30 декабря 1899.

Прежде чем использовать переменную или константу, её нужно объявить. Для этого в макрос добавляют вот такую простую строку кода:

Dim Имя_Переменной As Тип_Данных

В показанной выше строке кода Имя_Переменной – это имя переменной, которая будет использована в коде, а Тип_Данных – это один из типов данных из таблицы, приведённой чуть ранее в этой статье. Например:

Аналогично объявляются константы, но при объявлении констант обязательно сразу указывается их значение. Например, вот так:

Объявлять переменные в Excel не обязательно. По умолчанию все введённые, но не объявленные переменные в Excel будут иметь тип Variant и смогут принять как числовое, так и текстовое значение.

Таким образом, программист в любой момент сможет использовать новую переменную (даже если она не была объявлена), и Excel будет рассматривать её как переменную типа Variant. Однако, есть несколько причин, почему так поступать не следует:

  1. Использование памяти и скорость вычислений. Если не объявлять переменную с указанием типа данных, то по умолчанию для неё будет установлен тип Variant. Этот тип данных использует больше памяти, чем другие типы данных.Казалось бы, несколько лишних байт на каждую переменную – не так уж много, но на практике в создаваемых программах могут быть тысячи переменных (особенно при работе с массивами). Поэтому излишняя память, используемая переменными типа Variant, по сравнению с переменными типа Integer или Single, может сложится в значительную сумму.К тому же, операции с переменными типа Variant выполняются гораздо медленнее, чем с переменными других типов, соответственно лишняя тысяча переменных типа Variant может значительно замедлить вычисления.
  2. Профилактика опечаток в именах переменных. Если все переменные объявляются, то можно использовать оператор VBA – Option Explicit (о нём расскажем далее), чтобы выявить все не объявленные переменные.Таким образом исключается появление в программе ошибки в результате не верно записанного имени переменной. Например, используя в коде переменную с именем sVAT_Rate, можно допустить опечатку и, присваивая значение этой переменной, записать: “VATRate = 0,175”. Ожидается, что с этого момента, переменная sVAT_Rate должна содержать значение 0,175 – но, конечно же, этого не происходит. Если же включен режим обязательного объявления всех используемых переменных, то компилятор VBA сразу же укажет на ошибку, так как не найдёт переменную VATRate среди объявленных.
  3. Выделение значений, не соответствующих объявленному типу переменной. Если объявить переменную определённого типа и попытаться присвоить ей данные другого типа, то появится ошибка, не исправив которую, можно получить сбой в работе программы.На первый взгляд, это может показаться хорошей причиной, чтобы не объявлять переменные, но на самом деле, чем раньше выяснится, что одна из переменных получила не те данные, которые должна была получить – тем лучше! Иначе, если программа продолжит работу, результаты могут оказаться неверными и неожиданными, а найти причину ошибок будет гораздо сложнее.Возможно также, что макрос будет “успешно” выполнен. В результате ошибка останется незамеченной и работа продолжится с неверными данными!
Читать еще:  Условное форматирование в excel vba

В связи с этим, неверный тип данных желательно обнаруживать и как можно раньше исправлять такие ошибки в коде. По этим причинам при написании макроса VBA рекомендуется объявлять все переменные.

Option Explicit

Оператор Option Explicit заставляет объявлять все переменные, которые будут использованы в коде VBA, и при компиляции выделяет все не объявленные переменные как ошибки (прежде чем будет запущено выполнение кода). Применить этот оператор не сложно – просто запишите в самом верху файла VBA такую строку:

Если хотите всегда вставлять Option Explicit в начало каждого нового созданного модуля VBA, то это можно делать автоматически. Для этого необходимо включить параметр Require Variable Declaration в настройках редактора VBA.

Это делается так:

  • В меню редактора Visual Basic нажмите Tools >Options
  • В появившемся диалоговом окне откройте вкладку Editor
  • Отметьте галочкой параметр Require Variable Declaration и нажмите ОК

При включенном параметре строка Option Explicit будет автоматически вставляться в начало каждого нового созданного модуля.

Область действия переменных и констант

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

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

Однако, если будет вызвана какая-то функция, расположенная в другом модуле, то для неё переменная sVAT_Rate будет не известна.

При попытке использовать sVAT_Rate в другой процедуре, компилятор VBA сообщит об ошибке, так как эта переменная не была объявлена за пределами функции Total_Cost (при условии, что использован оператор Option Explicit).

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

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

Для объявления констант также можно использовать ключевые слова Public и Private, но не вместо ключевого слова Const, а вместе с ним.

В следующих примерах показано использование ключевых слов Public и Private в применении к переменным и к константам.

Это значит, что sVAT_Rate и iMax_Count будут доступны в любом модуле проекта.

Это значит, что sVAT_Rate и iMax_Count будут доступны во всех процедурах текущего модуля, но не будут доступны для процедур, находящихся в других модулях.

Что такое переменная и как правильно её объявить?

Переменная — это некий контейнер, в котором VBA хранит данные. Если подробнее, то это как коробочка, в которую Вы можете положить что-то на хранение, а затем по мере необходимости достать. Только в данном случае в переменной мы храним число, строку или иные данные, которые затем можем извлекать из неё и использовать в коде по мере необходимости.

Для чего нужна переменная? Чтобы хранить значение и применить его позже в любой момент. Например, в ячейке А1 записана сумма, а нажатием на кнопку запускается обновление отчета. После обновления отчета сумма в А1 изменится. Необходимо сверить сумму до обновления с суммой после и в зависимости от этого сделать какое-либо действие. Переменная как раз позволит запомнить значение ячейки до того, как она обновится и использовать именно это значение после обновления.

Требования к переменным:

В качестве имен переменных можно использовать символы букв и числа, но первой в имени переменной всегда должна быть буква. Не допускается использование точки, запятой, пробела и иных знаков препинания, кроме нижнего подчеркивания. Длина имени не должна превышать 254 символов. Так же нельзя использовать в качестве имен для переменных зарезервированные константы редактора VBA(например Sub, Msgbox, ubound, Date и т.п.). Так же для переменных неважен регистр букв.

Теперь рассмотрим основные декларированные в VBA типы данных, которые можно хранить в переменных:

Как видно из таблицы больше всего памяти занимает Variant . Притом это если он хранит числовые данные. Если же такая переменная будет хранить данные строкового типа(текст), то размер занимаемой памяти будет измеряться уже начиная с 22 байт + длина строки, хранящейся в переменной. Чем больше памяти занимает переменная, тем дольше она инициализируется в памяти и тем медленнее код будет выполняться. Вот поэтому и важно явно задавать тип данных, хранимых в переменной — это называется объявить переменную.

Тип данных Decimal больше не используется, поэтому объявить переменную данного типа в VBA не получится — подобная попытка приведет к синтаксической ошибке. Для работы с данными типа Decimal переменную необходимо изначально объявить как Variant или вообще без типа (например Dim a), т.к. тип данных Variant используется в VBA по умолчанию и принимает любой тип данных.

Так же переменным можно назначать и другие типы данных, которых нет в таблице выше — это типы, которые поддерживаются объектной моделью приложений, к которым «подключен» VBA. Например, если зайти в VBA из Excel, то библиотека типов объектной модели Excel подключена по умолчанию и для переменных становится доступно множество типов этой объектной модели. Многие из них знакомы всем: Workbook, Worksheet, Range, Cells, Chart и т.д. Т.е. это книги, листы, ячейки, диаграммы. Типов много, почти на каждый объект и коллекцию. Рассматривать здесь все бессмысленно. Могу лишь привести пару строк кода:

Dim rRange as Range ‘назначили переменной тип ячейка/диапазон Set rRange = Range(«A1») ‘присвоили ссылку на ячейку A1 текущего листа

Про объявление переменных подробно написано чуть ниже.
А более подробно про обращение к диапазонам из VBA можно почитать в этой статье: Как обратиться к диапазону из VBA

Читать еще:  Excel do while

как объявлять переменные
На самом деле все очень просто. Это делается при помощи операторов области действия: Dim , Public , Static и оператора присвоения типа As . Самый распространенный оператор — Dim . Его и возьмем в качестве примера. Синтаксис объявления:

[оператор области действия] Имя_переменной As [тип данных]

Очень частая ошибка при объявлении переменных, совершаемая начинающими изучать VBA:

Dim MyVar1, MyVar2, MyVar3 As Integer

Вроде бы исходя из логики всем переменным присвоен тип данных Integer . Но это ошибочное суждение. Тип Integer присвоен только последней переменной, к которой он «привязан» оператором As — MyVar3. Все остальные переменные имеют тип данных Variant . Т.е. если Вы не задаете каждой переменной свой тип хранимых данных явно(т.е. не указываете для неё тип данных через As), то VBA сам присваивает для такой переменной тип данных Variant , т.к. он может хранить любой тип данных. А вот так выглядит правильное присвоение типа данных:

Dim MyVar1 As Integer, MyVar2 As Integer, MyVar3 As Integer

Это и есть объявление переменных. Т.е. сначала идет оператор области действия ( Dim , Public , Static ), сразу за ним имя переменной, затем оператор As и тип.
Но это не все. Некоторые типы переменным можно присваивать еще короче — даже без оператора As :

Dim MyVar1%, MyVar2%, MyVar3%

Всего шесть типов, которые можно объявить подобным методом:
! — Single
# — Double
$ — String
% — Integer
& — Long
@ — Currency
На что стоит обратить внимание, при объявлении переменных подобным образом: между именем переменной и знаком типа не должно быть пробелов.
Я лично в большинстве статей предпочитаю использовать первый метод, т.е. полное указание типа. Это читабельнее и понятнее. В каких-то проектах могу использовать краткое указание, в общих(разработка в команде) — полное. В своих кодах Вы вправе использовать удобный Вам метод — ошибки не будет.

Теперь разберемся с операторами области действия( Dim , Public и Static ):

  • Dim — данный оператор используется для объявления переменной, значение которой будет храниться только в той процедуре, внутри которой данная переменная объявлена. Во время запуска процедуры такая переменная инициализируется в памяти, Вы можете использовать её значение внутри только этой процедуры и по завершению процедуры переменная выгружается из памяти(обнуляется) и данные по ней теряются. Переменную, объявленную подобным образом еще называют локальной переменной. Однако с помощью данного оператора можно объявить переменную, которая будет доступна в любой процедуре модуля. Необходимо объявить переменную вне процедуры — в области объявлений(читать как первой строкой в модуле, после строк объявлений типа — Option Explicit ). Тогда значение переменной будет доступно в любой процедуре лишь того модуля, в котором данная переменная была объявлена. Такие переменные называются переменными уровня модуля.
  • Static — данный оператор используется для объявления переменной, значение которой предполагается использовать внутри процедуры, но не теряя значения данной переменной по завершении процедуры. Переменные данного типа обычно используют в качестве накопительных счетчиков. Такая переменная инициализируется в памяти при первом запуске процедуры, в которой она объявлена. По завершении процедуры данные по переменной не выгружаются из памяти, но однако они не доступны в других процедурах. Как только Вы запустите процедуру с этой переменной еще раз — данные по такой переменной будут доступны в том виде, в котором были до завершения процедуры. Выгружается из памяти такая переменная только после закрытия проекта(книги с кодом). В простонародье такие переменные чаще называют глобальными(возможно из-за того, что раньше подобные переменные объявлялись при помощи оператора Global, который в настоящее время устарел и не используется)
  • Public — данный оператор используется для объявления переменной, значение которой будет храниться в любой процедуре проекта. Переменная, объявленная подобным образом, должна быть объявлена вне процедуры — в области объявлений. Такая переменная загружается в память во время загрузки проекта(при открытии книги) и хранит значение до выгрузки проекта(закрытия книги). Использовать её можно в любом модуле и любой процедуре проекта. Важно: объявлять подобным образом переменную необходимо строго в стандартном модуле. Такие переменные называются переменными уровня проекта.
    Для большего понимания того, где и как объявлять переменные уровня проекта два небольших примера.
    Неправильное объявление

Option Explicit Sub main() Public MyVariable As String MyVariable = «Глобальная переменная» ‘показываем текущее значение переменной MsgBox MyVariable ‘пробуем изменить значение переменной Call sub_main ‘показываем измененное значение переменной MsgBox MyVariable End Sub ‘доп.процедура изменения значения переменной Sub ChangeMyVariable() MyVariable = «Изменили её значение» End Sub

переменные не будут видны во всех модулях всех процедур и функций проекта, потому что:
1. Оператор Public недопустим внутри процедуры(между Sub и End Sub), поэтому VBA при попытке выполнения такой процедуры обязательно выдаст ошибку — Invalid Attribut in Sub or Function.
2. Даже если Public заменить на Dim — это уже будет переменная уровня процедуры и для других процедур будет недоступна.
3. Т.к. объявление неверное — вторая процедура( ChangeMyVariable ) ничего не знает о переменной MyVariable и естественно, не сможет изменить именно её.
Правильное объявление

‘выше глобальных переменных и констант могут быть только декларации: Option Explicit ‘принудительное объявление переменных Option Base 1 ‘нижняя граница объявляемых массивов начинается с 1 Option Compare Text ‘сравнение текста без учета регистра ‘глобальная переменная — первой строкой, выше всех процедур Public MyVariable As String ‘далее процедуры и функции Sub main() MyVariable = «Глобальная переменная» ‘показываем текущее значение переменной MsgBox MyVariable, vbInformation, «www.excel-vba.ru» ‘пробуем изменить значение переменной Call ChangeMyVariable ‘показываем измененное значение переменной MsgBox MyVariable, vbInformation, «www.excel-vba.ru» End Sub ‘доп.процедура изменения значения переменной Sub ChangeMyVariable() MyVariable = «Изменили её значение» End Sub

Если при этом вместо Public записать Dim , то эта переменная будет доступна из всех функций и процедур того модуля, в котором записана, но недоступна для функций и процедур других модулей.
Переменные уровня проекта невозможно объявить внутри модулей классов( ClassModule , ЭтаКнига(ThisWorkbook) , модули листов , модули форм(UserForm) — подробнее про типы модулей: Что такое модуль? Какие бывают модули?)

  • Операторы области действия так же могут применяться и к процедурам. Для процедур доступен еще один оператор области действия — Private . Объявленная подобным образом процедура доступна только из того модуля, в котором записана и такая процедура не видна в диалоговом окне вызова макросов(Alt+F8)
  • Как правильно назвать переменную:

    «Что самое сложное в работе программиста? — выдумывать имена переменным.» 🙂 А ведь придумать имя переменной тоже не так-то просто. Можно, конечно, давать им имена типа: a, d, f, x, y и т.д.(я сам иногда так делаю, но либо в простых кодах, либо для специального запутывания кода). Но стоит задуматься: а как Вы с ними будете управляться в большом коде? Код строк на 10 еще потерпит такие имена, а вот более крупные проекты — не советовал бы я в них оперировать такими переменными. Вы сами запутаетесь какая переменная как объявлена и какой тип данных может хранить и что за значение ей присвоено. Поэтому лучше всего давать переменным осмысленные имена и следовать соглашению об именовании переменных. Что за соглашение? Все очень просто: перед основным названием переменной ставится префикс, указывающий на тип данных, который мы предполагаем хранить в данной переменной. Про имеющиеся типы данных я уже рассказал выше. А ниже приведена примерная таблица соответствий префиксов типам данных:

    Ссылка на основную публикацию
    Adblock
    detector