VBA实用小程序80:判断文件是否打开
excelperfect
如果你的项目使用Excel文件以外的文件,则应在尝试读取或写入文件之前测试该文件是否已被其他进程打开。这里给出了一个名为IsFileOpen的函数,如果指定的文件已打开,则返回True,如果指定的文件未打开,则返回False。如果文件被另一个进程打开,则打开它的尝试将失败。如果该文件未在使用中,则尝试打开它会成功。一旦打开,文件将立即关闭而不保存。
程序代码如下:
Option Compare Text
'该函数确定以FileName命名的文件是否被另一个进程打开.
'如果文件已打开,则函数返回 True, 如果文件未打开, 返回False.
'如果由FileName命名的文件或不是有效的文件名,
'如果提供了参数ResultOnBadFile,则等于该参数的值.
'如果没有提供参数ResultOnBadFile,并且FileName不存在或
'是无效的文件名, 则结果为 False.
Public Function IsFileOpen(FileName As String, _
Optional ResultOnBadFile As Variant) As Variant
Dim FileNum As Integer
Dim ErrNum As Integer
Dim V AsVariant
On Error Resume Next
'如果传递一个空字符串,没有测试的文件,因此返回False.
If Trim(FileName) = vbNullString Then
If IsMissing(ResultOnBadFile) = True Then
IsFileOpen = False
Else
IsFileOpen = ResultOnBadFile
End If
Exit Function
End If
'如果文件不存在
V =Dir(FileName, vbNormal)
If IsError(V) = True Then
If IsMissing(ResultOnBadFile) = True Then
IsFileOpen = False
Else
IsFileOpen = ResultOnBadFile
End If
Exit Function
ElseIf V= vbNullString Then
If IsMissing(ResultOnBadFile) = True Then
IsFileOpen = False
Else
IsFileOpen = ResultOnBadFile
End If
Exit Function
End If
FileNum =FreeFile()
'试图打开文件并锁定.
Err.Clear
OpenFileName For Input Lock Read As #FileNum
ErrNum =Err.Number
'关闭文件
CloseFileNum
On ErrorGoTo 0
'检查发生的错误.
SelectCase ErrNum
Case 0
'没有发生错误.
'文件没被另一用户打开.
IsFileOpen = False
Case 70
''访问拒绝'错误号
'文件已被另一用户打开.
IsFileOpen = True
Case Else
'另一错误发生.假设打开.
IsFileOpen = True
End Select
End Function
其中:
参数FileName,要测试的文件名。
参数ResultOnBadFile,如果存在,则指定在FileName不存在或语法上无效的文件名时返回的值。如果存在,将返回此值。如果省略此参数且FileName不存在或无效,则结果为False。
注:本文学习整理自www.cpearson.com,供参考。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。