繁体   English   中英

Excel VBA出现错误错误

[英]Excel VBA On Error error

我对编程很陌生,在学习Python的同时也开始尝试Excel VBA。 我对最后一个有疑问。

我有一些大型Excel工作表,并试图验证特定列中的数据是否与某些列中另一工作表上的数据匹配,因为它们应该通过这些值相互关联(并通过第三个值进行连接)。 为了使这一点更加困难,这两个列都可能包含多个用“ |”分隔的值。 因此,我将这些值拆分为一个列表,并尝试遍历它们以确保所有这些值均已正确设置,连接将正常工作。

只要一切都好,一切都很好:)但是,我有一个问题,其中一个列中有两个值,而另一列中只有一个。 我希望将此差异记录在纸上,然后继续进行下一项。

似乎适用于我的方法是使用“ On Error GoTo ErrHandler”,然后在另一张纸上记录错误,然后再使用Resume继续。

这是我想出的:

            For h = 0 To UBound(Split1())
                 For j = 1 To GetMaxRow("SpecificSheet", A)
                     On Error GoTo ErrHandler:
                        If Sheets("SpecificSheet").Cells(j, 1).Value = Split1(h) And Sheets("SpecificSheet").Cells(j, 2).Value = Split2(h) Then
                                DependencyOk = DependencyOk + 1
                        End If
                    Next j
            Next h
ErrProceed:

ErrHandler也是:

ErrHandler:
        Sheets("Issues").Cells(x, 1) = "IssueDescription"
    GoTo ErrProceed

它停止在第2行,且下标超出了Split2(h)的范围,而不是继续到ErrHandler然后进入ErrProceed。 我觉得这一定很明显,但是我无法使它正常工作,而且我无法在Excel VBA中找到其他方式(例如try / except)。

更新:

试图澄清一些事情。 问题的根源在于,Split2列表比Split1短-这是输入数据的问题,我想抓住这一点。 我从单元格中获取拆分值,其中值之间用“ |”分隔 特点:

    CellValue = Sheets("SomeSheet").Cells(RowNumber, ColumNumber)
    CellValueSplit() = Split(CellValue, "|")

然后迭代为:

   For h = 0 To UBound(Split1())

因此,当Split1移至例如第3个值时,Split2引发错误,脚本停止。 到目前为止,我能做的最好的事情就是让它继续循环,但是由于这是一个相当大的工作表,它将填充相同的错误报告ca。 在这种情况下,请避免20万次。 因此,我希望它从超出此范围错误后的循环开始,并继续检查下一个值。

谢谢您到目前为止的帮助!

您的语法有问题。 正确的Error语句语法为:

On Error GoTo <string>
On Error Resume Next
On Error GoTo 0

使用On Error GoTo <string>时,末尾没有“:”。 在创建目标位置之前,“:”不起作用。 例:

On Error GoTo Here
'// ---- Do something ---- //
Here:
'// ---- Handle the error ---- //

如果您使用On Error Resume Next ,那么您是在告诉机器忽略错误并继续执行下一行代码。

当您使用On Error Return To 0 ,VBA会将其错误处理重置为默认值。 On Error Resume Next不再需要时使用On Error Resume Next插入On Error Return To 0时,这是一个好习惯。 On Error Resume Next上,很有可能破坏您的代码并使其表现异常。 更不用说调试可能是一个真正的噩梦。 请查阅MicrosoftVBA手册,以获取更详细的说明。

最后,如果您的问题得到回答,则应将其标记为已回答。

简短而快速的版本是VBA错误处理例程仅处理实际代码执行中的错误,当不满足代码表示的条件时,它们不会触发。

就您而言,您根本不需要任何错误处理。 在大多数情况下,实际上最好避免On Error GoTo ... 在某些情况下,这是不可避免的,但很少见。

尝试以下IF THEN ELSE块:

If Sheets("SpecificSheet").Cells(j, 1).Value = Split1(h) And Sheets("SpecificSheet").Cells(j, 2).Value = Split2(h) Then
    DependencyOk = DependencyOk + 1
Else
    Sheets("Issues").Cells(x, 1) = "IssueDescription"
End If

其实我才发现问题。 它是由前面几行的If语句后留下的“:”引起的。 我仍然不太了解它的作用,但是我建议不要重现它:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM