Excel VBA-运行时错误13使用WorksheetFunction.SumIFs时类型不匹配

Excel VBA-运行时错误13使用WorksheetFunction.SumIFs时类型不匹配,excel,vba,Excel,Vba,您能否建议如何修复以下使用SUMIFS的代码?我设法从很多来源收集了它们,我知道数据类型一定有问题 Sub snap2020() 'Declare a variable Dim wsOpps As Worksheet, wsSnapshot As Worksheet Dim i As Integer, r As Integer Dim CatSnapShot As Range Dim SumRgn As Range 'The desired Sum Range

您能否建议如何修复以下使用
SUMIFS
的代码?我设法从很多来源收集了它们,我知道数据类型一定有问题

Sub snap2020()

'Declare a variable
    Dim wsOpps As Worksheet, wsSnapshot As Worksheet
    Dim i As Integer, r As Integer
    Dim CatSnapShot As Range

    Dim SumRgn As Range 'The desired Sum Range
    Dim CrtRgn1 As Range 'Range applied to Criteria 1
    Dim Crt1 As Range 'Criteria 1
    Dim CrtRgn2 As Range 'Range applied to Criteria 2
    Dim Crt2 As Range 'Criteria 2
    Dim CrtRgn3 As Range 'Range applied to Criteria 3
    Dim Crt3 As Range 'Criteria 3

    Set SumRgn = ThisWorkbook.Sheets("Opps tracker 2020").Range("T1:T2000")
    Set CrtRgn1 = ThisWorkbook.Sheets("Opps tracker 2020").Range("C1:C2000")
    Set Crt1 = ThisWorkbook.Sheets("Snapshot").Range("$A$3:$A$19")
    Set CrtRgn2 = ThisWorkbook.Sheets("Opps tracker 2020").Range("K1:K2000")
    Set Crt2 = ThisWorkbook.Sheets("Snapshot").Range("$B$1:$K$1")
    Set CrtRgn3 = ThisWorkbook.Sheets("Opps tracker 2020").Range("J1:J2000")
    Set Crt3 = ThisWorkbook.Sheets("Snapshot").Range("$A$2")

    Set wsOpps = ThisWorkbook.Sheets("Opps tracker 2020")
    Set wsSnapshot = ThisWorkbook.Sheets("Snapshot")


'Set up Message Box
    If MsgBox("Update Snapshot?", vbYesNo + vbQuestion + vbDefaultButton2, "Opportunity Snapshot 2020") = vbNo Then
        Exit Sub
    End If

'Turn off events
    Application.EnableEvents = False

'Clear old data in Worksheet Snapshot
    wsSnapshot.Range("B3:K20").ClearContents

'Apply SUMIFs and Update data
    For i = 3 To 19
        For r = 2 To 11
            wsSnapshot.Cells(i, r) _
                = Application.WorksheetFunction.SumIfs(SumRgn, CrtRgn1, Crt1, CrtRgn2, Crt2, CrtRgn3, Crt3)
        Next r
    Next i
'Turn on events
    Application.EnableEvents = True

End Sub
因此,代码的目的是创建2020年、2021年、2022年、2023年每个类别的每个模型的总数的快照,以此类推。我希望在以下范围内填充结果:

  • B3:2020年的K20
  • B22:2021年的K39
  • B41:2022年的K58
  • B60:2023年的K77
  • SumIfs
    语句应该是这样的:

    =SUMIFS('Opps tracker 2020'!T1:T2000, 'Opps tracker 2020'!C1:C2000, 'Snapshot'!A3:A19, 
    'Opps tracker 2020'!K1:K2000, 'Snapshot'!B1:K1, 'Opps tracker 2020'!J1:J2000)
    
    • 我想要的总和范围是“Opps tracker 2020”表中的T列,我仅将其限制为测试的前2000行
    • SUMIFs
      在“Opp tracker 2020”表中搜索与“快照”表中的类别(范围B1:K1)匹配的类别(K列)
    • SUMIFs
      在“Opp tracker 2020”表中搜索与“Snapshot”表中模型匹配的匹配模型(C列)(范围A3:A19适用于2020年,A22:A38适用于2021年,A41:A57适用于2022年,A60:A76适用于2023年)
    • 最后,在计算Snapshot的2020年范围时,SUMIFs必须确保2020年,其他年份也是如此
    这是我的“快照”表的打印屏幕

    我不是一个程序员,所以如果你能建议一个更好的方法来把代码放在一起,请放心。我真的很感谢你的帮助


    请建议如何解决此问题。非常感谢!

    除了向您提供公式外,我还将您的消息框移到了宏的开头,因为一切都取决于用户给出的响应

    此外,我还将工作表的分配移到了总和和标准范围的分配之前,以便您可以在分配总和和标准范围等时使用这些工作表变量

    Sub snap2020()
    
    'Set up Message Box
        If MsgBox("Update Snapshot?", vbYesNo + vbQuestion + vbDefaultButton2, "Opportunity Snapshot 2020") = vbNo Then
            Exit Sub
        End If
    
    'Declare a variable
        Dim wsOpps As Worksheet, wsSnapshot As Worksheet
        Dim i As Integer, r As Integer
    
        Set wsOpps = ThisWorkbook.Sheets("Opps tracker 2020")
        Set wsSnapshot = ThisWorkbook.Sheets("Snapshot")
    
        Dim SumRgn As Range 'The desired Sum Range
        Dim CrtRgn1 As Range 'Range applied to Criteria 1
        Dim CrtRgn2 As Range 'Range applied to Criteria 2
        Dim CrtRgn3 As Range 'Range applied to Criteria 3
    
        With wsOpps
            Set SumRgn = .Range("T1:T2000")
            Set CrtRgn1 = .Range("C1:C2000")
            Set CrtRgn2 = .Range("K1:K2000")
            Set CrtRgn3 = .Range("J1:J2000")
        End With
    
    'Turn off events
        Application.EnableEvents = False
    
    'Clear old data in Worksheet Snapshot
        wsSnapshot.Range("B3:K20").ClearContents
    
    'Apply SUMIFs and Update data
        For i = 3 To 19
            For r = 2 To 11
                wsSnapshot.Cells(i, r).Value = Application.SumIfs(SumRgn, CrtRgn1, wsSnapshot.Cells(i, 1).Value, CrtRgn2, wsSnapshot.Cells(1, r).Value, CrtRgn3, wsSnapshot.Range("A2").Value)
            Next r
        Next i
    
    'Turn on events
        Application.EnableEvents = True
    
    End Sub
    

    问题是
    Crt1
    Crt2
    -我认为这里不能使用多单元格范围。从:Criteria1、criteria2…-以数字、表达式、单元格引用或文本形式定义将添加哪些单元格的一个或多个条件。例如,条件可以表示为32、“32”、“>32”、“苹果”或B4。