Я написал следующий код:
Function find_results_idle()
Public iRaw As Integer
Public iColumn As Integer
iRaw = 1
iColumn = 1
И я получаю сообщение об ошибке:
"недопустимый атрибут в подпрограмме или функции"
Вы знаете, что я сделал не так?
Я пытался использовать Global
вместо Public
, но возникла та же проблема.
Я попытался объявить саму функцию как Public, но это тоже не помогло.
Что мне нужно сделать, чтобы создать глобальную переменную?
excel
vba
scope
global-variables
Нимрод
источник
источник
Function
/Sub
, а не только снаружи: «Переменные уровня модуля могут быть объявлены с помощью оператора Dim или Private в верхней части модуля над определением первой процедуры». (из Объем переменных в Visual Basic для приложений )Это вопрос об объеме .
Если вы хотите, чтобы переменные прослужили только время жизни функции, используйте
Dim
(сокращение от Dimension ) внутри функции или подпрограммы для объявления переменных:Глобальная переменная (как SLaks указал) объявлена вне функции , используя
Public
ключевое слово. Эта переменная будет доступна в течение всего срока службы вашего запущенного приложения. В случае Excel это означает, что переменные будут доступны, пока открыта конкретная книга Excel.Вы также можете иметь переменные, которые доступны только в определенном модуле (или классе), объявив их с помощью
Private
ключевого слова.Если вы создаете большое приложение и чувствуете необходимость использовать глобальные переменные, я бы рекомендовал создать отдельный модуль только для ваших глобальных переменных. Это должно помочь вам отслеживать их в одном месте.
источник
Чтобы использовать глобальные переменные, вставьте новый модуль из пользовательского интерфейса проекта VBA и объявите переменные, используя
Global
источник
Public
сGlobal
ключевым словом vs ?Public
иGlobal
почти идентичны по своим функциям ..Global
исходит из более старых версий VB»Вопрос действительно в размахе, как выразился другой парень.
Короче говоря, рассмотрим этот «модуль»:
Вы можете проверить эту ссылку MSDN для получения дополнительной информации об объявлении переменных и этом другом вопросе о переполнении стека. о для получения дополнительной информации о том, как переменные выходят за рамки.
Еще две быстрые вещи:
источник
Если эта функция находится в модуле / классе, вы можете просто написать их вне функции, так что она есть
Global Scope
. Глобальная область действия означает, что к переменной может получить доступ другая функция в том же модуле / классе (если вы используетеdim
оператор объявления, используйте,public
если хотите, чтобы переменные были доступны для всех функций во всех модулях):источник
Создайте публичное целое число в Общей декларации.
Затем в своей функции вы можете каждый раз увеличивать ее значение. См. Пример (функция сохранения вложений электронного письма в формате CSV).
источник
Хороший способ создания общедоступных / глобальных переменных - рассматривать форму как объект класса, объявлять свойства и использовать Public Property Get [переменная] для доступа к свойству / методу. Также вам может потребоваться указать или передать ссылку на созданный модуль формы. Вы получите ошибки, если вызовете методы закрытых форм / отчетов.
Пример: передать Me.Form.Module.Parent в подпрограмму / функцию не внутри формы.
Таким образом, в другом модуле вы сможете получить доступ:
Если вы используете Late Binding, как я, всегда проверяю значения Null и объекты, которые Nothing, прежде чем пытаться выполнить какую-либо обработку.
источник
Также вы можете использовать -
Протестировано в офисе 2010
источник