VBA конкатенация с & вызывает проблемы, так как строка также имеет & - PullRequest
0 голосов
/ 15 марта 2019

Я читаю значение из ячейки, содержимое содержит & как часть строки. Например, значение ячейки: «BAU Dev & Production Support-Partner»

xCellValue = xRg.Cells(i, 2).Value
xMsg = " This is a test of the concatenation "
xMsg = xMsg & xCellValue & vbCrLf & vbCrLf

Когда я печатаю xCellValue, отображается «Это тест объединения BAU Dev».

Следовательно, & в ячейке стало частью конкатенации. Как мне сказать VBA не интерпретировать & внутри ячейки?

Спасибо всем, кто откликнулся. Я Debug.Print и далее определил проблему:

    xURL = "mailto:" & xEmail & "?subject=" & xSubj & "&body=" & xMsg
    Debug.Print xURL
    ShellExecute 0, vbNullString, xURL, vbNullString, vbNullString, vbNormalFocus

До xURL Debug.Print символ & все еще отображается в строке. Однако строка заканчивается после символа & в ShellExecute xMsg. Проблема не в чтении значения ячейки, как я думал ранее. Если я установлю

xMsg = " This is a test & of the concatenation "

в теле сообщения в ShellExecute будет отображаться только «Это тест»

1 Ответ

0 голосов
/ 18 марта 2019

Хорошо, я нашел решение. Мне нужно было

' Replace & with %26 (hex)
xMsg = Application.WorksheetFunction.Substitute(xMsg, "&", "%26")

Это была та же причина, по которой я нуждался

' Replace spaces with %20 (hex)
xSubj = Application.WorksheetFunction.Substitute(xSubj, " ", "%20")
xMsg = Application.WorksheetFunction.Substitute(xMsg, " ", "%20")
' Replace carriage returns with %0D%0A (hex)
xMsg = Application.WorksheetFunction.Substitute(xMsg, vbCrLf, "%0D%0A")

Для получения более подробной информации, проверьте Кодировка URL

...