我正在尝试将打开的工作簿分配给工作簿对象。如果该工作簿尚未打开,则将引发错误。我正在使用错误处理程序来处理错误。
这对我有用:
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
但是有一种方法可以避免在这种情况下使用错误处理程序。
答案 0 :(得分:1)
一种方法是检查每个工作簿名称,但是@SJR提供的链接中的函数有什么问题?
在提供的代码中,您已将错误处理程序保留在代码主体内-在过程结束时,错误处理程序应出现在Exit Sub
和End 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.