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年每个类别的每个模型的总数的快照,以此类推。我希望在以下范围内填充结果:
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行
在“Opp tracker 2020”表中搜索与“快照”表中的类别(范围B1:K1)匹配的类别(K列)SUMIFs
在“Opp tracker 2020”表中搜索与“Snapshot”表中模型匹配的匹配模型(C列)(范围A3:A19适用于2020年,A22:A38适用于2021年,A41:A57适用于2022年,A60:A76适用于2023年)SUMIFs
- 最后,在计算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。