Excel VBA переменная Scope
Во всех языках программирования есть спецификаторы доступа к переменной, которые определяют, откуда можно получить доступ к определенной переменной. Excel VBA — не исключение. VBA тоже имеет спецификаторы области видимости. Эти спецификаторы области могут использоваться для установки видимости / области переменной в Excel VBA.
В Excel VBA есть три типа спецификаторов области:
-
Уровень процедуры. Частный — уровень модуля. Общедоступный — Уровень проекта === Уровень переменной VBA Область действия Переменные, объявленные в подпрограмме, доступны только в этой процедуре / функции. У них есть область действия на уровне процедуры. Обычно они объявляются с ключевым словом Dim. Если для модуля задана неявная опция, то эта переменная могла не быть объявлена, а просто использоваться напрямую.
В приведенном ниже примере у нас есть проверка области действия подпрограммы с переменными x и y. Когда мы запускаем первую подпрограмму, она отлично работает и выводит сумму X и Y
Option Explicit Sub scopeTest() Dim x, y As Integer ' Procedure level variable in VBA x = 2 y = 3 Debug.Print x + y End Sub Sub sum() x = 5 y = 7 Debug.Print x + y End Sub
Но когда вы запускаете подпрограмму sum, она выдает ошибку, что переменная не объявлена. Почему? Поскольку X и Y являются частными для процедуры scopeTest, а сумма подпрограммы не имеет к ним доступа.
Следовательно, саб выдает ошибку.
Частная переменная VBA — область действия на уровне модуля Если вы хотите объявить переменную, к которой необходимо получить доступ во всем модуле, вы объявляете эту переменную как частную в верхней части модуля перед любой подпрограммой или функцией.
Переменные, объявленные перед любой подпрограммой в модуле, по умолчанию являются закрытыми. Даже если вы объявите их ключевым словом Dim. Но, если быть точным, разумно использовать ключевое слово Private.
Следующие две процедуры находятся в одном модуле, модуле 1.
Option Explicit 'Module level variable in VBA. Both variables x and y are private to this module. and 'can be accessed from any sub or function within this module. Dim x As Integer Private y As Integer Sub scopeTest() 'This can be accessed from any module in the project x = 2 y = 3 Debug.Print x + y End Sub Private Sub sum() ' This can't be accessed from other modules x = 5 y = 7 Debug.Print x + y End Sub
Две указанные выше функции будут работать отлично, поскольку переменные x и y являются частными переменными для этого модуля.
Важно: последние значения, хранящиеся в x и y, сохраняются до всего модуля. Если мы сначала запустим sub scopeTest и не инициализируем значения x и y в подсумме и не запустим его, то начальное значение x и y не изменится .
Подпрограмма ниже определена в отдельном модуле, модуле 2. Когда я пытаюсь получить доступ к переменной из другого модуля, процедура (или функция) VBA выдает ошибку.
Но если я попытаюсь вызвать сумму подпрограммы из модуля 1 в модуле 2, это сработает отлично. Чтобы сделать вашу функцию и подпрограммы приватными для модуля, используйте ключевое слово Private перед подпрограммой и функцией.
_Примечание: — Переменные, объявленные перед любой подпрограммой или функцией в модуле, по умолчанию являются частными для модуля. Вы можете использовать личное ключевое слово. Но функции и подпрограммы по умолчанию являются общедоступными, и к ним может получить доступ любой модуль в проекте. Чтобы сделать функции и подпрограммы приватными для модуля, вы должны использовать ключевое слово Private. _ === Public Variables — Project Level Scope Как мы узнали из приведенных выше примеров, функция и подпрограммы по умолчанию общедоступны и могут быть доступны из любого модуля. но переменные нет. Чтобы сделать переменную доступной из любого модуля в Excel VBA, мы используем ключевое слово Public. * Чтобы объявить общедоступную переменную в проекте, вы объявили их в верхней части модуля перед любой функцией или подпрограммой с ключевым словом public. Приведенный ниже код написан в модуле 1.
Option Explicit 'Project level variable in VBA. Public x As Integer Public y As Integer Public Sub scopeTest() 'This can be accessed from any module in the project x = 2 y = 3 End Sub Private Sub sum() ' This can't be accessed from other modules x = 5 y = 7 Debug.Print x + y End Sub
И эта подпрограмма находится в другом модуле, модуле 2.
Option Explicit Sub mul() Call scopeTest 'Call sum ' it won't work as it is private to the module 1 Debug.Print x * y End Sub
На этот раз все работает отлично.
Сначала я вызвал подпрограмму scopeTest. Поскольку scopeTest является общедоступным, он называется. Он инициализирует значения x и y. Затем мы умножаем x и y. Поскольку подпрограмма scopeTest инициализировала его значениями 2 и 3, мы получаем результат 6.
Так что да, ребята, вот как вы можете использовать спецификаторы области переменных в Excel для управления видимостью переменных, функций и подпрограмм в проектах Excel VBA.
Я попытался объяснить спецификаторы доступа VBA максимально простым способом. Надеюсь, это было объяснение. Если у вас есть какие-либо сомнения относительно этой статьи или любые другие сомнения, связанные с VBA, спросите меня в разделе комментариев ниже. Я буду счастлив здесь от вас.
Статьи по теме:
link: / cells-range-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-interval-question [ByRef and ByVal Arguments]
| Когда аргумент передается как аргумент ByRef другой подгруппе или функции, отправляется ссылка на фактическую переменную. Любые изменения, внесенные в копию переменной, будут отражены в исходном аргументе.
link: / files-workbook-and-worksheets-in-vba-delete-sheet-without-confirm-prompts-using-vba-in-microsoft-excel [Удалять листы без запросов на подтверждение с помощью VBA в Microsoft Excel]
| Поскольку вы удаляете листы с помощью VBA, вы знаете, что делаете. Вы хотите, чтобы Excel не показывал это предупреждение и не удалял этот проклятый лист.
link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Добавить и сохранить новую книгу с помощью VBA в Microsoft Excel 2016] | В этом коде мы сначала создали ссылку на объект книги. А затем мы инициализировали его новым объектом книги. Преимущество этого подхода заключается в том, что вы можете легко выполнять операции с этой новой книгой. Например, сохранение, закрытие, удаление и т. Д. Display A Message On Строка состояния Excel VBA Строку состояния в Excel можно использовать в качестве монитора кода. Когда ваш код VBA длинный и вы выполняете несколько задач с помощью VBA, вы часто отключаете обновление экрана, чтобы не видеть мерцающую ссылку на экране: / general-themes-in-vba-turn-off-warning-messages- using-vba-in-microsoft-excel [Отключить предупреждающие сообщения с помощью VBA в Microsoft Excel 2016] | Этот код не только отключает предупреждения VBA, но также увеличивает эффективность кода по времени. Посмотрим как.
Популярные статьи:
link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-вашу-продуктивность [50 комбинаций клавиш Excel для повышения вашей продуктивности]
| Выполняйте свою задачу быстрее. Эти 50 ярлыков заставят вас работать в Excel еще быстрее.
link: / формулы-и-функции-введение-функции-vlookup [Функция ВПР в Excel]
| Это одна из наиболее часто используемых и популярных функций Excel, которая используется для поиска значений из разных диапазонов и листов. link: / tips-countif-in-microsoft-excel [COUNTIF в Excel 2016]
| Подсчитайте значения с условиями, используя эту удивительную функцию. Вам не нужно фильтровать данные для подсчета определенного значения.
Функция Countif важна для подготовки вашей приборной панели.
link: / excel-formula-and-function-excel-sumif-function [Как использовать функцию СУММЕСЛИ в Excel]
| Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.