VBA创建日期命名工作表后拼接SUMIFS公式报应用定义错误求助
解决VBA中SUMIFS公式写入的「应用定义/对象定义错误」
我看了你的代码,问题主要出在公式字符串的语法错误,还有几个细节需要调整,下面一步步帮你修正:
1. 修复公式里的致命笔误
你拼接的FormulaS里有个明显的语法错误:CopySheet + ",!E:E"这里多了一个逗号,应该改成CopySheet & "!E:E"。这个错误会直接导致公式本身无效,触发对象定义错误。
2. 用&替代+拼接字符串
在VBA里,+虽然能拼接字符串,但如果遇到数字类型的字符串可能会被当作加法运算,推荐用&来做字符串拼接,逻辑更稳定。
3. 调整LastRow的数据类型
Integer的最大值是32767,当工作表行数超过这个数时会溢出报错,建议改成Long类型,适配更大的行数范围。
4. 明确工作簿引用,避免歧义
操作工作表时最好加上CoreWB的前缀,防止当前激活的工作簿不是目标工作簿时出现引用错误。
修正后的完整代码
Dim CopySheet As String Dim QSheet As String Dim FormulaS As String Dim LastRow As Long ' 改成Long避免行数溢出 Dim CoreWB As Workbook Set CoreWB = ActiveWorkbook QSheet = "QData" CopySheet = Format(Date, "mm-dd-yy") With CoreWB .Sheets.Add(After:=.Sheets("HistSum")).Name = CopySheet .Sheets(QSheet).Cells.Copy Destination:=.Sheets(CopySheet).Cells ' 加上.Sheets明确引用CoreWB的工作表 End With ' 修正公式语法,用&拼接字符串,去掉多余的逗号 FormulaS = "=SUMIFS(" & CopySheet & "!M:M," & CopySheet & "!A:A,A:A," & CopySheet & "!C:C,C:C," & CopySheet & "!J:J,J:J," & CopySheet & "!E:E,E:E)" With CoreWB.Sheets(QSheet) ' 加上CoreWB明确引用 LastRow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("M2:M" & LastRow).Formula = FormulaS End With
额外优化建议
- 尽量避免整列引用(比如
M:M),可以改成动态范围,比如先获取CopySheet的最后一行行数,再拼接成CopySheet & "!M2:M" & LastRowCopy,这样公式计算效率更高。 - 如果你的匹配条件是唯一值,用
VLOOKUP或者XLOOKUP会比SUMIFS更合适,毕竟SUMIFS是求和函数,唯一匹配场景下用查找函数逻辑更准确直观。
内容的提问来源于stack exchange,提问作者BeSimple
相关产品推荐
相关产品推荐

