Jak zadeklarować zmienną globalną w VBA?

Napisałem następujący kod:

Function find_results_idle()

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

I dostaję komunikat o błędzie:

"invalid attribute in Sub or Function"

Czy wiesz co zrobiłem źle?

Próbowałem użyć Global zamiast Public, ale dostałem ten sam problem.

Próbowałem zadeklarować samą funkcję jako Public, ale to też nic nie dało.

Co muszę zrobić, aby utworzyć zmienną globalną?

Rozwiązanie

Musisz zadeklarować zmienne poza funkcją:

Public iRaw As Integer
Public iColumn As Integer

Function find_results_idle()
    iRaw = 1
    iColumn = 1
Komentarze (0)

To jest pytanie o zakres.

Jeśli chcesz, aby zmienne trwały tylko przez cały czas trwania funkcji, użyj Dim (skrót od Dimension) wewnątrz funkcji lub sub, aby zadeklarować zmienne:

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

Zmienna globalna (jak zauważył SLaks) jest deklarowana poza funkcją za pomocą słowa kluczowego Public. Zmienna ta będzie dostępna przez cały czas działania aplikacji. W przypadku Excela oznacza to, że zmienne będą dostępne tak długo, jak długo otwarty jest ten konkretny skoroszyt Excela.

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.

Możesz również mieć zmienne, które są dostępne tylko w obrębie konkretnego modułu (lub klasy) poprzez zadeklarowanie ich ze słowem kluczowym Private.

Jeśli budujesz dużą aplikację i czujesz potrzebę używania zmiennych globalnych, polecam stworzenie osobnego modułu tylko dla zmiennych globalnych. Powinno to pomóc Ci śledzić je w jednym miejscu.

Komentarze (3)

Aby użyć zmiennych globalnych, wstaw nowy moduł z interfejsu projektu VBA i zadeklaruj zmienne używając Global.

Global iRaw As Integer
Global iColumn As Integer
Komentarze (1)