VBA中SUMIF公式引用新工作表失效问题求助
问题分析与解决方案
嘿,我一眼就揪出你SUMIF公式失效的问题了——多余的空格和潜在的工作表名引用规则在搞鬼!
问题出在哪?
看你写的这段VBA代码:
With ws3.Range("F4:F" & LastRow) .Formula = "=SUMIF(" & ws2.Name & " ! G:G, A:A ," & ws2.Name & " !H:H)" End With
这里有两个致命的小错误:
ws2.Name后面、感叹号前后、A:A后面都加了多余的空格,Excel会把这些带空格的引用判定为无效名称,直接导致公式报错。- 如果你的工作表名(比如ws2的名字)包含空格或特殊字符(比如
January Sales),直接写ws2.Name!G:G会触发Excel语法错误,必须用单引号把工作表名包裹起来。
而你的VLOOKUP能正常运行,只是刚好踩对了两个点:ws2的名字没有空格,而且你写的ws2.Name & "!A:C"没有多余空格,刚好符合Excel的引用规则。
修正后的代码
基础修正(适用于工作表名无空格的情况)
先去掉所有多余空格,恢复公式的正确结构:
With ws3.Range("F4:F" & LastRow) .Formula = "=SUMIF(" & ws2.Name & "!G:G,A:A," & ws2.Name & "!H:H)" End With
通用修正(兼容所有工作表名,包括带空格/特殊字符的情况)
为了避免后续修改工作表名后再次出错,建议用单引号包裹工作表名,这是更稳妥的写法:
With ws3.Range("F4:F" & LastRow) .Formula = "=SUMIF('" & ws2.Name & "'!G:G,A:A,'" & ws2.Name & "'!H:H)" End With
额外建议:优化你的VLOOKUP代码
同样的,为了让VLOOKUP也能兼容带空格的工作表名,建议把它也改成带单引号的版本:
With ws3.Range("E4:E" & LastRow) .Formula = "=VLOOKUP(A4,'" & ws2.Name & "'!A:C,3,FALSE)" End With
内容的提问来源于stack exchange,提问作者Batyr Nazarov
相关产品推荐
相关产品推荐

