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社群,进行技术交流和提问,获取更多电子资料。

(0)

相关推荐