Конкатенация строк в VBA - PullRequest
       12

Конкатенация строк в VBA

8 голосов
/ 12 октября 2011

Я поддерживаю приложение, написанное в Microsoft Access с VBA.

Я просматривал свой код и только что заметил, что подсознательно объединял строки вместе с символом плюс (+) вместо амперсанда. Прошло несколько лет с тех пор, как я написал код на VB6. Может ли это вызвать какие-либо проблемы?

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

Ответы [ 3 ]

12 голосов
/ 12 октября 2011

Амперсанд явно является строковой операцией, а плюс перегружен:

Dim num1 As Integer
num1 = RandomNumberBetween(1, 9)

Dim num2 As Integer
num2 = RandomNumberBetween(1, 9)

Dim randomAge As String 'trying to get a random age between 11 and 99

' works
randomDate = "Your age is " & num1 & num2 

'broken
randomDate = "Your age is " + num1 + num2 

При использовании с числами знак плюс будет добавлен.

4 голосов
/ 13 октября 2011

Некоторые примеры из непосредственного окна VBA (разница между третьим и четвертым особенно неприятна):

Print "5" & 6
56

Print 5 & 6
56

Print "5" + 6
 11 

Print "5" + "6"
56 

Print "Five" & 6
Five6

Print "Five" + 6 'Type mismatch

Print "5" & Null
5

Print "5" + Null
Null
0 голосов
/ 12 октября 2011

Это может вызвать проблемы.

Если вы используете плюс или амперсанд для конкатенации строковых значений, результаты идентичны

Если вы используете плюс для конкатенации строки с нестроковым значением, она выдаст ошибку

Если вы используете знак амперсанда, vba попытается «привести в строку» значения перед конкатенацией.

Так что string_value + int_value + date_value выдаст ошибку и string_value & int_value & date_value будет работать нормально

...