Разное

Объявление переменных в vba: Как объявить переменную? Объявление переменных в VBA

VBA Excel. Глобальная переменная

Глобальная переменная в проекте VBA Excel. Объявление глобальной переменной в модуле проекта VBA и обращение к ней из других модулей того же проекта.

Объявление глобальной переменной

Глобальная переменная — это переменная, которая объявлена в одном из модулей проекта VBA и доступна для использования во всех остальных модулях.

Чтобы переменная стала глобальной, она должна быть объявлена в начале модуля перед первой процедурой (раздел Declarations) с помощью оператора Public. Этот способ работает во всех модулях проекта VBA Excel.

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

Пример объявления глобальных переменных в любом модуле проекта VBA:

Public myGlobVar1 ‘по умолчанию — As Variant

Public myGlobVar2 As String

Public myGlobVar3 As Double

Объявление глобальных переменных

Обращение к глобальной переменной

Примеры обращения к глобальной переменной, объявленной в разных типах модулей проекта VBA Excel. Актуально для обращения из модуля любого типа данного проекта.

Переменная в стандартном модуле

Если глобальная переменная (myGlobVar) объявлена в стандартном модуле (Module1) с уникальным именем, не повторяющимся в других модулях, к ней можно обращаться из других модулей по одному имени (в примере — из модуля формы):

Private Sub CommandButton1_Click()

    myGlobVar = «Глобальная переменная»

    TextBox1.Text = myGlobVar

End Sub

Стандартное обращение с указанием имени модуля (Module1), в котором объявлена глобальная переменная (myGlobVar):

Private Sub CommandButton1_Click()

    Module1.myGlobVar = «Глобальная переменная»

    TextBox1.Text = Module1.myGlobVar

End Sub

Переменная в модуле книги

Глобальная переменная (myGlobVar), объявленная в модуле книги, доступна при обращении к ней из других модулей с помощью следующего кода VBA Excel:

Sub Primer1()

    ThisWorkbook. myGlobVar = «Глобальная переменная»

    MsgBox ThisWorkbook.myGlobVar

End Sub

Переменная в модуле листа

Обращение к глобальной переменной (myGlobVar), объявленной в модуле рабочего листа (Лист1), из других модулей по имени листа (в проводнике проекта находится без скобок слева от имени ярлыка):

Sub Primer2()

    Лист1.myGlobVar = «Глобальная переменная»

    MsgBox Лист1.myGlobVar

End Sub

По имени ярлыка (в проводнике проекта находится в полукруглых скобках справа от имени листа):

Sub Primer3()

    Worksheets(«Лист1»).myGlobVar = «Глобальная переменная»

    MsgBox Worksheets(«Лист1»).myGlobVar

End Sub

Переменная в модуле формы

Глобальная переменная (myGlobVar), объявленная в модуле формы (UserForm1), доступна при обращении к ней из других модулей с помощью следующего кода VBA Excel:

Sub Primer4()

    UserForm1. myGlobVar = «Глобальная переменная»

    MsgBox UserForm1.myGlobVar

End Sub

Переменная в личной книге макросов

Обращение к глобальной переменной (myGlobVar), объявленной в модуле ЭтаКнига проекта VBAProject (PERSONAL.XLSB) из модуля проекта VBA обычной книги Excel:

Sub Primer5()

    Workbooks(«PERSONAL.XLSB»).myGlobVar = «Глобальная переменная»

    MsgBox Workbooks(«PERSONAL.XLSB»).myGlobVar

End Sub

Мне не удалось получить доступ из проекта VBA текущей книги Excel к глобальной переменной, объявленной в стандартном модуле личной книги макросов.


Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Урок 5 по VBA — Объявление локальных и глобальных переменных

Автор Coding На чтение 7 мин Просмотров 1.1к. Опубликовано

В данной статье мы рассмотрим работу с локальными и глобальными переменными VBA языка, а именно: как ведут себя переменные, объявленные в блоке модуля и в блоке отдельной процедуры; познакомимся с ключевыми словами Public, Private и Static; Определим логику назначении типов данных при объявлении нескольких переменных в одной строке; напишем парочку примеров.

