VBA设置Excel单元格公式时出现Compile error报错求助
问题原因及解决方案
核心编译错误原因
VBA中字符串内部的双引号必须用**两个连续双引号""**转义,你使用的\"是其他编程语言的转义规则,VBA无法识别,直接导致编译报错。
次要问题及修正
- 公式属性选择错误:你要设置的是A1样式的公式(如
D2、L2),应使用Formula或FormulaArray属性,而非FormulaR1C1(该属性对应R1C1样式引用,如RC[-27])。 - 数组公式处理:你的公式包含数组运算逻辑(通过
ROW($1:$8)生成序列配合MID、ISNUMBER做数组判断),需要用FormulaArray属性赋值,才能模拟Excel中按Ctrl+Shift+Enter输入数组公式的效果。
修正后的代码
' 直接赋值,无需选中单元格(更高效) Range("AE2").FormulaArray = "=IF(OR(D2=""ECHARGEUR2"",D2=""ECHARGEUR3"",D2=""ECHARGEUR1"",D2=""ECHARGERO2"",D2=""ECARD001"",D2=""ECARD002"",D2=""ECARD003""),L2,1*MID(D2,MATCH(TRUE,ISNUMBER(1*MID(D2,ROW($1:$8),1)),0),COUNT(1*MID(D2,ROW($1:$8),1))))"
如果你的Excel版本支持动态数组(无需按Ctrl+Shift+Enter触发数组运算),可以改用Formula属性:
Range("AE2").Formula = "=IF(OR(D2=""ECHARGEUR2"",D2=""ECHARGEUR3"",D2=""ECHARGEUR1"",D2=""ECHARGERO2"",D2=""ECARD001"",D2=""ECARD002"",D2=""ECARD003""),L2,1*MID(D2,MATCH(TRUE,ISNUMBER(1*MID(D2,ROW($1:$8),1)),0),COUNT(1*MID(D2,ROW($1:$8),1))))"
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

