我有一个情况。有一个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)))
我正在编写一个sub来将相同的公式放在活动/选定的单元格中,但是这样做时,VBA会遇到错误,因为在阅读"。"在公式中,它期望
代码转载如下。我只是试图放一个直接在excel中使用的公式,但这次通过一个按钮将这个公式放在一个活动的单元格中。我怎么能这样做?
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
答案 0 :(得分:1)
在VBA中,公式被指定为字符串。在公式中遇到的第一个双引号是"。"被认为是公式字符串的结尾,然后该行的其余部分在语法上是错误的。
要在VBA中的字符串中指定双引号字符(这是Excel公式包含双引号时需要执行的操作),您需要使用双引号:""
当VBA看到""在字符串中,它会将其视为字符"而不是包含公式的字符串的结尾。
对于公式中的所有双引号,您需要用双引号替换它们:
"=(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公式中使用实际上需要在字符串中表示为:
""""
基本上,在VBA中打开一个字符串后,在打开双引号后遇到的第一个双引号表示字符串的结尾。所有双引号都表示字符串中的双引号字符。
因此,如果您需要在VBA中指定此公式:
A1 = ""
它将被指定为此字符串:
"A1 = """""
第一个双引号打开字符串。 第2和第3个双引号代表公式中的第一个双引号字符 第4和第5双引号表示公式中的第二个双引号字符 第6个双引号关闭字符串。