在不使用错误处理程序的情况下处理Application.Workbooks的错误

时间:2018-07-11 11:55:54

标签: vba excel-vba

我正在尝试将打开的工作簿分配给工作簿对象。如果该工作簿尚未打开,则将引发错误。我正在使用错误处理程序来处理错误。

这对我有用:

On Error GoTo OpenWorkbookError

Set Uwk = Application.Workbooks(WbkName)

OpenWorkbookError:
If Err <> 0 Then
  Err.Clear
  MsgBox ("Please Open the Required Workbook")
  Exit Sub
End If

但是有一种方法可以避免在这种情况下使用错误处理程序。

1 个答案:

答案 0 :(得分:1)

一种方法是检查每个工作簿名称,但是@SJR提供的链接中的函数有什么问题?

在提供的代码中,您已将错误处理程序保留在代码主体内-在过程结束时,错误处理程序应出现在Exit SubEnd Sub之间。

类似的事情在没有错误处理程序的情况下也可以工作,但是它比较慢,因为它需要检查每个工作簿:

Sub Test()

    Dim Uwk As Workbook
    Dim WbkName As String

    WbkName = "PERSONAL.XLSB"

    For Each Uwk In Workbooks
        If Uwk.Name = WbkName Then
            Exit For
        End If
    Next Uwk

    If Not Uwk Is Nothing Then
        MsgBox Uwk.Name & " found!"
    Else
        MsgBox "Not found."
    End If

End Sub

您的代码版本应该在主体之外具有错误处理程序:

Sub Test1()

    Dim WbkName As String
    Dim UWk As Workbook

    WbkName = "PERSONAL1.XLSB"

    On Error GoTo OpenWorkbookError

    Set UWk = Workbooks(WbkName)

TidyExit:
    'Close anything that needs closing and Exit.

Exit Sub  '<< End of main body of procedure.

OpenWorkbookError:
    Select Case Err.Number
        Case 9 'Subscript out of range.
            MsgBox "Please open the required workbook."
            Resume TidyExit
        Case Else
            MsgBox "Error " & Err.Number & vbCr & _
                Err.Description, vbOKOnly + vbCritical
            Resume TidyExit
    End Select

End Sub  '<< End of procedure.
相关问题