Szukaj…


Składnia

  • Opcja opcja Nazwa [wartość]
  • Opcja Jawna
  • Opcja Porównaj {Tekst | Binarny | Baza danych}
  • Opcja Moduł prywatny
  • Podstawa opcji {0 | 1}

Parametry

Opcja Szczegół
Wyraźny Wymagaj deklaracji zmiennych w module, w którym jest określony (najlepiej we wszystkich); z tą opcją określona, użycie niezadeklarowanej (/ błędnej) zmiennej staje się błędem kompilacji.
Porównaj tekst Sprawia, że porównania ciągów w module nie uwzględniają wielkości liter, na podstawie ustawień regionalnych systemu, nadając priorytet równoważności alfabetycznej (np. „A” = „A”).
Porównaj binarne Domyślny tryb porównywania ciągów. Sprawia, że w porównaniach napisów modułu rozróżniana jest wielkość liter, porównanie ciągów przy użyciu reprezentacji binarnej / wartości liczbowej każdego znaku (np. ASCII).
Porównaj bazę danych (Tylko MS-Access) Sprawia, że porównania ciągów modułu działają tak, jak w instrukcji SQL.
Moduł prywatny Zapobiega uzyskiwaniu dostępu do członka Public modułu spoza projektu, w którym rezyduje moduł, skutecznie ukrywając procedury przed aplikacją hosta (tj. Niedostępne do użycia jako makra lub funkcje zdefiniowane przez użytkownika).
Opcja Podstawa 0 Ustawienia domyślne. Ustawia dolną granicę niejawnej tablicy na 0 w module. Gdy tablica zostanie zadeklarowana bez wyraźnej dolnej granicy, zostanie użyte 0 .
Baza opcji 1 Ustawia dolną granicę niejawnej tablicy na 1 w module. Gdy tablica zostanie zadeklarowana bez wyraźnej dolnej granicy, zostanie użyta wartość 1 .

Uwagi

Znacznie łatwiej jest kontrolować granice tablic, jawnie deklarując granice, niż pozwalając kompilatorowi powrócić do deklaracji Option Base {0|1} . Można to zrobić w następujący sposób:

Dim myStringsA(0 To 5) As String '// This has 6 elements (0 - 5)
Dim myStringsB(1 To 5) As String '// This has 5 elements (1 - 5)
Dim myStringsC(6 To 9) As String '// This has 3 elements (6 - 9)

Opcja Jawna

Za najlepszą praktykę uważa się zawsze używanie Option Explicit w VBA, ponieważ zmusza ona programistę do zadeklarowania wszystkich swoich zmiennych przed użyciem. Ma to również inne zalety, takie jak automatyczne pisanie wielkimi literami dla deklarowanych nazw zmiennych i IntelliSense.

Option Explicit

Sub OptionExplicit()
    Dim a As Integer
    a = 5
    b = 10 '// Causes compile error as 'b' is not declared
End Sub

Ustawienie Wymagaj deklaracji zmiennej w narzędziach VBE ► Opcje ► Strona właściwości Edytora umieści opcję Opcja Jawna na górze każdego nowo utworzonego arkusza kodu.

wymagają_zmiennej_deklaracji

Pozwoli to uniknąć głupich błędów w kodowaniu, takich jak błędy ortograficzne, a także wpływać na użycie poprawnego typu zmiennej w deklaracji zmiennej. (Więcej przykładów podano ZAWSZE Użyj opcji „Wyraźnie” .)

Opcja Porównaj {Binarny | Tekst | Baza danych}

Opcja Porównaj Binarne

Porównanie binarne rozróżnia wielkość liter w modułach / klasach. Technicznie, z tą opcją, porównania ciągów są wykonywane przy użyciu kolejności sortowania reprezentacji binarnych każdego znaku.

A <B <E <Z <a <b <e <z

Jeśli w module nie podano opcji Porównywanie opcji, domyślnie używana jest opcja Binarna.

Option Compare Binary

Sub CompareBinary()

    Dim foo As String
    Dim bar As String
    
    '// Case sensitive
    foo = "abc"
    bar = "ABC"
    
    Debug.Print (foo = bar) '// Prints "False"
    
    '// Still differentiates accented characters
    foo = "ábc"
    bar = "abc"
    
    Debug.Print (foo = bar) '// Prints "False"
    
    '// "b" (Chr 98) is greater than "a" (Chr 97)
    foo = "a"
    bar = "b"
    
    Debug.Print (bar > foo) '// Prints "True"
    
    '// "b" (Chr 98) is NOT greater than "á" (Chr 225)
    foo = "á"
    bar = "b"
    
    Debug.Print (bar > foo) '// Prints "False"

End Sub

Opcja Porównaj tekst

Opcja Porównaj tekst powoduje, że wszystkie porównania ciągów w module / klasie korzystają z porównania bez rozróżniania wielkości liter .

(A | a) <(B | b) <(Z | z)

Option Compare Text

Sub CompareText()

    Dim foo As String
    Dim bar As String
    
    '// Case insensitivity
    foo = "abc"
    bar = "ABC"
    
    Debug.Print (foo = bar) '// Prints "True"
    
    '// Still differentiates accented characters
    foo = "ábc"
    bar = "abc"
    
    Debug.Print (foo = bar) '// Prints "False"
    
    '// "b" still comes after "a" or "á"
    foo = "á"
    bar = "b"
    
    Debug.Print (bar > foo) '// Prints "True"

End Sub

Opcja Porównaj bazę danych

Opcja Porównaj bazę danych jest dostępna tylko w MS Access. Ustawia moduł / klasę, aby korzystała z bieżących ustawień bazy danych w celu ustalenia, czy użyć trybu tekstowego czy binarnego.

Uwaga: odradza się korzystanie z tego ustawienia, chyba że moduł jest używany do pisania niestandardowych funkcji UDF programu Access (funkcje zdefiniowane przez użytkownika), które powinny traktować porównania tekstowe w taki sam sposób, jak zapytania SQL w tej bazie danych.

Podstawa opcji {0 | 1}

Option Base służy do deklarowania domyślnej dolnej granicy elementów tablicy . Jest deklarowany na poziomie modułu i jest ważny tylko dla bieżącego modułu.

Domyślnie (a zatem jeśli nie określono opcji Podstawa), Podstawa wynosi 0. Co oznacza, że pierwszy element dowolnej tablicy zadeklarowanej w module ma indeks 0.

Jeśli określono Option Base 1 , pierwszy element tablicy ma indeks 1

Przykład w bazie 0:

Option Base 0

Sub BaseZero()

    Dim myStrings As Variant
    
    ' Create an array out of the Variant, having 3 fruits elements
    myStrings = Array("Apple", "Orange", "Peach")
    
    Debug.Print LBound(myStrings) ' This Prints "0"
    Debug.Print UBound(myStrings) ' This print "2", because we have 3 elements beginning at 0 -> 0,1,2
            
    For i = 0 To UBound(myStrings)
    
        Debug.Print myStrings(i) ' This will print "Apple", then "Orange", then "Peach"
    
    Next i

End Sub

Ten sam przykład z bazą 1

Option Base 1

Sub BaseOne()

    Dim myStrings As Variant
    
    ' Create an array out of the Variant, having 3 fruits elements
    myStrings = Array("Apple", "Orange", "Peach")
    
    Debug.Print LBound(myStrings) ' This Prints "1"
    Debug.Print UBound(myStrings) ' This print "3", because we have 3 elements beginning at 1 -> 1,2,3
            
    For i = 0 To UBound(myStrings)
    
        Debug.Print myStrings(i) ' This triggers an error 9 "Subscript out of range"
    
    Next i

End Sub

Drugi przykład wygenerował indeks dolny poza zakresem (błąd 9) na pierwszym etapie pętli, ponieważ podjęto próbę uzyskania dostępu do indeksu 0 tablicy, a ten indeks nie istnieje, ponieważ moduł jest zadeklarowany w Base 1

Prawidłowy kod z bazą 1 to:

    For i = 1 To UBound(myStrings)
    
        Debug.Print myStrings(i) ' This will print "Apple", then "Orange", then "Peach"
    
    Next i

Należy zauważyć, że funkcja podziału zawsze tworzy tablicę z indeksem elementu liczonym od zera, niezależnie od ustawienia Option Base . Przykłady korzystania z funkcji podziału można znaleźć tutaj

Funkcja podziału
Zwraca zerową, jednowymiarową tablicę zawierającą określoną liczbę podciągów.

W programie Excel właściwości Range.Value i Range.Formula dla zakresu wielokomórkowego zawsze zwracają tablicę wariantu 2D opartą na 1.

Podobnie w ADO metoda Recordset.GetRows zawsze zwraca tablicę 2D opartą na 1.

Jedną z zalecanych „najlepszych praktyk” jest zawsze używanie funkcji LBound i UBound do określania zakresu tablicy.

'for single dimensioned array
Debug.Print LBound(arr) & ":" & UBound(arr)
Dim i As Long
For i = LBound(arr) To UBound(arr)
    Debug.Print arr(i)
Next i

'for two dimensioned array
Debug.Print LBound(arr, 1) & ":" & UBound(arr, 1)
Debug.Print LBound(arr, 2) & ":" & UBound(arr, 2)
Dim i As long, j As Long
For i = LBound(arr, 1) To UBound(arr, 1)
    For j = LBound(arr, 2) To UBound(arr, 2)
         Debug.Print arr(i, j)
    Next j
Next i

Podstawa Option Base 1 musi znajdować się na górze każdego modułu kodu, w którym tworzona jest tablica, lub musi zostać ponownie zwymiarowana, jeśli tablice mają być konsekwentnie tworzone z dolną granicą 1.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow