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

标签 vba excel file-io

我有两种方法,我认为应该可以判断文件是否打开。

方法 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/

相关文章:

javascript - 从 Rest API 响应内容配置输出 [Object, Object] 下载 javascript 中的 excel 文件

java - 将具有多个工作表的 Excel 工作簿映射到 XSD

excel - 删除子串

xml - VBA 使用模式文件提取数据

vba - VBA Windows 10 问题中的文本到剪贴板

perl - 这些 "open"格式有什么区别

java - 应用程序根目录中的相对路径 - Java Web 应用程序

java - 线程 "main"java.io.FileNotFoundException I/O Java 中的奇怪异常

mysql - 数据提供程序或其他服务返回 E_FAIL 状态(vba mysql 记录集)

vba - 如何从另一个工作簿(excel)复制数据?