分享

VBA实用小程序80:判断文件是否打开

 hercules028 2021-07-29

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多