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 其中:
注:本文学习整理自www.cpearson.com,供参考。 欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。
|
|
来自: hercules028 > 《VBA》