Excelmacros – 错误将包含双引号的公式插入到ActiveCell中
我在这里有一个情况。 有一个Excel单元格,让我们说单元格A1如下公式。
=(IF(ISERROR(VALUE(SUBSTITUTE(OFFSET(B10,-1,0,1,1),".",""))),1,IF(ISERROR(FIND("`",SUBSTITUTE(OFFSET(B10,-1,0,1,1),".","`",1))),VALUE(OFFSET(B10,-1,0,1,1))+1,VALUE(LEFT(OFFSET(B10,-1,0,1,1),FIND("`",SUBSTITUTE(OFFSET(B10,-1,0,1,1),".","`",1))-1))+1)))
我正在写一个子把这个相同的公式放在活动/选中的单元中,但是这样做的时候,VBA遇到错误,因为在阅读“。 在公式中,它期望
代码转载如下。 我只是试图把一个公式,否则直接在Excel中使用,但这次通过一个button,将公式放在一个活动单元格。 我怎样才能做到这一点?
Sub fillmainwbs() ActiveCell.Formula = "=(IF(ISERROR(VALUE(SUBSTITUTE(OFFSET(B10,-1,0,1,1),".",""))),1,IF(ISERROR(FIND("`",SUBSTITUTE(OFFSET(B10,-1,0,1,1),".","`",1))),VALUE(OFFSET(B10,-1,0,1,1))+1,VALUE(LEFT(OFFSET(B10,-1,0,1,1),FIND("`",SUBSTITUTE(OFFSET(B10,-1,0,1,1),".","`",1))-1))+1)))" End Sub
在VBA中,公式被指定为一个string。 您的公式中遇到的第一个双引号“。” 被视为公式string的结尾,然后该行的其余部分在语法上不正确。
要在VBA中的string中指定一个双引号字符(当Excel公式包含双引号时需要执行的操作),需要使用双引号:“”
当VBA在string中看到“”时,它将把它当作字符“,而不是包含公式的string的末尾。
对于公式中的所有双引号,您需要用双引号replace它们:
"=(IF(ISERROR(VALUE(SUBSTITUTE(OFFSET(B10,-1,0,1,1),""."",""""))),1,IF(ISERROR(FIND(""`"",SUBSTITUTE(OFFSET(B10,-1,0,1,1),""."",""`"",1))),VALUE(OFFSET(B10,-1,0,1,1))+1,VALUE(LEFT(OFFSET(B10,-1,0,1,1),FIND(""`"",SUBSTITUTE(OFFSET(B10,-1,0,1,1),""."",""`"",1))-1))+1)))"
请注意,Excel公式中使用的空string“”实际上需要在string中表示为:
""""
基本上,在VBA中打开一个string之后,在打开双引号后遇到的第一个双引号表示string的结尾。 所有双双引号表示string中的双引号字符。
所以,如果你需要在VBA中指定这个公式:
A1 = ""
它将被指定为这个string:
"A1 = """""
第一个双引号打开string。 第二和第三个双引号表示公式中的第一个双引号字符第四和第五个双引号表示公式中的第二个双引号字符第六个双引号closuresstring。