Как да декларирам глобална променлива във VBA?

Написах следния код:

Function find_results_idle()

    Public iRaw As Integer
    Public iColumn As Integer
    iRaw = 1
    iColumn = 1

И получавам съобщението за грешка:

"invalid attribute in Sub or Function"

Знаете ли какво съм направил погрешно?

Опитах се да използвам Global вместо Public, но се получи същият проблем.

Опитах се да декларирам самата функция като Public, но и това не помогна.

Какво трябва да направя, за да създам глобалната променлива?

Решение

Трябва да декларирате променливите извън функцията:

Public iRaw As Integer
Public iColumn As Integer

Function find_results_idle()
    iRaw = 1
    iColumn = 1
Коментари (0)

Това е въпрос за scope.

Ако искате променливите да продължат само през целия живот на функцията, използвайте Dim (съкращение от Dimension) вътре във функцията или подфункцията, за да декларирате променливите:

Function AddSomeNumbers() As Integer
    Dim intA As Integer
    Dim intB As Integer
    intA = 2
    intB = 3
    AddSomeNumbers = intA + intB
End Function
'intA and intB are no longer available since the function ended

Една глобална променлива (както посочи SLaks) се декларира извън функцията, като се използва ключовата дума Public. Тази променлива ще бъде достъпна през целия живот на вашето работещо приложение. В случая на Excel това означава, че променливите ще бъдат достъпни, докато е отворена конкретната работна книга на Excel.

Public intA As Integer
Private intB As Integer

Function AddSomeNumbers() As Integer
    intA = 2
    intB = 3
    AddSomeNumbers = intA + intB
End Function
'intA and intB are still both available.  However, because intA is public,  '
'it can also be referenced from code in other modules. Because intB is private,'
'it will be hidden from other modules.

Можете също така да имате променливи, които са достъпни само в рамките на определен модул (или клас), като ги декларирате с ключовата дума Private.

Ако изграждате голямо приложение и чувствате необходимост да използвате глобални променливи, бих ви препоръчал да създадете отделен модул само за вашите глобални променливи. Това би ви помогнало да ги следите на едно място.

Коментари (3)

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

Global iRaw As Integer
Global iColumn As Integer
Коментари (1)