VBA“出现错误时转到”未超过错误

时间:2019-05-30 08:37:42

标签: vba excel-vba

达米安(Damian)的解决方案有效,但没有人知道为什么On Error Goto不会超过屏幕截图中的每种错误,而是通过#DIV/0!而不是其他任何错误。

我正在为清理修剪工作簿中的所有单元格编写代码。幸运的是,我可以使用以下代码来做到这一点。

 On Error GoTo c

    For Each ws In wb.Worksheets

        Set rng = ActiveSheet.UsedRange

        For Each cl In rng

                Debug.Print cl.Address
                cl.Value = WorksheetFunction.Clean(Trim(cl.Value))
                GoTo l
c:

counter = counter + 1

l:
        Next

    Next

但是,当任何单元格包含错误值(如下面的屏幕快照)时,就会出现问题。

Errors

VBA的On Error Goto能够克服#DIV/0!错误并将其值分配给计数器,但不能为其他错误分配值。它卡在那些细胞上。

1 个答案:

答案 0 :(得分:1)

这应该可以解决您的问题:

 On Error GoTo c
    For Each ws In wb.Worksheets
        Set Rng = ws.UsedRange 'activesheet will always be the sheet you are using clicking the macro button
        For Each cl In Rng
                Debug.Print cl.Address
                If Not IsError(cl) Then cl = WorksheetFunction.Clean(Trim(cl)) 'check first if the value is an error, if it's not then trim
                GoTo l
c:
counter = counter + 1
l:
        Next

    Next

使用UsedRange的想法将循环遍历所有单元格,即使它们为空,但曾经使用过一次。当心。