暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

完美Excel 2021-07-29
707

学习Excel技术,关注微信公众号:

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

文章转载自完美Excel,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论