我有一个宏,并且代码的一部分与: 1)检测列是否包含空单元格 - 如果是的话用一些值填充它们 2)检测列包含单元格包含错误(如N/A),如果这样填充它们的某些值VBA在代码执行期间更改错误处理方法
现在,如果该列中没有错误/空单元格,找到它们的行会给出“运行时错误1004否细胞被发现“。
我使用错误处理来跳过这与GoTo。
下面是代码 - 第一个错误处理GoTo完美工作,第二个错误处理预期错误,虽然有错误处理GoTo集合,但似乎不起作用。代码注释:
On Error GoTo EErrorOne
'depending on file I get, below line will generate error and code successfully skips to ErrorOne label
Workbooks(nazwawb).Sheets(szitnr).Columns(ktorepole).SpecialCells (xlCellTypeBlanks)
' code to be skipped
Workbooks(nazwawb).Sheets(szitnr).Columns(ktorepole).Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Value = "Some Value"
' end of code to be skipped
EErrorOne:
' successfully skipped error line by now. Below line should set a new Error handling procedure.
On Error GoTo EErrorTwo
Workbooks(nazwawb).Sheets(szitnr).Columns(ktorepole).Select
' Below line generates an error but does not skip to EErrorTwo label as detailed in the current Error handling procedure
Selection.SpecialCells(xlCellTypeFormulas, 16).Select
' code to be skipped
Selection.SpecialCells(xlCellTypeFormulas, 16).Select
Selection.Value = "Some Value"
' end of code to be skipped
EErrorTwo:
' Below line should reset error handling procedure to normal for subsequent handling of other errors:
On Error GoTo 0
看来,错误处理程序(转到特定的标签)被忽略,相反,错误消息显示为,如果错误处理被重置为0转到如何跳过第二错误?
最好是创建不依赖错误处理程序来运行的代码。请检查导致错误的情况,并跳过您知道会导致错误的代码。 – braX
你的代码做了太多事情。每个过程一个处理器。您在处理错误时无法处理新的错误,您需要*首先处理第一个错误*。 Error Error在错误处理程序中没用,*你已经处于错误状态*,你期望发生什么? FWIW将很快成为[Rubberduck](http://rubberduckvba.com)的检查。 –
braX,我试着将相关的单元格分配给一个范围,然后设置是否不是rangename,但它仍然评估为错误消息。 Mat's Mug,我不是这方面的专家,虽然我怀疑我需要在重新开始之前退出错误处理,但我认为On Error GoTo 0会重置错误处理 - 事实证明它应该已经On Error GoTo -1,正如我接受的问题所回答的那样。无论如何,我没有重置错误处理,我应该有,这是我的问题的解决方案。谢谢大家 – FilipB