Поиск…


замечания

Назначение строковых литералов в VBA ограничено ограничениями IDE и кодовой страницы настроек языка текущего пользователя. В приведенных выше примерах показаны особые случаи экранированных строк, специальных, непечатаемых строк и длинных строковых литералов.

При назначении строковых литералов, содержащих символы, специфичные для определенной кодовой страницы, вам может потребоваться рассмотреть проблемы интернационализации, назначив строку из отдельного файла ресурсов юникода.

Выход из символа

Синтаксис VBA требует, чтобы строковый литерал отображался внутри " меток», поэтому, когда ваша строка должна содержать кавычки, вам нужно будет избежать / добавить " символ с дополнительным " чтобы VBA понимал, что вы намерены "" интерпретируется как " строка».

'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"

Присвоение длинных строковых литералов

Редактор VBA разрешает только 1023 символа в строке, но обычно только первые 100-150 символов видны без прокрутки. Если вам нужно назначить длинные строковые литералы, но вы хотите, чтобы ваш код читался, вам нужно будет использовать продолжение строки и конкатенацию для назначения вашей строки.

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 позволит вам использовать ограниченное количество строк (фактическое число зависит от длины каждой строки в непрерывном блоке), поэтому, если у вас очень длинные строки, вам необходимо назначить и повторно назначить с помощью конкатенации ,

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.

Использование строковых констант VBA

VBA определяет ряд строковых констант для специальных символов, таких как:

  • vbCr: Carriage-Return 'То же, что и "\ r" в языках стиля C.
  • vbLf: Line-Feed 'То же, что и "\ n" в языках стиля C.
  • vbCrLf: Carriage-Return & Line-Feed (новая строка в Windows)
  • vbTab: символ табуляции
  • vbNullString: пустая строка, например ""

Вы можете использовать эти константы с конкатенацией и другими строковыми функциями для создания строковых литералов со специальными символами.

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

Использование vbNullString считается лучшей практикой, чем эквивалентное значение "" из-за различий в том, как компилируется код. Доступ к vbNullString осуществляется с помощью указателя на выделенную область памяти, а компилятор VBA достаточно умен, чтобы использовать нулевой указатель для представления vbNullString . Литерал "" выделяется память, как если бы это был вариант с типизированным строком, что делает использование константы намного более эффективным:

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow