【问题标题】:Error Handling to do nothing什么都不做的错误处理
【发布时间】: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 函数名称用作子名称。这是获取损坏的工作簿的好方法。

标签: vba excel


【解决方案1】:

在极少数情况下,On Error Resume Next 可以留在代码中,因此删除它可能总是一个好主意。因此,删除On Error Resume Next,然后将嵌套循环编辑为:

For J = 4 To u
    For i = 2 To n
        result = Application.WorksheetFunction.SumIf(Sheets("Raw Data")...
        If IsError(result) Then
            'write your ideas
            'or leave it empty, it will do nothing
        Else
            Sheets("Sum Worksheet").Cells(i + 1, J) = result
        End If
    Next i
Next J

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多