Vba excel глобальные переменные

Канал в Telegram

Вы здесь

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

Давайте теперь вкратце разберем какие области действия (видимости) переменных существуют в VBA.
Область действия (видимости) переменной определяет, в каких модулях и процедурах она доступна и может использоваться. В VBA существуют следующие области действия переменных:

  • Процедура (Функция) – переменная действует только в процедуре или функции. Описание переменной начинается с ключевого слова Dim или Static непосредственно в самой процедуре или функции.
  • Модуль – переменная действует только в рамках текущего модуля (в котором описана) и доступна для всех процедур и функций, описанных в этом модуле. Переменная объявляется перед первой процедурой или функцией в модуле (если включено обязательное объявление переменных, то после ключевых слов “Option Explicit“). Описание переменной начинается с ключевого слова Dim или Private.
  • Все модули – переменная действует во всех модулях и доступна для любой процедуры и функции всего проекта. Описание переменной может быть в любом модуле проекта и начинаться перед первой процедурой или функцией с ключевого слова Public.

Локальные переменные – это переменные, объявленные в процедуре или функции. Локальные переменные могут использоваться только в процедуре (функции) в которой они объявлены. После завершения выполнения процедуры (функции) переменная освобождается из памяти.

Примечание: Если есть необходимость сохранить результат переменной, то можно воспользоваться “модульной переменной” или глобальной, передав в нее значение. Но в VBA доступен еще один вариант, переменная Static. Переменные, объявленные после ключевого слова Static, сохраняют свое значение по завершении работы процедуры или функции. Только будьте внимательны т.к. если упустить тот момент, что переменные Static сохраняют свое значение, можно получить неверные результаты выполнения процедур и ломать долго голову, в чем причина. Переменные Static объявляются только в процедурах и функциях!

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

Ну и теперь примеры описания глобальных, локальных переменных:

Option Explicit
‘Переменные a и x доступны для любой процедуры или функции
‘текущего модуля
Dim a as long
Private x as string

‘Переменная Y является глобальной и доступна любой процедуре проекта
Public Y as integer

Sub Test ()
‘а1 является локальной переменной
‘и доступна в пределах процедуры Test
Dim a1 as long

‘XY -статическая переменная, доступная в пределах
‘процедуры Test, но сохраняющая результат по ее завершении.
Static XY as string
.
end sub

Источник: www.programm-school.ru

глобальна переменная в excel

Visual Basic
16.02.2013, 22:00

Excel 2003. Глобальная переменная = 0 в Worksheet_SelectionChange
Excel 2003. в Модуле1 объявлена глобальная переменная Public qqq As Byte и в дальнейшем ей.

Переменная в качестве последней строки диапазона в Excel
Добрый день Есть код. Нужно в последнюю строку диапазона в методе Hyperlnking вместо указанного.

Как проверить открыта ли книга если ей задана переменная (excel 2010)
При заданном условии (А, В, С) должна открыться определенная книга, задача проверить открыта ли она.

16.02.2013, 22:11 2

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

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

17.02.2013, 06:55 3

Решение

– так переменную Public там и не объявишь. Ошибка будет.

Есть еще такой стиль объявления (устаревший, но работающий):

Visual Basic
17.02.2013, 10:33 4

Решение

Visual Basic
17.10.2013, 16:45 5

делаю макрос собирающий статистику по листам книги
и формирующий отчет на своем листе в этой же книге(этот лист не создаю, а каждый раз очищаю).
как укоротить вот такую запись:
RLN = “doc1”
ActiveWorkbook.Worksheets(RLN). – каждый раз при обращении к листу-отчету

пытаюсь объявить переменную лист:
Dim ReportList as WorkSheet
потом инициализирую:
RLN = “doc1”
ReprtList=ActiveWorkbook.Worksheets(RLN)

получаю рантайм ошибку 91. Как это по человечески сделать?

17.10.2013, 16:50 6
Visual Basic
17.10.2013, 16:59 7

17.10.2013, 17:04 8
17.10.2013, 17:04
17.10.2013, 17:04

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

Переменная=Документ.имя. Сделать выборку всех документов с именем Переменная
Привет всем. У меня есть проблема и варианты решения, но они не работают. Проблема вот такая.

Проблема с Adodc: ‘Переменная объекта или переменная блока With не задана’
В свойствах самого контрола (MS ADO Data Control) проверка подключения к атблице (подключаюсь через.

Модульная переменная или блочная статическая переменная: что лучше
Переменная (тип String) нужна на всем протяжении работы программы. Нужен совет опытных – что.

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
Исходники: /* main.cpp */ #include “hider.h” int main(void) < return 0; >/* foo.cpp */

Источник: www.cyberforum.ru

Vba excel глобальные переменные

Модератор форума: _Boroda_, Manyasha, SLAVICK, китин
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объявить глобальную переменную, для всей книге (Макросы/Sub)

Объявить глобальную переменную, для всей книге

lopuxi Дата: Пятница, 23.10.2015, 16:24 | Сообщение № 1

Всем привет.
Поискал по интернету, но не смог понять, как создать глобальную переменную? Такую переменную, которая будет читаться в любом месте программы, открытой Excel книге?

Я попытался создать переменную в “ЭтаКнига”
Workbook и open
Option Explicit

200?’200px’:”+(this.scrollHeight+5)+’px’);”>
Public Version As String

