Wprowadzenie

W tym artykule opisano, jak używać zmiennych w Microsoft Excel pod procedurach w programie Microsoft Visual Basic for Applications.

Więcej informacji

Zmienne w podemenu

Zaawansowaną funkcją języków programowania jest możliwość przechowywania danych w zmiennej, dzięki czemu można używać zawartości zmiennej lub zmieniać ją w dalszej części procedury. W tym dokumencie omówiono następujące użycie zmiennych w programie Visual Basic:

  • Deklarowane są zmienne.

  • Procedury i projekty, w których może być zmienna.

  • Okres istnienia zmiennej.

Deklarowanie zmiennej w makrze

Najprostszym sposobem deklarowania zmiennej w makrze jest użycie instrukcji Dim. Poniższy wiersz deklaruje dwie zmienne, jako liczby całkowite:

    Dim x As Integer, y As Integer

Jeśli wartości x i y są określone jako liczby całkowite, informujesz program Visual Basic o ustawienie wystarczającej ilości pamięci dla zmiennej całkowitej (2 bajty każdy dla wartości x i y) oraz że informacje przechowywane w postaci x lub y są liczbą całkowitą z przedziale od -32768 do 32767.

UWAGA: Jeśli deklaruje się więcej niż jedną zmienną za pomocą jednej instrukcji Dim, należy określić typ danych dla każdej zmiennej.

Jeśli nie określisz typu danych dla każdej zmiennej, tak jak w poniższym Visual Basic danych, tylko zmienna y jest ustawiana jako zmienna całkowita. Zmienna x będzie typem wariantu:

    Dim x, y As Integer

Aby uzyskać więcej informacji, zobacz Typ danych Wariant poniżej.
 

Aby wykonać test zmienny, wykonaj następujące czynności:

  1. Zapisz i zamknij wszystkie otwarte skoroszyty, a następnie otwórz nowy skoroszyt.

  2. Uruchom Edytor Visual Basic (naciśnij klawisze ALT+F11).

  3. W menu Wstaw kliknij polecenie Moduł.

  4. Wpisz następujący kod:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "wartość x to " & x & _
        Chr(13) &"wartość y to " & y
    End Sub

  5. Uruchom Variable_Test makra. Zostanie wyświetlony następujący komunikat:

    the value of x is 10
    the value of y is 100

  6. Kliknij przycisk OK.

  7. W makrze Variable_Test zmień następujący wiersz:

    x = 10

  8. do:

    x = "error"

  9. Uruchom Variable_Test makra.

Zostanie wyświetlony błąd czasu uruchomienia, ponieważ "błąd" nie jest liczbą całkowitą i próbujesz przypisać tę wartość ciągu do zmiennej całkowitej x.
 

Podsumowanie typu danych

Są to najczęściej spotykane typy danych zmiennych:

typy danych zmiennych

typ danych Wariant

Jeśli typ danych nie zostanie określony podczas deklarowania zmiennej lub zmienna w ogóle nie zostanie zadeklarowana, program Visual Basic automatycznie określa typ danych wariant dla tej zmiennej. Poniżej przedstawiono zalety zmiennych deklarowanych jako ten typ danych:

  • Zmienne mogą zawierać ciąg, datę, czas, wartość logiczną lub wartości liczbowe.

  • Zmienne mogą automatycznie konwertować zawarte w nich wartości.

Wadą jest to, że zmienne wariantowe wymagają co najmniej 16 bajtów pamięci. 16 bajtów pamięci może być znaczących w dużych procedurach lub w złożonych modułach.

Aby zobaczyć, jak to działa w makrze Variable_Test, wykonaj następujące czynności:

Zmień kod w makrze Variable_Test na:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Uruchom Variable_Test makra.

Nie zostanie wyświetlony komunikat o błędzie, ponieważ można przypisać cokolwiek do zmiennych wariantowych x i y.

UWAGA: Można również wystawić następujący wiersz i makro będzie nadal działać, ponieważ zmienne x i y będą traktowane jako typy danych Wariant:

    Dim x, y

Zakres zmiennej

Deklarowanie zmiennej może lub nie być widoczne w innych makrach w tym samym module, w innych modułach lub w innych projektach. Dostępność zmiennej w modułach jest określana mianem zakresu. Istnieją trzy typy zakresów: na poziomie procedury, na poziomie modułu prywatnego i na poziomie modułu publicznego. Zakres zależy od sposobu i miejsca deklarowania zmiennych.

Zakres na poziomie procedury

Zmienna z zakresem na poziomie procedury nie jest widziana poza procedurą, w której jest deklarowana. Jeśli ustawisz wartość zmiennej, która ma zakres na poziomie procedury, jej zawartość nie będzie widziana przez inne makra.

