2

我从未使用过 VBA,因此这可以通过一项简单的任务来完成,但我无法让它工作:-) 我只需要在以下代码中捕获运行时错误:

Private Sub CheckBox1_Click()

ActiveWorkbook.Sheets("(X)").Unprotect
ActiveWorkbook.Sheets("(X)").Select
ActiveSheet.Range("F18").Select
'here comes the error
ActiveSheet.Range("$A$2:$X$310").AutoFilter Field:=1, Criteria1:="1"
Sheets("(40 UKÁŽKA)").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
4

2 回答 2

2

欢迎来到老派错误处理。

您正在寻找的是

Sub MySub()
  On Error Resume Next
    DoMyStuff()
End Sub

如果你想吞下这个问题,例如相当于 Try Catch End

或者

Sub MySub()
  On Error Goto ErrorHandler
    DoMyStuff()
  KeepGoing :
    DoSomeMoreStuffAnyway() 
  Exit Sub

ErrorHandler:
  HandleTheError()
Exit Sub

您可以从变量 Err 中获取错误编号。您还可以在错误发生后修复并调用 Resume 以转到下一行代码您也可以对标签执行 Resume To a 标签,例如上面的 Resume KeepGoing。

更多信息在这里MSDN VBA 错误处理

于 2013-08-17T12:39:44.817 回答
2

使用On Error. 有关该主题的良好讨论,请参阅this

      On Error GoTo ErrHandler

      <do things>

      On Error GoTo  0 'Turn default error handling back on

      Exit Sub

 ErrHandler:

     If Error.Number = xxxx Then

         <error processing>

     End If

     (then Resume )(or  Resume Next) (or do nothing & let sub end)

 End Sub     
于 2013-08-17T12:40:05.253 回答