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

В Excel VBA есть три типа спецификаторов области:

  1. Уровень процедуры. Частный — уровень модуля. Общедоступный — Уровень проекта === Уровень переменной 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, а сумма подпрограммы не имеет к ним доступа.

Следовательно, саб выдает ошибку.

image

Частная переменная 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 выдает ошибку.

image

Но если я попытаюсь вызвать сумму подпрограммы из модуля 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] | Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.