excel vba公式构建双引号与单引号

时间:2015-03-20 17:56:22

标签: excel vba excel-vba

我在“使用R1C1公式构造中的变量”标题下找到答案,这使我的公式起作用。有人可以解释一下如何在单元格中构造和存储公式的逻辑。

原件:

=IF(ISNUMBER(SEARCH("IAV",RC[-2])),MID(RC[-2],FIND("IAV",RC[-2])+6,11),"")

工作:

sFRM = "=IF(ISNUMBER(SEARCH('IAV',RC[-2])),MID(RC[-2],FIND('IAV',RC[-2])+6,11),'')"
.Range("o2:o" & lr).FormulaR1C1 = Replace(sFRM, Chr(39), Chr(34))

谢谢,inadvance

1 个答案:

答案 0 :(得分:3)

我认为你试图弄清楚为什么VBA版本中有单引号,但excel表中有双引号。

在VBA中,要创建string类型的变量,请将其放在引号内。 这一行:

myvar = "help"

导致变量myvar是一个值为help [without quotes]

的字符串

但是如果你想在你的字符串中加上引号怎么办?所以你希望myvar实际上等于

John said "Help"

如果您尝试将变量设置为等于此值,则VBA会将引号视为退出字符串的符号,并会导致错误,例如出现在以下行中:

myvar = "John said "Help""

这不起作用,因为VBA会看到第二个引号并认为字符串是完整的(并且等于[John说])但是它不知道下一个字符是什么,' H'告诉它要做。

有几种方法可以解决这个问题,但是您的代码通过使用单引号然后用双引号替换它们来实现。使用该方法的同一行是:

myvar = "John said 'Help'"
myvar = replace(myvar,chr(39), chr(34))

这里,字符串最初具有所需的句子,但在单词帮助周围有单引号。

Chr(39)表示单引号,Chr(34)表示双引号。因此,replace函数会使用双引号更改所有单引号。

相反,你可以这样做:

myvar = "John said " & chr(34) & "Help" & chr(34)

它会创建相同的字符串。

您的代码使用单引号而不是双引号将变量sFRM设置为所需的值,然后用双引号替换单引号。代码行开头和结尾的双引号用于表示将其中的字母放入字符串中。

单引号用作要替换的占位符。还有其他方法可以做到这一点,但您提供的方法将有效。