В прошлых статьях мы кратко рассмотрели переменные и типы данных, теперь настало время более подробно вникнуть во все тонкости…

Содержание

  1. Объявление нескольких переменных VBA
  2. Объявление переменных в VBA локальной и глобальной видимости
  3. Ключевые слова Private, Public и Static

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

Рассмотрим такой пример: надо объявить три переменные разного типа, например, Byte, String и Long, это может выглядеть так:

dim A as Byte, B as String, C as Long

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

dim A, B, C as Long

Тут A и В будут типа Variant и только C – Long. Что бы все правильно сработало, нам нужно каждой переменной назначить заданный тип:

dim A as Long, B as Long, C as Long

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

Если переменная VBA объявлена в начале модуля, то она сохраняется в памяти до тех пор, пока работает макрос, если объявление происходит в теле процедуры, то переменная будет удалена из памяти сразу, после выполнения блока кода заданной процедуры. Добавьте в редакторе Visual Basic новую форму и модуль.

Параметры формы: разместите на форме три компонента Label и три кнопки, как показано на рисунке. Имя формы (свойство Name) – VariableForm, имя модуля – VariableModule.

В редакторе кода для модуля пропишите:

Sub VariableModule()
    VariableForm.Show
End Sub

Тут мы просто определяем, что при запуске макроса нужно запустить форму.

В редакторе кода для формы пропишите:

'**************************************************
' Объявление локальных и глобальных переменных в VBA
'**************************************************
 
' Включаем проверку переменных VBA
Option Explicit
 
' Глобальная переменная
Dim GVar As Integer
'Нельзя присвоить значение вне процедуры!!!
'GVar = 10
Sub GetGlobal()
    ' Увеличиваем значение на 5
    GVar = GVar + 5
    Label1.
Caption = "Глобальное значение " & GVar End Sub Sub GetLocal_1() Dim LVar As Integer ' Увеличиваем значение на 2 LVar = LVar + 2 Label2.Caption = "Локальное значение " & LVar End Sub Sub GetLocal_2() Dim LVar As Integer ' Увеличиваем значение на 3 LVar = LVar + 3 Label3.Caption = "Локальное значение " & LVar End Sub   Private Sub CommandButton1_Click() Call GetGlobal End Sub   Private Sub CommandButton2_Click() Call GetLocal_1 End Sub   Private Sub CommandButton3_Click() Call GetLocal_2 End Sub   Private Sub UserForm_Click()   End Sub   Private Sub UserForm_Initialize() ' настройка первого текстового поля Label1.FontSize = 12 Label1.ForeColor = &HFF0000 Call GetGlobal   ' настройка второго текстового поля Label2.FontSize = 12 Label2.
ForeColor = &H6400 Call GetLocal_1   ' настройка третьего текстового поля Label3.FontSize = 12 Label3.ForeColor = &HFF Call GetLocal_2 End Sub

В самом начале мы объявляем глобальную переменную VBA – GVar типа Integer, в комментарии указано, что вне процедуры присвоить значение переменной нельзя. Далее следуют три процедуры, в первой процедуре происходит увеличение значение глобальной GVar на 5, результат будет записываться в свойство Caption первого компонента Label. Вторя и третья процедуры производят аналогичные действия, только для объявленных в них локальных переменных VBA, LVar, происходит увеличение значения на 2 и на 3, соответственно. События Click (нажатие кнопки мыши) для кнопок будет вызывать заданные процедуры.

При запуске макроса в полях будут отображаться значения 5, 2 и 3. При нажатии на “Кнопка 1” будет происходить вызов процедуры GetGlobal и увеличение значения переменной GVar на 5. Для “Кнопка 2” и “Кнопка 3” будут вызываться процедуры GetLocal_1 и GetLocal_2, однако ничего увеличиваться не будет, так как переменные LVar являются локальными и при каждом вызове заданных процедур их значение будет обнуляться.

Private – аналогично ключевому слову Dim, использование Private вместо Dim актуально в том случае, если вы хотите, что бы данное ключевое слово напоминало о том, что переменная доступна только в пределах данной процедуры или функции.

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

Static – данное ключевое слово актуально использовать вместо Dim тогда, когда нужно сохранять значение переменной в теле процедуры. Для примера, мы перепишем предыдущий код таким образом:

