使用Resume Next在循环中处理错误

强调

作为VBA的新手,我们将不胜感激。我程序的基本要点是遍历电子表格的各列,并在指定范围内计算每列中非空白单元格的数量。这是我的电子表格外观的示例。

1个 2 3
1个 事情
2 事情
3 事情

如果该列中的所有单元格均为空白,则VBA会引发1004错误,找不到任何单元格。我要说的是,如果发生1004错误,请将非空白单元的计数(nonBlank = 0)设置为零,并且如果没有错误发生,则正常计数。在类似Python的系统中,我会使用try / except。这是我的尝试。

For i = 1 To 3
    
    On Error Resume Next
    Set selec_cells = Sheet1.Range(Sheet1.Cells(FirstRow, i), Sheet1.Cells(LastRow, i)).SpecialCells(xlCellTypeVisible).Cells.SpecialCells(xlCellTypeConstants)
    
    If Err.Number <> 1004 Then
        nonBlank = 0
    Else
        nonBlank = selec_cells.Count
    End If
    On Error GoTo -1

 Next i

我的问题是,当我运行此代码时,即使列2应该返回3,它每次也会吐出0。谢谢!

编辑:selec_cells是抛出错误的原因。

VBasic2008

错误处理

  • 有没有On Error Goto -1VBA,这是一个VB事情(这些都是链接到不同的页面)。一个提示是,如果您用Google搜寻VBA东西,只需放在VBA 要寻找的东西前面。

  • 使用On Error Resume Next(延迟错误捕获)时,您应该最大程度地“应用”一行或两行,并使用On Error Goto 0(禁用错误捕获)或其他错误处理程序“关闭”

  • 您对的使用On Error Resume Next是不可接受的,因为在这种特殊情况下,我们可以测试范围:1.延迟错误处理,2.尝试设置范围,3.禁用错误处理。如果存在错误,则不会设置范围,因此If Not rg Is Nothing Then可以将其转换为类似“如果rg是那么的东西”(双重否定)或如果已经创建了对范围的引用Then

  • 第二种解决方案说明了一种情况,其中主错误处理程序正在处理除SpecialCells具有自己的错误处理程序的错误以外的所有错误Resume Next表示在发生错误的行之后继续行。请注意该Exit Sub行,并注意Resume ProcExit将代码重定向到标签的位置。

  • 下面说明了两种处理方式。在这个阶段,我建议您使用第一个,并记得On Error Goto 0每次使用时On Error Resume Next(一两行)使用“结束”

代码

Option Explicit

Sub testOnErrorResumeNext()
    
    Const FirstRow As Long = 2
    Const LastRow As Long = 11
    
    Dim rg As Range ' ... additionally means 'Set rg = Nothing'.
    Dim nonBlank As Long ' ... additionally means 'nonBlank = 0'.
    Dim j As Long
    
    For j = 1 To 3 ' Since it's a column counter, 'j' or 'c' seems preferred.
        
        ' Since you're in a loop, you need the following line.
        Set rg = Nothing
        On Error Resume Next
        Set rg = Sheet1.Range(Sheet1.Cells(FirstRow, j), _
            Sheet1.Cells(LastRow, j)).SpecialCells(xlCellTypeVisible) _
            .Cells.SpecialCells(xlCellTypeConstants) 
        On Error GoTo 0
        
        If Not rg Is Nothing Then
            nonBlank = rg.Cells.Count
        Else
            ' Since you're in a loop, you need the following line.
            nonBlank = 0
        End If
    
        Debug.Print nonBlank

    Next j

End Sub

Sub testOnError()
    
    On Error GoTo clearError
    
    Const FirstRow As Long = 2
    Const LastRow As Long = 11
    
    Dim rg As Range ' ... additionally means 'Set rg = Nothing'.
    Dim nonBlank As Long ' ... additionally means 'nonBlank = 0'.
    Dim j As Long
    
    For j = 1 To 3 ' Since it's a column counter, 'j' or 'c' seems preferred.
        
        ' Since you're in a loop, you need the following line.
        Set rg = Nothing
        On Error GoTo SpecialCellsHandler
        Set rg = Sheet1.Range(Sheet1.Cells(FirstRow, j), _
            Sheet1.Cells(LastRow, j)).SpecialCells(xlCellTypeVisible) _
            .Cells.SpecialCells(xlCellTypeConstants) 
        On Error GoTo clearError
        
        If Not rg Is Nothing Then
            nonBlank = rg.Cells.Count
        End If
          
        Debug.Print nonBlank

    Next j
    
ProcExit:
    Exit Sub ' Note this.

SpecialCellsHandler:
    ' Since you're in a loop, you need the following line.
    nonBlank = 0
    Resume Next

clearError:
    MsgBox "Run-time error '" & Err.Number & "': " & Err.Description
    Resume ProcExit

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在不使用“on error resume next”的情况下摆脱错误

来自分类Dev

VBA错误处理RESUME

来自分类Dev

循环中处理语句错误

来自分类Dev

使用“next”方法跳过 Ruby 中 .each 循环中的项目

来自分类Dev

Python:处理无值的Attrgetter可以在循环中使用

来自分类Dev

使用双引号在批处理FOR循环中传递多个参数?

来自分类Dev

在while循环中使用完成处理程序

来自分类Dev

NSDateFormatter.dateFromString在for循环中,使用@try处理无效格式

来自分类Dev

如何在for循环中使用多重处理-Python

来自分类Dev

如何在 for 循环中使用 matplotlib 处理多图

来自分类Dev

在 .map 循环中使用 setState 未处理的拒绝

来自分类Dev

在循环R中使用next in错误

来自分类Dev

奇怪的错误。在循环中使用rand()和数组

来自分类Dev

在带有快速枚举的for循环中使用块的错误

来自分类Dev

Lambda在for循环中使用时传递错误的参数

来自分类Dev

在循环中使用ffmpeg时出现奇怪的错误

来自分类Dev

循环中使用SQL查询的自动化错误

来自分类Dev

在循环中使用getline()时出现分段错误

来自分类Dev

在循环中使用时 zip 输出在错误的位置

来自分类Dev

在 for 循环中使用 fprintf 会提供错误的值

来自分类Dev

在 FOR 循环中使用 FORFILES 并尝试覆盖错误

来自分类Dev

在循环中使用 setValue() 会返回“未捕获的错误”

来自分类Dev

Windows批处理脚本,并使用“!”处理文件名 For循环中的感叹号

来自分类Dev

使用pry-byebug时如何在pry循环中使用next语句

来自分类Dev

使用pry-byebug时如何在pry循环中使用next语句

来自分类Dev

使用javascript在循环中注入元素并附加Click事件处理程序

来自分类Dev

在循环中使用%time和%date时,批处理脚本中的时间戳相同

来自分类Dev

在批处理文件FOR循环中的子字符串操作中使用变量

来自分类Dev

使用jQuery在无限循环中对单词宽度进行动画处理

Related 相关文章

  1. 1

    在不使用“on error resume next”的情况下摆脱错误

  2. 2

    VBA错误处理RESUME

  3. 3

    循环中处理语句错误

  4. 4

    使用“next”方法跳过 Ruby 中 .each 循环中的项目

  5. 5

    Python:处理无值的Attrgetter可以在循环中使用

  6. 6

    使用双引号在批处理FOR循环中传递多个参数?

  7. 7

    在while循环中使用完成处理程序

  8. 8

    NSDateFormatter.dateFromString在for循环中,使用@try处理无效格式

  9. 9

    如何在for循环中使用多重处理-Python

  10. 10

    如何在 for 循环中使用 matplotlib 处理多图

  11. 11

    在 .map 循环中使用 setState 未处理的拒绝

  12. 12

    在循环R中使用next in错误

  13. 13

    奇怪的错误。在循环中使用rand()和数组

  14. 14

    在带有快速枚举的for循环中使用块的错误

  15. 15

    Lambda在for循环中使用时传递错误的参数

  16. 16

    在循环中使用ffmpeg时出现奇怪的错误

  17. 17

    循环中使用SQL查询的自动化错误

  18. 18

    在循环中使用getline()时出现分段错误

  19. 19

    在循环中使用时 zip 输出在错误的位置

  20. 20

    在 for 循环中使用 fprintf 会提供错误的值

  21. 21

    在 FOR 循环中使用 FORFILES 并尝试覆盖错误

  22. 22

    在循环中使用 setValue() 会返回“未捕获的错误”

  23. 23

    Windows批处理脚本,并使用“!”处理文件名 For循环中的感叹号

  24. 24

    使用pry-byebug时如何在pry循环中使用next语句

  25. 25

    使用pry-byebug时如何在pry循环中使用next语句

  26. 26

    使用javascript在循环中注入元素并附加Click事件处理程序

  27. 27

    在循环中使用%time和%date时,批处理脚本中的时间戳相同

  28. 28

    在批处理文件FOR循环中的子字符串操作中使用变量

  29. 29

    使用jQuery在无限循环中对单词宽度进行动画处理

热门标签

归档