简单的error handlingGoTo或其他

我正在尝试创build一个macros,允许用户点击一个button,Excel工作表将会1:移动到下一个/上一个工作表或2:复制现有工作表,然后移动到复制的工作表。

目前我卡住处理w /一个error handling的情况,我不知道如何解决它。 我不确定是否正确使用On Error。 基本上我需要它去我的下一个子页面,如果一个页面不存在。 如果页面确实存在,只需将ActiveSheet.Index + 1选中即可。

Sub Function1() On Error GoTo fixer Sheets(ActiveSheet.Index + 1).Select fixer: Call Copier2 End Sub Sub Copier2() ActiveWorkbook.ActiveSheet.Copy _ After:=ActiveWorkbook.ActiveSheet End Sub 

任何帮助,非常感谢,我是一个新手在这个东西,所以不要害怕为我愚弄它。

让我们玩一下,来说明这个机制。

首先,我们来提取一个方法,其工作是激活给定的工作表。 该方法将返回一个Boolean值,指示是否成功。 因为我们想要返回一个值 ,所以这将是一个Function过程:

 Private Function ActivateSheet(ByVal index As Long) As Boolean Dim result As Boolean On Error GoTo CleanFail ActiveWorkbook.Sheets(index).Select result = True CleanExit: ActivateSheet = result Exit Function CleanFail: Err.Clear result = False Resume CleanExit End Function 

“开心path”将result赋给True ,然后赋值函数的返回值,然后返回。

“错误path”跳转到清除错误的CleanFail (可能有一些索引超出界限错误),将result赋值为False ,然后Resume CleanExit清除error handling状态,并恢复CleanExit ,它将函数的返回值赋给result然后返回。

macros现在可以做到这一点:

 Public Sub NavigateRight() If Not ActivateSheet(ActiveSheet.Index + 1) Then 'copy the current sheet if there's no next sheet: ActiveSheet.Copy After:=ActiveSheet End If End Sub 

我们也可以有这个:

 Public Sub NavigateLeft() If Not ActivateSheet(ActiveSheet.Index - 1) Then 'copy the current sheet if there's no previous sheet: ActiveSheet.Copy Before:=ActiveSheet End If End Sub 

不要仅仅为了创build过程而创build过程:使用它们来抽象概念 :像Copier2这样的过程并不是真的需要存在,它只是对Excel对象模型包装一个调用 – 更好地将它内联到IMO。