我当前的问题涉及使用AverageIf
函数计算某些事件的平均时间(风味变化,尺寸变化和标签变更)。我编写了三个独立的代码段来计算每个事件的每个平均时间。所有三个部分都是相同的(相同的标准范围和平均范围),唯一的区别是标准。
但是,当我运行宏时,我收到以下错误:
运行时错误'1004'无法获取AvergeIf属性 WorkksheetFunction类
此错误仅发生在代码的标签更改部分。
我的一些故障排除:
以下是我的代码片段:
'Set Criteria Range for Averages
Set crng = Range(Worksheets("DataImport").Cells(StartRowT, "E"), Worksheets("DataImport").Cells(LastRowT, "E"))
'Set Average time ranfe for Averages
Set trng = Range(Worksheets("DataImport").Cells(StartRowT, "G"), Worksheets("DataImport").Cells(LastRowT, "G"))
'Flavor Change
If I > 0 Then
FlavorA = Application.WorksheetFunction.AverageIf(crng, "Flavor Change", trng)
Else
FlavorA = 0
End If
'Size Change
If M > 0 Then
SizeChangeA = Application.WorksheetFunction.AverageIf(crng, "Size Change", trng)
Else
SizeChangeA = 0
End If
'Label Change
If J > 0 Then
LabelA = Application.WorksheetFunction.AverageIf(crng, "Label Change", trng)
Else
LabelA = 0
End If
我仍在尝试找出代码标签更改部分的运行时错误1004的确切原因。
答案 0 :(得分:3)
如果条件不匹配(并且您获得#DIV / 0),那么这将在您的VBA中触发运行时错误。相反,您可以使用不会引发运行时错误的Application.AverageIf()
版本(即删除WorksheetFunction
),然后使用IsError()
Dim m
'Label Change
If J > 0 Then
m = Application.AverageIf(crng, "Label Change", trng)
LabelA = IIf(IsError(m),"value when no match", m)
Else
LabelA = 0
End If
答案 1 :(得分:2)
导致此错误,因为您的crng
范围内没有任何值为“标签更改”的值,因此您实际上尝试除以零 - #DIV/0
。
您可以在计算范围的平均值之前添加要测试的条件,使用下面的代码(每个平均值计算)
' at least once cell in the range has the value of "Label Change"
If WorksheetFunction.CountIf(crng, "Label Change") > 0 Then
LabelA = Application.WorksheetFunction.AverageIf(crng, "Label Change", trng)
Else
' pop a message-box, or whatever you want
MsgBox "'Label Change' value is not found in range " & crng.Address
End If