在 VBA 中的字符串中放置双引号
Placing Double Quotes Within a String in VBA
我很难理解如何在 VBA 中的字符串中放置双引号 (")。我知道我可以使用 char(34)
函数轻松地做到这一点。我也明白这样做的另一种方法是使用 4 个双引号:""""
。所有这些都来自以前的 SO post:
How do I put double quotes in a string in vba?
但是,我的问题是....为什么需要 4 个引号?前两个充当转义符,第三个是引用本身,第四个是终止引用吗?或者它以不同的方式工作?关于 VBA 如何处理这些双引号,我还没有找到具体的答案。
我还注意到,如果我尝试在字符串中添加或删除双引号的数量,Visual Studio 将动态添加或删除双引号。例如,我最初有以下字符串:
data = TGName + """ + iterator.Value + """
...在消息框中生成以下内容:
但是,如果我尝试将字符串 (+ """
) 末尾的第二组双引号从 3 调整为 4,Visual Studio 会自动将其调整为 5。没有办法我最后只有 4 个引号。这是消息框中的结果字符串:
消息框中的字符串并不是我希望得到的实际输出,它们纯粹是为了实验目的。但是,我注意到,在 VBA 中的字符串中显然需要允许的引号数量。有谁知道这个要求是什么?为什么 IDE 在第二个字符串中强行插入一个额外的引号?有人可以解释我所描述的两种情况下实际字符串内容和格式引号之间的区别吗?
一如既往,我们将不胜感激 :)
一般规则如下。
第一个双引号 (DQ) 宣布字符串的开始。之后,一些 DQ 宣布字符串结束。但是,如果 DQ 前面有 DQ,则为 "escaped"。转义意味着它是字符串的字符部分,而不是分隔符。
简单地说,当你在一个字符串中有任何偶数个连续的双引号时,比如2n
,这意味着有n个转义双引号。当数字是 奇数 时,比如 2n+1
,你有 n 个转义的 DQ 和一个 delimiter.
例子
""" + iterator.Value + """
' delimiter " + iterator.Value + " delimiter
' ^ escaped ^ escaped
""" + iterator.Value + """"
' delimiter " + iterator.Value + "" ' (missing enclosing delimiter)
' ^ escaped ^^ both escaped.
在后一种情况下,最后一个分隔符丢失了,因此 VS 为您插入了它,您得到了 5 个 DQ。
最后是特殊情况""""
(只有4个DQ),第一个和最后一个是分隔符,里面有一个转义的DQ。这相当于 chr(34)
。
要将迭代器值附加到引号中的 TGName,您可以这样做:
Data = TGName & """" & iterator.Value & """"
或者这个:
Data = TGName & Chr(34) & iterator.Value & Chr(34)
注意:我用 & 替换了 + 符号,因为这只是连接字符串时的 VBA 最佳实践。
我很难理解如何在 VBA 中的字符串中放置双引号 (")。我知道我可以使用 char(34)
函数轻松地做到这一点。我也明白这样做的另一种方法是使用 4 个双引号:""""
。所有这些都来自以前的 SO post:
How do I put double quotes in a string in vba?
但是,我的问题是....为什么需要 4 个引号?前两个充当转义符,第三个是引用本身,第四个是终止引用吗?或者它以不同的方式工作?关于 VBA 如何处理这些双引号,我还没有找到具体的答案。
我还注意到,如果我尝试在字符串中添加或删除双引号的数量,Visual Studio 将动态添加或删除双引号。例如,我最初有以下字符串:
data = TGName + """ + iterator.Value + """
...在消息框中生成以下内容:
但是,如果我尝试将字符串 (+ """
) 末尾的第二组双引号从 3 调整为 4,Visual Studio 会自动将其调整为 5。没有办法我最后只有 4 个引号。这是消息框中的结果字符串:
消息框中的字符串并不是我希望得到的实际输出,它们纯粹是为了实验目的。但是,我注意到,在 VBA 中的字符串中显然需要允许的引号数量。有谁知道这个要求是什么?为什么 IDE 在第二个字符串中强行插入一个额外的引号?有人可以解释我所描述的两种情况下实际字符串内容和格式引号之间的区别吗?
一如既往,我们将不胜感激 :)
一般规则如下。
第一个双引号 (DQ) 宣布字符串的开始。之后,一些 DQ 宣布字符串结束。但是,如果 DQ 前面有 DQ,则为 "escaped"。转义意味着它是字符串的字符部分,而不是分隔符。
简单地说,当你在一个字符串中有任何偶数个连续的双引号时,比如2n
,这意味着有n个转义双引号。当数字是 奇数 时,比如 2n+1
,你有 n 个转义的 DQ 和一个 delimiter.
例子
""" + iterator.Value + """
' delimiter " + iterator.Value + " delimiter
' ^ escaped ^ escaped
""" + iterator.Value + """"
' delimiter " + iterator.Value + "" ' (missing enclosing delimiter)
' ^ escaped ^^ both escaped.
在后一种情况下,最后一个分隔符丢失了,因此 VS 为您插入了它,您得到了 5 个 DQ。
最后是特殊情况""""
(只有4个DQ),第一个和最后一个是分隔符,里面有一个转义的DQ。这相当于 chr(34)
。
要将迭代器值附加到引号中的 TGName,您可以这样做:
Data = TGName & """" & iterator.Value & """"
或者这个:
Data = TGName & Chr(34) & iterator.Value & Chr(34)
注意:我用 & 替换了 + 符号,因为这只是连接字符串时的 VBA 最佳实践。