Aby sprawdzić, czy zmienna z zakresem na poziomie procedury nie jest widziana poza procedurą, w której jest deklarowana, wykonaj następujące czynności:

  1. Wstaw nowy moduł do projektu.

  2. W tym module wpisz oba poniższe makra:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, as seen by Macro1 is " & x 'the next line runs Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End Sub

  3. Po uruchomieniu makra Macro1 zostanie wyświetlony następujący

    komunikat:x, as seen by Macro1 is 10

  4. Kliknij przycisk OK.Zostanie wyświetlony następujący komunikat:x, as seen by Macro2 is

  5. Kliknij przycisk OK.

Makro Macro2 nie wyświetla wartości zmiennej x, ponieważ zmienna x jest lokalna dla makra Makro1.

Zakres prywatny i publiczny na poziomie modułu

Zmienne można zdefiniować w sekcji deklaracji w module (u góry modułu nad wszystkimi procedurami podrzędnymi) i ustawić zakres zmiennej za pomocą instrukcji Public, instrukcji Dim lub instrukcji Private. Jeśli umieścisz instrukcje Publiczne przed zmienną, zmienna będzie dostępna dla wszystkich makr we wszystkich modułach w projekcie. Jeśli przed zmienną umieścisz instrukcji Dim lub Private, zmienna będzie dostępna tylko dla makr w module, w którym jest deklarowana.

Aby zobaczyć różnicę między statement Public a dim, wykonaj następujące czynności:

  1. Zapisz i zamknij wszystkie otwarte skoroszyty, a następnie otwórz nowy skoroszyt.

  2. Uruchom edytor Visual Basic.

  3. Wstaw moduł do projektu.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. Wstaw inny moduł do projektu.

  6. Wpisz następujący kod w tym module:


    Sub Macro2()     x = x * 3
        MsgBox x
    End Sub

  7. Uruchamianie Macro_1a w pierwszym module.

  8. Gdy zmienna x jest zadeklarowana jako "Publiczna x jako liczba całkowita", wszystkie trzy makra w projekcie mają dostęp do wartości x. W pierwszym oknie komunikatu zostanie wyświetlona wartość 10. Drugie okno komunikatu wyświetla wartość 20 (ponieważ x jest mnożone przez 2 w Macro_1b). W trzecim oknie komunikatu jest wyświetlana wartość 60 (ponieważ wartość x została zmieniona na 20 w programie Macro_1b, a następnie została pomnożona przez 3 w makrze2).

  9. Zmienianie wiersza deklaracji w pierwszym module z:

       Public x As Integer

    do:

       Dim x As Integer

  10. Uruchom Macro_1a makra.

  11. Gdy zmienna x jest zadeklarowana jako "Dim x As Integer", tylko makra w pierwszym module mają dostęp do wartości x. W związku z tym w pierwszym oknie komunikatu jest wyświetlana wartość 10, w drugim polu komunikatu jest wyświetlana wartość 20 (ponieważ w programie Macro_1b znak x jest pomnożony przez 2), a w trzecim polu komunikatu jest wyświetlana wartość 0 (ponieważ w makrze Macro2 nie jest wyświetlana wartość x, a niezainicjowana wartość zero jest używana przez makro 2).

  12. Zmień wiersz deklaracji w pierwszym module z:

      Dim x As Integer

    w celu:

        Private x As Integer

  13. Uruchom Macro_1a makra.

  14. Te same pola wiadomości są wyświetlane przy użyciu zakresu instrukcji Private jak podczas używania instrukcji Dim. Zmienna x ma ten sam zakres, prywatny dla modułu, w którym jest deklarowana.


UWAGA: Jeśli chcesz ograniczyć zakres zmiennej do modułu, w którym jest deklarowana, użyj instrukcji Privatestatement zamiast instrukcji Dim. Obie te osoby osiągnąć ten sam efekt, ale zakres będzie bardziej przejrzysty podczas czytania kodu w przypadku użycia instrukcji Private.
 

Okres istnienia zmiennej

Czas, w którym zmienna zachowuje wartość, jest nazywany jej okresem istnienia. Wartość zmiennej może się zmieniać w okresie istnienia, ale zachowuje wartość. Ponadto zmienna, która traci zakres, nie ma już wartości.
 

Inicjowanie wartości zmiennej

Po uruchomieniu makra wszystkie zmienne są inicjowanie na wartość. Zmienna liczbowa jest inicjowana do zera, ciąg o zmiennej długości jest inicjowany na ciąg znaków o zerowej długości (""), a ciąg stałej długości jest wypełniany kodem ASCII 0. Zmienne wariantowe są zainicjowane jako Puste. Zmienna pusta jest reprezentowana przez zero w kontekście liczbowym oraz ciąg znaków o zerowej długości ("") w kontekście ciągu.

Zmienne na poziomie procedury