Public Sub Workbook_Open()
Version = “Глобальная переменная”
End Sub

Но данный способ не работает. Когда я обращаюсь из модуля или формы к Version, то он пишет ошибку и говорит, переменная не объявлена.

Мне бы очень помогла такая переменная, которая бы обозначалась еще при запуске книги и далее, она бы сопровождала все действия пользователя.
Не зависимо открывает он форму, меняет лист или добавляет и т.д. Данная переменная всегда доступна для процессов в коде.

Всем привет.
Поискал по интернету, но не смог понять, как создать глобальную переменную? Такую переменную, которая будет читаться в любом месте программы, открытой Excel книге?

Я попытался создать переменную в “ЭтаКнига”
Workbook и open
Option Explicit

200?’200px’:”+(this.scrollHeight+5)+’px’);”>
Public Version As String

Public Sub Workbook_Open()
Version = “Глобальная переменная”
End Sub

Но данный способ не работает. Когда я обращаюсь из модуля или формы к Version, то он пишет ошибку и говорит, переменная не объявлена.

Мне бы очень помогла такая переменная, которая бы обозначалась еще при запуске книги и далее, она бы сопровождала все действия пользователя.
Не зависимо открывает он форму, меняет лист или добавляет и т.д. Данная переменная всегда доступна для процессов в коде.

О_о . и так можно было?

Ответить

Сообщение Всем привет.
Поискал по интернету, но не смог понять, как создать глобальную переменную? Такую переменную, которая будет читаться в любом месте программы, открытой Excel книге?

Я попытался создать переменную в “ЭтаКнига”
Workbook и open
Option Explicit

200?’200px’:”+(this.scrollHeight+5)+’px’);”>
Public Version As String

Public Sub Workbook_Open()
Version = “Глобальная переменная”
End Sub

Но данный способ не работает. Когда я обращаюсь из модуля или формы к Version, то он пишет ошибку и говорит, переменная не объявлена.

Мне бы очень помогла такая переменная, которая бы обозначалась еще при запуске книги и далее, она бы сопровождала все действия пользователя.
Не зависимо открывает он форму, меняет лист или добавляет и т.д. Данная переменная всегда доступна для процессов в коде.

Спасибо. Автор – lopuxi
Дата добавления – 23.10.2015 в 16:24

Источник: www.excelworld.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

В самом начале мы объявляем глобальную переменную 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, Public и Static

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

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

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

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

Спасибо за внимание. Автор блога Владимир Баталий

Источник: scriptcoding.ru

VBA переменные

пример

Объем

Переменная может быть объявлена ​​(при увеличении уровня видимости):

  • На уровне процедуры, используя ключевое слово Dim в любой процедуре; локальная переменная .
  • На уровне модуля, используя ключевое слово Private в модуле любого типа; частное поле .
  • На уровне экземпляра используйте ключевое слово Friend в модуле любого типа; поле друга .
  • На уровне экземпляра, используя ключевое слово Public в модуле класса любого типа; публичное поле .
  • Глобально, используя ключевое слово Public в стандартном модуле ; глобальная переменная .

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

Дополнительную информацию см. В разделе Модификаторы доступа .

Местные переменные

Используйте ключевое слово Dim чтобы объявить локальную переменную :

Параметр [As Type] синтаксиса объявления является необязательным. Когда указано, он устанавливает тип данных переменной, который определяет, сколько памяти будет выделено этой переменной. Это объявляет переменную String :

Если тип не указан, тип неявно Variant :

Синтаксис VBA также поддерживает объявление нескольких переменных в одном выражении:

Обратите внимание, что [As Type] должен быть указан для каждой переменной (кроме «Variant»). Это относительно распространенная ловушка:

Статические переменные

Локальные переменные также могут быть Static . В VBA ключевое слово Static используется для того, чтобы переменная «запомнила» значение, которое она имела, в последний раз, когда была вызвана процедура:

Здесь коллекция values объявляется как Static локальная; потому что это переменная объекта , она инициализируется Nothing . Условие, следующее за объявлением, проверяет, была ли ссылка на объект Set раньше – если она выполняется в первый раз, процедура инициализируется. DoSomethingElse может добавлять или удалять элементы, и они все равно будут в коллекции в следующий раз, когда вызывается DoSomething .

альтернатива

Ключевое слово VBA Static легко может быть неправильно понято – особенно опытные программисты, которые обычно работают на других языках. На многих языках static используется для того, чтобы член класса (field, property, method, . ) принадлежал типу, а не экземпляру . Код в static контексте не может ссылаться на код в контексте экземпляра . Ключевое слово VBA Static означает что-то совершенно другое.

