gpt4 book ai didi

vba - GoTo 或其他的简单错误处理

转载 作者:行者123 更新时间:2023-12-02 22:29:44 29 4
gpt4 key购买 nike

我正在尝试创建一个宏,允许用户单击按钮,Excel 工作表将执行 1:移至下一个/上一个工作表或 2:复制现有工作表,然后移至复制的工作表。

目前我陷入了处理错误处理情况的困境,并且不知道如何解决它。我不确定我是否正确使用了 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

非常感谢任何帮助,我在这方面是个新手,所以不要害怕为我简化它。

最佳答案

让我们来玩点乐子,来说明其中的机制。

首先让我们提取一个方法,其作用是激活给定的工作表。该方法将返回一个 bool 值,指示它是否成功。因为我们想要返回一个值,所以这将是一个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

“幸福之路”将 result 赋给 True,然后将函数的返回值赋给 result,然后返回。

“错误路径”跳转到CleanFail,这会清除错误(可能是一些索引越界错误),并将结果分配给False,然后Resume CleanExit 清除错误处理状态并恢复CleanExit,后者分配函数的返回值到结果,然后返回。

宏现在可以执行此操作:

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

不要仅仅为了制作程序而制作程序:用它们来抽象概念:像Copier2这样的程序实际上并不需要存在,它只是包装对 Excel 对象模型的单个调用 - 在我看来,最好将其内联。

关于vba - GoTo 或其他的简单错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47837475/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com