【发布时间】:2022-10-23 13:54:55
【问题描述】:
在下面的代码中,我确定了一个范围 (ColRng),我想在其中检查每个单元格 - 如果它为空,则执行一个 SUMIFS 函数。这没用。我知道我的语法和逻辑很糟糕,但我不知道如何让它发挥作用。
Dim ColRng As Range
Dim LastCol As Long
Dim LastRowScenario As Long
Dim x As Long
Dim rngCrit1 As Range
Dim rngCrit2 As Range
Dim rngSum As Range
LastRowScenario = Sheets("Sheet1").Range("Q2").End(xlDown).Row
Set rngCrit1 = Sheets("Sheet1").Range("D2:D" & LastRowScenario)
Set rngCrit2 = Sheets("Sheet1").Range("B2:B" & LastRowScenario)
Set rngSum = Sheets("Sheet1").Range("Q2:Q" & LastRowScenario)
LastCol = Sheets("Summary").Range("B5").End(xlToRight).Column
Set ColRng = Range(LastCol & "6:" & LastCol & "149")
For x = ColRng.Cells.Count To 1 Step -1
With ColRng.Cells(x)
' If the cell is empty, perform a SUMIFS
If IsEmpty(.Value) Then
.Formula = Application.WorksheetFunction.SumIfs(rngSum, rngCrit1, .Range("E" & .Row).Value, rngCrit2, .Range("B" & .Row).Value)
End If
End With
Next x
【问题讨论】:
-
它做了什么不正确的?
-
带有 SUMIFS 函数的行会引发“应用程序定义的或对象定义的错误”。我不知道如何使此函数应用于由 If then 检查的单元格。
-
删除所有
ActiveCell并将Application.放在WorksheetFunction 前面:.Formula = Application.WorksheetFunction.SumIfs(rngSum, rngCrit1, .Range("E" & .Row).Value, rngCriteria2, .Range("B" & .Row).Value)这是假设其他变量都是正确的,因为您没有包括它们的声明或设置方式。 -
同样的错误。已编辑原始帖子以包含我的定义。
-
删除 SUMIFS 内
Ranges 前面的.。