Часто Static локальный объект может быть также реализован как Private переменная (поле) на уровне модуля, однако это бросает вызов принципу, с помощью которого переменная должна быть объявлена ​​с наименьшей возможной областью; доверяйте своим инстинктам, используйте то, что вы предпочитаете – оба будут работать . но использование Static без понимания того, что он делает, может привести к интересным ошибкам.

Дим против частного

Ключевое слово Dim является законным на уровне процедур и модулей; его использование на уровне модуля эквивалентно использованию ключевого слова Private :

Ключевое слово Private доступно только на уровне модуля; это вызывает резервирование Dim для локальных переменных и объявление переменных модуля с помощью Private , особенно с контрастным ключевым словом Public которое должно быть использовано для объявления публичного участника. Также можно использовать Dim везде – то , что имеет значение консистенция:

  • DO использовать Private чтобы объявить переменную уровня модуля.
  • DO используйте Dim чтобы объявить локальную переменную.
  • НЕ используйте Dim чтобы объявить переменную уровня модуля.
  • DO используйте Dim чтобы объявить что-либо частным / местным.
  • НЕ используйте Private чтобы объявить переменную уровня модуля.
  • ИЗБЕГАЙТЕ объявление Public полей. *

* В общем, следует избегать объявления Public или Global полей.

Переменная, объявленная на уровне модуля, в разделе объявлений в верхней части тела модуля является полем . Public поле, объявленное в стандартном модуле, является глобальной переменной :

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

Чтобы сделать переменную global / public, но только видимую изнутри проекта, используйте модификатор Friend :

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

Поля друзей недоступны в стандартных модулях.

Поля экземпляра

Переменная, объявленная на уровне модуля, в разделе объявлений в верхней части тела модуля класса (включая ThisWorkbook , ThisDocument , Worksheet , UserForm и модулях классов ) является полем экземпляра : оно существует только до тех пор, пока существует экземпляр класс вокруг.

Инкапсулирующие поля

Данные Instance часто хранится Private и дублирован инкапсулируются. Закрытое поле можно открыть с помощью процедуры Property . Чтобы публично публиковать приватную переменную, не предоставляя доступ к записи вызывающему, модуль класса (или стандартный модуль) реализует элемент « Property Get :

Сам класс может изменить инкапсулированное значение, но вызывающий код может получить доступ только к Public членам (и членам Friend , если вызывающий объект находится в одном проекте).

Чтобы разрешить вызывающему абоненту:

  • Инкапсулированное значение , модуль предоставляет элемент Property Let .
  • Ссылка на инкапсулированные объекты , модуль предоставляет член Property Set .

Источник: riptutorial.com

Как объявить глобальную переменную в VBA?

81 Nimrod [2010-04-27 17:41:00]

Я написал следующий код:

И я получаю сообщение об ошибке:

“недопустимый атрибут в Sub или Function”

Знаете ли вы, что я сделал не так?

Я попытался использовать Global вместо Public , но получил ту же проблему.

Я попытался объявить эту функцию как “Public”, но это тоже не помогло.

Что мне нужно сделать для создания глобальной переменной?

scope vba excel-vba global-variables

6 ответов

126 Решение SLaks [2010-04-27 17:42:00]

Вам нужно объявить переменные вне функции:

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

Глобальная переменная (как указывал SLaks) объявляется вне функции, используя ключевое слово Public . Эта переменная будет доступна в течение всего срока действия вашего приложения. В случае с Excel это означает, что переменные будут доступны до тех пор, пока эта книга Excel не будет открыта.

Вы также можете иметь переменные, которые доступны только в определенном модуле (или классе), объявив их с ключевым словом Private .

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

28 YOU [2010-04-27 17:45:00]

Чтобы использовать глобальные переменные, вставьте новый модуль из пользовательского интерфейса проекта VBA и объявите переменные с помощью Global

13 Zai [2010-04-28 22:54:00]

Если эта функция находится в модуле/классе, вы можете просто написать их вне функции, поэтому она имеет Global Scope . Глобальная область видимости означает, что к переменной может быть обращена другая функция в том же модуле/классе (если вы используете dim как выражение объявления, используйте public , если вы хотите, чтобы переменные могли получить доступ ко всем функциям во всех модулях):

8 FCastro [2017-02-08 21:57:00]

Вопрос действительно о сфере применения, как сказал другой парень.

Вкратце рассмотрим этот “модуль”:

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

Две другие быстрые вещи:

  • Быть организованным при использовании переменных уровня рабочей книги, поэтому ваш код не запутывается. Предпочитают Функции (с соответствующими типами данных) или передающие аргументы ByRef.
  • Если вы хотите, чтобы переменная сохраняла свое значение между вызовами, вы можете использовать оператор Статический.

Создать общедоступное целое в общей декларации.

Затем в вашей функции вы можете увеличить ее значение каждый раз. См. Пример (функция сохранения прикреплений электронной почты как CSV).

Источник: qarchive.ru

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

Adblock
detector