gpt4 book ai didi

vba - Excel VBA : On Error Goto statement not working inside For-Loop

转载 作者:行者123 更新时间:2023-12-01 17:29:40 24 4
gpt4 key购买 nike

我正在尝试循环浏览 Excel 中的表格。该表的前三列有文本标题,其余的有日期作为标题。我想将这些日期依次分配给日期类型变量,然后根据日期执行一些操作

为此,我在 myTable.ListColumns 上使用 foreach 循环。由于前三列没有日期标题,我尝试设置循环,以便如果将标题字符串分配给日期类型变量时出现错误,则循环直接进入下一列

这似乎适用于第一列。但是,当第二列的标题“分配”给日期类型变量时,宏会遇到错误,即使它位于错误处理 block 内

Dim myCol As ListColumn
For Each myCol In myTable.ListColumns
On Error GoTo NextCol

Dim myDate As Date
myDate = CDate(myCol.Name)

On Error GoTo 0

'MORE CODE HERE

NextCol:
On Error GoTo 0
Next myCol

重申一下,错误是在循环的第二轮语句处抛出的

myDate = CDate(myCol.Name)

任何人都可以解释为什么 On Error 语句停止工作吗?

最佳答案

使用如图所示的代码,当您点击 next 时,您实际上仍然被认为错误处理例程中。陈述。

这意味着在您从当前错误处理程序恢复之前,不允许使用后续错误处理程序。

更好的架构是:

    Dim myCol As ListColumn
For Each myCol In myTable.ListColumns
On Error GoTo ErrCol
Dim myDate As Date
myDate = CDate(myCol.Name)
On Error GoTo 0
' MORE CODE HERE '
NextCol:
Next myCol
Exit Sub ' or something '

ErrCol:
Resume NextCol

这清楚地描绘了常规代码中的错误处理,并确保当前正在执行的错误处理程序在您尝试设置另一个处理程序之前完成。

This site对问题有很好的描述:

<小时/>

错误处理 block 和错误转到

错误处理 block ,也称为错误处理程序,是通过 On Error Goto <label>: 将执行转移到的代码部分。陈述。该代码应该设计为修复问题并恢复主代码块中的执行,或者终止过程的执行。您不能使用On Error Goto <label>:语句只是跳过行。例如,以下代码将无法正常运行:

    On Error GoTo Err1:
Debug.Print 1 / 0
' more code
Err1:
On Error GoTo Err2:
Debug.Print 1 / 0
' more code
Err2:

当出现第一个错误时,执行转移到 Err1: 之后的行。当第二个错误发生时,错误处理程序仍然处于事件状态,因此第二个错误不会被 On Error 捕获。声明。

关于vba - Excel VBA : On Error Goto statement not working inside For-Loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11998836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com