Jeśli w makrze znajduje się zmienna deklarowana przy użyciu instrukcji Dim, zmienna zachowuje wartość przez okres działania makra. Jeśli to makro wywoła inne makra, wartość zmiennej jest zachowywana (jednak niedostępne dla innych makr), o ile te inne makra również są uruchomione.

Aby pokazać, jak działają zmienne na poziomie procedury, wykonaj następujące czynności:

  1. Wstaw nowy moduł do projektu.

  2. W tym module wpisz oba poniższe makra:

    Sub Macro1()
        'set x as a procedure level variable
       Dim x As Integer
       MsgBox "wartość początkowa x to " & x
       x = 10
        MsgBox "x is " & x
        'następny wiersz uruchamia makro Macro2
        Makro2
        MsgBox "x is still " & x
    End Sub
    Sub Macro2()
        MsgBox "x, as seen by Macro2 is " & x
    End Sub

  3. Uruchamianie makra1.

  4. Zostanie wyświetlony następujący komunikat:

        the initialized value of x is 0

  5. Kliknij przycisk OK,a zostanie wyświetlony komunikat:

     x is 10

  6. Kliknij przycisk OK.Zostanie wyświetlony następujący komunikat:x, as seen by Macro2 is

  7. Kliknij przycisk OK.

  8. Makro Macro2 nie wyświetla wartości zmiennej x, ponieważ zmienna x jest lokalna dla makra Makro1. Zostanie wyświetlony następujący komunikat:

    x is still 10

  9. Kliknij przycisk OK.

  10. Uruchamianie makra1.

Odbierane są te same wiadomości, które opisano w krokach od 3 do 6, ponieważ zaraz po zatrzymaniu działania makra Macro1 w kroku 6 wartość zmiennej x została utracona. Dlatego podczas ponownego uruchomić makro Makro1 w kroku 7 pierwszy komunikat pokazuje wartość x jako zero (wartość zainicjowana).

Statyczne słowo kluczowe

Jeśli zmienna na poziomie procedury jest deklarowana przy użyciu słowa kluczowego Static, zmienna zachowuje swoją wartość do momentu zresetowania projektu. Dlatego jeśli istnieje zmienna statyczna, przy następnym wywołaniu procedury zmienna statyczna jest inicjowana do ostatniej wartości.

Aby zobaczyć, jak działa statyczne słowo kluczowe, wykonaj następujące czynności:

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. Uruchamianie makra1.

  3. Zostanie wyświetlony komunikat:

    the initialized value of x is 0

  4. Kliknij przycisk OK,a zostanie wyświetlony komunikat:

    x is 10

  5. Kliknij przycisk OK.

  6. Po uruchomieniu makra Macro1 zostanie wyświetlony następujący

    komunikat:the initialized value of x is 10

  7. Kliknij przycisk OK,a zostanie wyświetlony następujący komunikat:

    x is 20

  8. Kliknij przycisk OK.

Wartości wyświetlane w wiadomościach są inne po raz drugi, ponieważ zmienna x jest deklarowana jako zmienna statyczna, a zmienna zachowuje wartość po pierwszym uruchomieniu makra Macro1.

UWAGA:  Jeśli istnieje zmienna na poziomie modułu, jej okres istnienia jest taki sam, jak w przypadku zmiennej statycznej na poziomie procedury.

Aby zweryfikować okres istnienia zmiennej na poziomie modułu, wykonaj następujące czynności:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. Po uruchomieniu makra Macro1 zostanie wyświetlony następujący

    komunikat:the initialized value of x is 0

  3. Kliknij przycisk OK. Zostanie wyświetlony następujący komunikat:

    x is 10

  4. Kliknij przycisk OK.

  5. Po uruchomieniu makra Macro1 zostanie wyświetlony komunikat:

    the initialized value of x is 10

  6. Kliknij przycisk OK.

  7. Zostanie wyświetlony następujący komunikat:

    x is 20

  8. Kliknij przycisk OK.

Wartości wyświetlane w wiadomościach są inne po raz drugi, ponieważ zmienna x jest deklarowana jako zmienna statyczna i zachowuje wartość po pierwszym uruchomieniu makra Macro1.
 

Resetowanie projektu w celu zresetowania zmiennych

Jeśli chcesz zresetować wartość zmiennej statycznej lub zmiennej na poziomie modułu, kliknij przycisk Resetuj na
Standardowy pasek narzędzi lub kliknij pozycję Resetuj w menu Uruchom.

Jeśli zrobisz to dla projektu Makro1, a następnie ponownie powrócisz do macro1,wartość zmiennej x zostanie zainicjowana z powrotem do zera i zostanie wyświetlony pierwszy komunikat:

    the initialized value of x is 0

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów Microsoft Office

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?

Dziękujemy za opinię!

×