使用VBA宏+;在excel工作表中前后移动的按钮,按顺序隐藏的工作表中断功能

使用VBA宏+;在excel工作表中前后移动的按钮,按顺序隐藏的工作表中断功能,excel,vba,Excel,Vba,我有一对按钮(“continue”和“back”),可以前后移动用户的工作表 “前进”按钮似乎能够在可见的工作表中顺利前进,跳过隐藏的工作表 但是,如果活动工作表和以前可见的工作表之间存在隐藏工作表,则“后退”按钮将无法执行任何操作 我很困惑,因为两者的代码实际上是相同的: 转发:(工作正常) Sub-MoveNext() 出错时继续下一步 工作表(ActiveSheet.Index+1)。激活 如果错误编号为0,则为工作表(1)。激活 端接头 返回:(在隐藏工作表处失败) Sub-MoveB

我有一对按钮(“continue”和“back”),可以前后移动用户的工作表

“前进”按钮似乎能够在可见的工作表中顺利前进,跳过隐藏的工作表

但是,如果活动工作表和以前可见的工作表之间存在隐藏工作表,则“后退”按钮将无法执行任何操作

我很困惑,因为两者的代码实际上是相同的:

转发:(工作正常)

Sub-MoveNext()
出错时继续下一步
工作表(ActiveSheet.Index+1)。激活
如果错误编号为0,则为工作表(1)。激活
端接头
返回:(在隐藏工作表处失败)

Sub-MoveBack()
出错时继续下一步
工作表(ActiveSheet.Index-1)。激活
如果错误编号为0,则为工作表(1)。激活
端接头

每个按钮都被绑定到上面合适的子按钮。

有趣!看起来,如果您尝试激活隐藏的工作表,它将默认为下一个最高索引。这就是为什么它在上升时有效,但在下降时无效。我编写了一个例程,检查是否有较低的可见表,如果有,则移动到该表:

Sub MoveBack()
Dim PrevVisibleIndex As Long

PrevVisibleIndex = ActiveSheet.Index
With ThisWorkbook
    Do
        PrevVisibleIndex = Application.WorksheetFunction.Max(PrevVisibleIndex - 1, 1)
    Loop Until .Worksheets(PrevVisibleIndex).Visible = True Or PrevVisibleIndex = 1
    .Worksheets(PrevVisibleIndex).Activate
End With
End Sub

+一个好问题;请注意,
On Error Resume Next
后面应该紧跟着
On Error Goto 0
,紧跟在您期望在-
Resume Next上发生错误的行之后--
Resume Next
基本上完全禁用了错误捕获功能(即它传播到
End Sub
之外)如果你的VBA项目比这稍微复杂一点,可能会让人头疼。啊!谢谢你的建议,我是VBA新手,所以非常感谢这些建议。非常感谢你抽出时间为我写一篇文章。有趣的re:解释为什么这些看似对称的函数表现不好,很高兴知道。
Sub MoveBack()
On Error Resume Next
Sheets(ActiveSheet.Index - 1).Activate
If Err.Number <> 0 Then Sheets(1).Activate
End Sub
Sub MoveBack()
Dim PrevVisibleIndex As Long

PrevVisibleIndex = ActiveSheet.Index
With ThisWorkbook
    Do
        PrevVisibleIndex = Application.WorksheetFunction.Max(PrevVisibleIndex - 1, 1)
    Loop Until .Worksheets(PrevVisibleIndex).Visible = True Or PrevVisibleIndex = 1
    .Worksheets(PrevVisibleIndex).Activate
End With
End Sub