【发布时间】:2018-04-12 09:13:30
【问题描述】:
我有一个宏为 D:BC 列执行 sumif,但在这些列之间散布,有些列不需要 sumif,并且在搜索范围内找不到它们的列标题,从而导致一个错误。
发生错误时有什么方法可以让它保留之前的值吗?还是让它什么都不做?
如果我使用 On Error Resume Next,它将采用我的最后一个值并使用该值填充范围,直到下一个非错误值:
Sub Sum()
Dim result As Variant, n&, u&
n = Worksheets("Sum Worksheet").Cells(Rows.Count, 1).End(xlUp).Row - 1
u = Worksheets("Sum Worksheet").Cells(2, Columns.Count).End(xlToLeft).Column
On Error Resume Next
For J = 4 To u
For i = 2 To n
result = Application.WorksheetFunction.SumIf(Sheets("Raw Data").Range("BS:BS"), Sheets("Sum Worksheet").Cells(i + 1, 1).Value, Application.WorksheetFunction.Index(Sheets("Raw Data").Range("A:NK"), 1, Application.WorksheetFunction.Match(Sheets("Sum Worksheet").Cells(2, J).Value, Sheets("Raw Data").Range("A1:NK1"), 0)))
Sheets("Sum Worksheet").Cells(i + 1, J) = result
Next i
Next J
End Sub
提前致谢。
【问题讨论】:
-
好吧
On Error Resume Next没有错误处理。它只是告诉 VBA 忽略并隐藏所有按摩,但仍然会出现错误,您只是看不到它们。 -
最好不要将 Excel 函数名称用作子名称。这是获取损坏的工作簿的好方法。