我有两种方法,我认为应该可以判断文件是否打开。
方法 1(错误:下标超出范围):
If Not Workbooks(filename) Is Nothing Then
Workbooks.Open (filename)
End If
方法2:
If Not IsWorkbookOpen(filename) Then
Workbooks.Open (filename)
End If
其中 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
除了出现错误时继续下一步
之外,方法 1 似乎与方法 2 几乎相同。
谁能解释一下为什么方法1会给出这样的错误吗?
谢谢。
最佳答案
它们都给出了下标超出范围的错误。但在方法 2 中,您可以使用 On Error Resume Next
抑制该错误。
Sub SeeError()
On Error Resume Next
Debug.Print Workbooks("DoesNotExist").Name
Debug.Print Err.Description
End Sub
这会在立即窗口中打印“下标超出范围”。 On Error 语句不会阻止错误发生,它只是处理错误。方法 1 不处理错误,因此默认错误处理(停止执行并报告错误)生效。
关于VBA:查看文件是否打开的两种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946292/