在VBA中连接字符串

9

我正在维护一款使用Microsoft Access和VBA编写的应用程序。

我在浏览我的代码时注意到自己下意识地使用加号(+)符号而不是“&”符号将字符串连接在一起。自从我上次编写VB6以来已经过了几年了。这会导致任何问题吗?

一切看起来都很好,只需要花费几分钟进行修复,我只是想知道我是否在技术上犯了什么错误。

3个回答

13

和号(&)是显式的字符串操作符,而加号(+)是重载的操作符:

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
如果你使用加号来操作空值,风险会变得更大。 - Fionnuala
好的点,使用和号将字符串附加到空值上是安全的,结果是仅该字符串的值。 - tcarvin

4

以下是一些与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

1

这可能会导致问题。

如果使用加号或和符号连接字符串值,结果是相同的

如果使用加号将字符串与非字符串值连接起来,它会抛出错误

如果使用和符号,VBA将在连接之前尝试将值“字符串化”。

因此,string_value + int_value + date_value会出错,而string_value & int_value & date_value正常工作


1
你的例子(部分)是正确的,但它上面的句子是反过来的。如果你使用&符号将字符串与非字符串值连接起来,那么非字符串值会被转换为字符串并连接起来。如果你使用加号,则会出现错误,除非字符串值是数字,在这种情况下,它会被转换为数字,并相加。此外,如果你使用加号,其中一个操作数为null,结果也为null;而使用&符号则不会出现这种情况。 - phoog
谢谢,我已经修复了交换的句子,以消除任何混淆。 - Eddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接