Лучший способ определить большую строку VBA - то есть эквивалент heredoc? - PullRequest
14 голосов
/ 08 сентября 2010

Как мне определить большие строки в VBA?Есть ли лучший способ, чем кодировать что-то похожее на приведенное ниже?

Dim largeString as String
largeString = "This is a long block of text that I want to fill " & _
              "into a form field. I need to make sure I pay attention " & _
              "to spacing and carriage return issues while doing so. " & _
              "I also have to use quotes liberally, the concatenation " & _
              "operator, and the continuance underscore to make sure " & _
              "VBA can parse my code." & vbCr & vbCr & _
              "It's kind of a pain in the ass and I wish I could use " & _
              "a heredoc instead, letting me copy and paste the block" & _
              "of text I need from another source and shove it into " & _
              "a string."

Редактировать: Тьфу, и есть ли предел в 25 строк?Так много для хорошего отступа и ширины в 80 символов, что дает мне достаточно места для пары приличных абзацев.

Ответы [ 3 ]

12 голосов
/ 08 сентября 2010

Нет, это так же хорошо, как и получается.

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

10 голосов
/ 09 сентября 2010

Я предпочитаю делать это следующим образом:

Dim lStr As String
lStr = ""

lStr = lStr & "This is a long block of text that I want to fill "
lStr = lStr & "into a form field. I need to make sure I pay attention "
lStr = lStr & "to spacing and carriage return issues while doing so. "
lStr = lStr & "I also have to use quotes liberally, the concatenation "
lStr = lStr & "operator, and the continuance underscore to make sure "
lStr = lStr & "VBA can parse my code." & vbCr & vbCr
lStr = lStr & "It's kind of a pain in the ass and I wish I could use "
lStr = lStr & "a heredoc instead, letting me copy and paste the block"
lStr = lStr & "of text I need from another source and shove it into "
lStr = lStr & "a string."

Я думаю, что с этим методом легче работать, чем с методом продолжения строки, и нет ограничения по количеству строк, чтобы войти с этим способом.Вы можете закомментировать отдельные строки, что полезно для отладки строк SQL.

При обработке длинных строк мне проще использовать короткие имена переменных, поскольку VBA не имеет эквивалента += оператора.largeString = largeString & "" занимает слишком много места и повторяется, поэтому сокращение имени строки делает формат несколько переносимым.

Для очень больших блоков текста напишите его в текстовом редакторе, затем скопируйте и вставьте в свою процедуру,Затем скопируйте

lStr = lStr & "

и вставьте его в начале каждой строки.Редактор VBA автоматически добавит кавычки в конце строки, упрощая процесс.

0 голосов
/ 08 августа 2018

Другой способ - сохранить текст в комментариях, а затем проанализировать его в функции. Внешние файлы не требуются, хорошая читаемость.

' TEXT to retrieve:
'   SELECT
'   field1, field2
'   FROM table1

Function SQL_in_comments()
    SQL_in_comments = Replace(Replace(Application.VBE.ActiveCodePane.CodeModule.Lines(2, 3), "'   ", ""), "'", "")
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...