Szukaj…


Uwagi

Przypisanie literałów-ciągów w VBA jest ograniczone ograniczeniami IDE i strony kodowej ustawień językowych bieżącego użytkownika. W powyższych przykładach pokazano przypadki specjalne ciągów znaków, znaków specjalnych, niedrukowalnych i długich literałów.

Przy przypisywaniu literałów łańcuchowych zawierających znaki specyficzne dla określonej strony kodowej konieczne może być rozważenie problemów związanych z internacjonalizacją poprzez przypisanie łańcucha z osobnego pliku zasobów Unicode.

Ucieczka od postaci

Składnia VBA wymaga, aby literał " string” pojawiał się w " znakach " , więc gdy łańcuch musi zawierać znaki cudzysłowu, musisz uciec / uzupełnić " znak z dodatkowym " , aby VBA zrozumiał, że "" ma być interpretowana jako " ciąg.

'The following 2 lines produce the same output
Debug.Print "The man said, ""Never use air-quotes"""
Debug.Print "The man said, " & """" & "Never use air-quotes" & """"

'Output:
'The man said, "Never use air-quotes"
'The man said, "Never use air-quotes"

Przypisywanie literałów długich ciągów

Edytor VBA dopuszcza tylko 1023 znaki w wierszu, ale zwykle tylko pierwsze 100-150 znaków jest widoczne bez przewijania. Jeśli musisz przypisać długie literały ciągów, ale chcesz zachować czytelność swojego kodu, musisz użyć kontynuacji linii i konkatenacji, aby przypisać ciąg.

Debug.Print "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " & _
            "Integer hendrerit maximus arcu, ut elementum odio varius " & _
            "nec. Integer ipsum enim, iaculis et egestas ac, condiment" & _
            "um ut tellus."
'Output:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer hendrerit maximus arcu, ut elementum odio varius nec. Integer ipsum enim, iaculis et egestas ac, condimentum ut tellus.

VBA pozwoli ci użyć ograniczonej liczby kontynuacji linii (rzeczywista liczba różni się w zależności od długości każdej linii w bloku kontynuowanym), więc jeśli masz bardzo długie ciągi, musisz przypisać i ponownie przypisać z konkatenacją .

Dim loremIpsum As String

'Assign the first part of the string
loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " & _
              "Integer hendrerit maximus arcu, ut elementum odio varius "
'Re-assign with the previous value AND the next section of the string
loremIpsum = loremIpsum & _
            "nec. Integer ipsum enim, iaculis et egestas ac, condiment" & _
            "um ut tellus."

Debug.Print loremIpsum

'Output:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer hendrerit maximus arcu, ut elementum odio varius nec. Integer ipsum enim, iaculis et egestas ac, condimentum ut tellus.

Używanie stałych ciągów VBA

VBA definiuje szereg stałych ciągów znaków specjalnych, takich jak:

  • vbCr: Carriage-Return 'Taki sam jak "\ r" w językach w stylu C.
  • vbLf: Line-Feed 'To samo co "\ n" w językach w stylu C.
  • vbCrLf: Carriage-Return & Line-Feed (nowa linia w Windows)
  • vbTab: Znak tabulacji
  • vbNullString: pusty ciąg znaków, np. „”

Tych stałych można używać z konkatenacją i innymi funkcjami łańcuchowymi do tworzenia literałów łańcuchowych ze znakami specjalnymi.

Debug.Print "Hello " & vbCrLf & "World"
'Output:
'Hello
'World

Debug.Print vbTab & "Hello" & vbTab & "World"
'Output:
'    Hello    World

Dim EmptyString As String
EmptyString = vbNullString
Debug.Print EmptyString = ""
'Output:
'True

Użycie vbNullString jest uważane za lepszą praktykę niż równoważna wartość "" ze względu na różnice w kompilacji kodu. Dostęp do łańcuchów odbywa się za pomocą wskaźnika do przydzielonego obszaru pamięci, a kompilator VBA jest wystarczająco inteligentny, aby użyć wskaźnika zerowego do reprezentowania vbNullString . Dosłowne "" jest alokowane w pamięci tak, jakby był wariantem typu String, dzięki czemu użycie stałej jest znacznie bardziej wydajne:

Debug.Print StrPtr(vbNullString)    'Prints 0.
Debug.Print StrPtr("")              'Prints a memory address.


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