VBA:查看文件是否打开的两种方法

Taw*_*awm 2 excel file-io vba excel-vba

我有两种方法,我认为如果文件是打开的话应该告诉我.

方法1(错误:下标超出范围):

If Not Workbooks(filename) Is Nothing Then
    Workbooks.Open (filename)
End If
Run Code Online (Sandbox Code Playgroud)

方法2:

If Not IsWorkbookOpen(filename) Then
    Workbooks.Open (filename)
End If
Run Code Online (Sandbox Code Playgroud)

在哪里IsWorkbookOpen():

Private Function IsWorkbookOpen(wbname) As Boolean

Dim wBook As Workbook
Set wBook = Nothing

On Error Resume Next
Set wBook = Workbooks(wbname)

If wBook Is Nothing Then
    IsWorkbookOpen = False
    Else: IsWorkbookOpen = True
End If

End Function
Run Code Online (Sandbox Code Playgroud)

除此之外On Error Resume Next,方法1似乎与方法2几乎相同.

任何人都可以解释为什么方法1给出错误吗?

谢谢.

Dic*_*ika 5

它们都给出了一个超出范围误差的下标.但是在方法2中,您可以使用On Error Resume Next.

Sub SeeError()

    On Error Resume Next
    Debug.Print Workbooks("DoesNotExist").Name

    Debug.Print Err.Description

End Sub
Run Code Online (Sandbox Code Playgroud)

这会在立即窗口中打印"下标超出范围".On Error语句不会停止发生错误,它只是处理它.方法1不处理错误,因此默认错误处理(停止执行并报告错误)生效.