如何在VBA中实现指定Excel公式并解决双引号报错问题?
问题:VBA中转写Excel公式时的引号转义错误解决
原Excel公式
=IFERROR(MID(M4;FIND("""";M4)+1;LEN(M4)-FIND("""";M4)-1);"-")
问题场景
想在VBA中实现该公式并自动向下填充,编写的代码出现类型不匹配错误,错误根源是公式中的引号转写错误:
wsFinal.Range("P2").Formula = "=IFERROR(MID(N4;FIND("""""";N4)+1;LEN(N4)-FIND("""""";N4)-1);"" - "")" wsFinal.Range("P2").Autofill Destination:=wsFinal.Range("P2" & ":P" & lastRowRange), Type:=xlFillDefault
解决方法
1. 正确转义双引号
在VBA字符串中,单个双引号需要用两个双引号""来转义,而不是你写的四个双引号""""(那会被解析成两个实际的双引号)。修正后的代码:
wsFinal.Range("P2").Formula = "=IFERROR(MID(N4,FIND("""",N4)+1,LEN(N4)-FIND("""",N4)-1),""-"")" wsFinal.Range("P2").AutoFill Destination:=wsFinal.Range("P2:P" & lastRowRange), Type:=xlFillDefault
如果你的Excel是中文/非英文版本,公式参数分隔符用分号;的话,要改用FormulaLocal属性,避免参数解析错误:
wsFinal.Range("P2").FormulaLocal = "=IFERROR(MID(N4;FIND("""";N4)+1;LEN(N4)-FIND("""";N4)-1);""-"")"
2. 简化写法(可选)
可以直接一次性给整个区域赋值公式,省去自动填充步骤,效率更高:
wsFinal.Range("P2:P" & lastRowRange).FormulaLocal = "=IFERROR(MID(N4;FIND("""";N4)+1;LEN(N4)-FIND("""";N4)-1);""-"")"
Excel会自动将公式中的相对引用(比如N4)对应到每一行的单元格。
内容的提问来源于stack exchange,提问作者Jakub Jabłoński
相关产品推荐
相关产品推荐

