【问题标题】:vba error number 9 subscript out of rangevba 错误编号 9 下标超出范围
【发布时间】:2015-05-08 21:34:41
【问题描述】:

我正在尝试制作 Excel 2007 vba 代码以使用用户窗体选择工作表。在测试时,如果我输入工作簿中不存在的工作表名称,我会收到 'Subscript out of range' 错误。我的代码如下。

Private Sub Okbtn_Click()
sheetname = Me.ComboBox1.Value
If sheetname = "" Then
    Unload Me
    MsgBox "Sheet Name not enetered", vbExclamation, "Hey!"
    Exit Sub
End If

ThisWorkbook.Sheets(sheetname).Activate 'Error points here!!

On Error GoTo errmsg
'If Error.Value = 9 Then GoTo errmsg
Unload Me
MsgBox "Now you are in sheet: " & sheetname & "!", vbInformation, "Sheet Changed"

errmsg:
MsgBox ("Sheet name not found in " & ThisWorkbook.Name & " !")
End Sub

错误在 ThisWorkbook.Sheets(sheetname).Activate 中。我尝试在问题行之前和之后放置一些错误处理技巧,但我得到了相同的错误 9。

我对编码很陌生。我想我正确地解释了这个问题。我想避免弹出错误,但应该显示自定义消息。

【问题讨论】:

    标签: vba excel error-handling subscript


    【解决方案1】:

    如果你的错误处理被包裹在单行测试中,如果工作表存在,那会更清楚

    例如,您当前的代码会将任何错误(例如工作表被隐藏)标记为工作表不存在。

    Private Sub Okbtn_Click()
    Dim strSht As String
    Dim ws As Worksheet
    
    strSht = Me.ComboBox1.Value
    
    If Len(strSht) = 0 Then
        Unload Me
        MsgBox "Sheet Name not entered", vbExclamation, "Hey!"
        Exit Sub
    End If
    
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(strSht)
    On Error GoTo 0
    
    
    If Not ws Is Nothing Then
         If ws.Visible Then
            Application.Goto ws.[a1]
            MsgBox "Now you are in sheet: " & strSht & "!", vbInformation, "Sheet Changed"
        Else
            MsgBox ("Sheet exists but is hidden")
        End If
    Else
        MsgBox ("Sheet name not found in " & ThisWorkbook.Name & " !")
    End If
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      您需要在执行可能导致错误的指令之前设置错误处理程序。像这样的

      Private Sub Okbtn_Click()
      sheetname = Me.ComboBox1.Value
      If sheetname = "" Then
          Unload Me
          MsgBox "Sheet Name not enetered", vbExclamation, "Hey!"
          Exit Sub
      End If
      
      On Error GoTo errmsg
      
      ThisWorkbook.Sheets(sheetname).Activate 'Error points here!!
      
      
      'If Error.Value = 9 Then GoTo errmsg
      Unload Me
      MsgBox "Now you are in sheet: " & sheetname & "!", vbInformation, "Sheet Changed"
      
      Exit Sub ' Avoid executing handler code when ther is no error
      errmsg:
      MsgBox ("Sheet name not found in " & ThisWorkbook.Name & " !")
      End Sub
      

      【讨论】:

        【解决方案3】:

        如果您将On Error GoTo errmsg 代码行移动到工作表激活上方,则错误应由错误陷阱例程处理。如果成功,您只需要在到达相同的例程之前退出子程序。

            On Error GoTo errmsg
            ThisWorkbook.Sheets(sheetname).Activate 'Error points here!!
        
            Unload Me
            MsgBox "Now you are in sheet: " & sheetname & "!", vbInformation, "Sheet Changed"
            Exit Sub
        
            errmsg:
            MsgBox ("Sheet name not found in " & ThisWorkbook.Name & " !")
        
        End Sub
        

        【讨论】:

          【解决方案4】:

          把On Error GoTo errmsg放在ThisWorkbook.Sheets(sheetname).Activate上面

          '''''
          On Error GoTo errmsg
          ThisWorkbook.Sheets(sheetname).Activate
          '''''
          

          错误处理必须始终在您可以收到错误的行之前

          【讨论】:

          • 感谢您帮助我:D
          猜你喜欢
          • 2017-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-19
          • 2015-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多