Sub GetLocal_1()
Static LVar As Integer
    ' Увеличиваем значение на 2
    LVar = LVar + 2
    Label2.Caption = "Локальное значение " & LVar
End Sub
Sub GetLocal_2()
Static LVar As Integer
    ' Увеличиваем значение на 3
    LVar = LVar + 3
    Label3.Caption = "Локальное значение " & LVar
End Sub

Мы просто изменили ключевое слово Dim на Static, и теперь переменные LVar не будут удаляться из памяти после выполнения процедур. Объявление переменных в VBA. Обратите внимание, что мы объявили переменные с одним именем, это можно, так как они находятся в отдельных процедурах.

Я получаю сообщение об ошибке при объявлении переменных в VBA

спросил

Изменено 2 года, 1 месяц назад

Просмотрено 428 раз

Я пытаюсь объявить две переменные со значениями каждой из них, но возникает ошибка «Ожидается объявление» в строках, где я присваиваю значения c и e.

Почему это происходит ? Я неправильно объявляю переменные?

 Dim c как целое число
   Dim e как целое число
   с = 0
   е = 0
 

Большое спасибо за отзыв

  • vba
  • объявление переменной
4

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

 Dim c как целое число
Dim e как целое число
Подмоя процедура()
   c = 0 'значение равно нулю по умолчанию
   е = 0
Конец сабвуфера
 

и это тоже правильно.

 Подпрограмма МояПроцедура()
   Dim c как целое число
   Dim e как целое число
   c = 0 'значение равно нулю по умолчанию
   е = 0
Конец сабвуфера
 

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

1

Поместите переменные в отдельный модуль кода и объявите их как Public :

 Public c как целое число
Public e как целое число
 

По умолчанию они будут иметь значение 0 (ноль).

Теперь вы можете назначать им значения из любой формы или модуля кода.

2

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

Объявление переменных

Переменная — это именованное место хранения, которое может содержать данные, которые можно изменить во время выполнения программы. Каждая переменная имеет имя, которое однозначно идентифицирует ее в пределах своей области. Дав вашей переменной подходящее имя, вы сделаете программу более понятной. Кроме того, имя должно соответствовать некоторым простым правилам именования VBA. При объявлении переменной указывать тип данных рекомендуется, но не обязательно. После объявления переменная доступна для использования, прежде всего для присвоения значений.

  • Объявление переменных в теле процедуры
  • Объявление констант
  • Указание типа данных

Объявление переменных в теле процедуры

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

Объявление переменной находится где-то между началом и концом процедуры после ключевого слова Sub или Function, как показано ниже. Переменная должна быть объявлена ​​до того, как она будет использована (например, присвоить значение). Обычно переменная располагается либо вверху тела процедуры, либо рядом с тем местом, где она используется. Переменная освобождается из памяти после выполнения процедуры. И при повторном запуске он получит новое значение.

 Подпрограмма МояПроцедура()
    Dim intAge как целое число
    возраст = 24
    ....
    Dim intCounter как целое число
    Для intCounter = 1 в intAge
        ....
    Следующий
Конец суб 

Явный параметр

В окне кодирования вы часто видите объявление «Option Explicit» вверху. При указании Option Explicit компилятор VBA требует, чтобы вы объявили все переменные, прежде чем их можно будет использовать. Если теперь вы попытаетесь использовать необъявленное имя переменной, во время компиляции произойдет ошибка. Это полезно, потому что предотвращает такие ошибки, как неправильный ввод имени существующей переменной и поэтому иметь 2 разные переменные, не зная об этом.

Совет: В меню VB: Сервис » Параметры… — отметьте «Требовать объявление переменной», чтобы «Явный параметр» автоматически добавлялся к каждому новому модулю.

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

Константы имеют фиксированные значения.

 Const mintDaysInYear как целое число = 365 

Использование констант в вашем коде вместо прямого использования их значений имеет несколько преимуществ:

  • отсутствие необходимости изменять значение в нескольких местах, если это необходимо,
  • название делает понятным назначение значения и тем самым предотвращает ошибки. Одно и то же значение в разных местах может фактически играть разные роли.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *