【发布时间】:2012-08-13 11:47:51
【问题描述】:
我正在尝试循环浏览 Excel 中的表格。该表的前三列有文本标题,其余的有日期作为标题。我想将这些日期按顺序分配给一个日期类型的变量,然后根据日期执行一些操作
为此,我在 myTable.ListColumns 上使用了 foreach 循环。由于前三列没有日期标题,我尝试设置循环,以便在将标题字符串分配给日期类型变量时出错,循环直接进入下一列
这似乎适用于第一列。但是,当第二列的标题被“分配”给日期类型变量时,宏会遇到错误,即使它位于错误处理块中
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 语句停止工作?
【问题讨论】:
-
与其使用错误作为控制结构,也许在这种情况下使用带有 IsDate 函数的 IF 会更合适?
-
如果您“盲目地”处理错误 - 而不是对错误类型采取特定操作 - 那么您应该在循环外使用
On Error Resume Next。目前,您正在对每一列重新使用错误处理。 -
@brettdj,我不认为你可以继续下一个。如果日期转换失败,整个想法是跳过“更多代码”代码。所以你需要进入一个处理程序,以便你可以恢复到特定的行。此外,您只希望为日期转换启用处理程序,而不是整个循环体。
-
@paxdiablo 经过反思,我同意。我想在此处查看“更多代码”。
标签: vba excel for-loop error-handling