简单的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。