在VBA中的字符串中放置双引号

时间:2017-03-22 19:03:46

标签: vba excel-vba double-quotes excel

我很难理解如何在VBA中的字符串中放置双引号(“)。我知道我可以使用char(34)函数轻松完成此操作。我也理解另一种方式这样做是使用4个双引号:""""。所有这些都来自之前的SO帖子:

How do I put double quotes in a string in vba?

然而,我的问题是......为什么需要4个引号?前两个是逃避,第三个是引用本身,第四个是终止引用吗?或者它以不同的方式工作?关于VBA如何处理这些双引号,我无法找到具体的答案。

我还注意到,如果我尝试在String中添加或删除双引号的数量,Visual Studio将动态添加或删除双引号。例如,我最初有以下字符串:

data = TGName + """ + iterator.Value + """

...在消息框中生成以下内容:

enter image description here

但是,如果我尝试将字符串末尾的第二组双引号(+ """)从3调整为4,Visual Studio会自动将其调整为5.我没办法只有4报价最后。这是消息框中的结果字符串:

enter image description here

消息框中的字符串不是我希望拥有的实际输出,它们纯粹是出于实验目的。但是,我注意到,显然需要VBA中String中允许的引号数。有谁知道这个要求是什么?为什么IDE强制在第二个String中插入额外的引用?有人可以解释我所描述的两种情况下实际字符串内容和格式引号之间的差异吗?

与往常一样,对此的任何帮助都将非常感谢:)

2 个答案:

答案 0 :(得分:5)

一般规则如下。

第一个双引号(DQ)宣布字符串的开头。之后,一些DQ宣布字符串结束。但是,如果DQ前面有DQ,那么它就会被转义"。转义表示它是字符串的字符部分,而不是分隔符。

简单地说,当你在字符串中有任何偶数的连续双引号时,比如2n,这意味着有n个转义双引号。如果数字是奇数,比如2n+1,则您有n个转义DQ和分隔符

实施例

  """ + 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)

答案 1 :(得分:0)

要将迭代器值附加到引号中的TGName,您可以执行以下操作:

Data = TGName & """" & iterator.Value & """"

或者这个:

Data = TGName & Chr(34) & iterator.Value & Chr(34)

注意:我用&替换了+标志因为在连接字符串时,这只是VBA的最佳实践。