错误GoTo显示无错误时(针对选择案例)

时间:2018-05-09 13:40:14

标签: excel excel-vba error-handling vba

我已经创建了一个包含多个宏的Excel,这个特殊的部分真的让我感到难过,因为它在24小时前完美运行并且我没有对它进行任何更改。

每当有人打开Excel时,我都会弹出一个表单(Access),他们必须输入他们的姓氏,然后输入他们名字的表格和另一张名为“统计数据”的表格。他们会看到他们。其他一切都隐藏了。现在,如果有人投入了#NO;'它是主密码'如果你愿意,几乎一切都显示出来。

如果他们没有正确地将输入资本化或拼错,它应该会发出错误信息。但是,即使输入不是错误,表单也会输出错误消息。将显示正确的工作表,但无论您输入什么,都会出现错误消息框。我知道必须有一个更好的方法,而不是错误GoTo'但我不熟练使用'尝试......'

以下是代码:

Private Sub CommandButton1_Click()
    Dim pword As String
    On Error GoTo endit
          pword = TextBox1
          Select Case pword
          Case Is = "NOI": Call UnHideAllSheets
          Case Is <> "NOI": Sheets(TextBox1.Value).Visible = True
    End Select
    Sheets("ERROR").Visible = False
    Sheets("Stats").Visible = True
    Sheets(TextBox1.Value).Activate
    Me.Hide
    Exit Sub
    endit: MsgBox "Incorrect Input: check spelling and capitalization"
End Sub

我没有为个人设置绝对密码&#39; Case Is =&#39;因为这适用于那些完全不知道如何对VBA进行任何更新或更改的人。所有将使用和更新的人都不知道excel中的开发人员选项卡。

以下是案例在引用Call UnHideAllSheets时引用的代码:

Sub UnHideAllSheets()
    Application.ScreenUpdating = False

    Dim n As Single
    For n = 1 To Sheets.Count
        Sheets(n).Visible = True
    Next n

    Application.ScreenUpdating = True

    Sheets("CleanData").Visible = False
    Sheets("Template").Visible = True
    Sheets("ERROR").Visible = False
    Sheets("2018").Activate
End Sub

所有这些都是我从其他地方修改过的代码。就像我说的那样,它在24小时前完美运行。任何帮助非常感谢!

1 个答案:

答案 0 :(得分:0)

  1. 您不需要Select声明这样的简单If … Else即可。
  2. 始终在您预期错误的行之后停用错误处理程序。否则,稍后发生的任何错误也将触发该错误处理程序,并且您可能会收到误导性错误消息。
  3. 所以我们想出了类似的东西。

    Private Sub CommandButton1_Click()
        Dim pword As String
        pword = TextBox1.Value
    
        If pword = "NOI" Then
            UnHideAllSheets
        Else
            On Error GoTo endit
            Sheets(TextBox1.Value).Visible = True
            On Error GoTo 0 'always deactivate error handler after the expected error
        End If
    
        Sheets("ERROR").Visible = False
        Sheets("Stats").Visible = True
        Sheets(TextBox1.Value).Activate
        Me.Hide
    
        Exit Sub
    endit: 
        MsgBox "Incorrect Input: check spelling and capitalization"
    End Sub