ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > VBA如何判断该文件是否打开?

VBA如何判断该文件是否打开?

作者:绿色风 分类: 时间:2022-08-17 浏览:620
楼主
wise
Q:VBA如何判断该文件是否打开?
A:见下例,定义了一个自定义函数
  1. Function IsFileOpen(FileName As String)
  2.     Dim iFilenum As Long
  3.     Dim iErr As Long
  4.     On Error Resume Next ' 改变错误处理的方式。
  5.     iFilenum = FreeFile() '使用 FreeFile 给iFilenum提供一个尚未使用的文件号
  6.     Open FileName For Input As #iFilenum '打开该文件
  7.     Close iFilenum
  8.     iErr = Err
  9.     On Error GoTo 0
  10.     Select Case iErr
  11.     Case 0:    IsFileOpen = False '文件没有打开
  12.     Case 70:   IsFileOpen = True '文件已经打开
  13.     Case Else: Error iErr
  14.     End Select
  15. End Function
  16. Sub OpenTest()
  17.     Dim myfile As String
  18.     myfile = ThisWorkbook.Path & "\mybook.xls" '当前目录下的mybook文件
  19.     If Not IsFileOpen(myfile) Then '判断文件是否打开,如果文件没有打开的话,则打开该文件
  20.         Workbooks.Open myfile
  21.     End If
  22. End Sub


VBA判读文件是否打开.rar
2楼
gvntw
判断文件是否打开,可以简单点。
  1. Sub gvntw()
  2.     On Error GoTo 1
  3.     Set wb = Application.Workbooks("Book1.xls")
  4.     MsgBox "文件已打开"
  5.     Exit Sub
  6. 1:
  7.     MsgBox "文件未打开"
  8. End Sub
3楼
wise
发哥那个代码只能判断,判断文件没有打开后,是不打开文件

4楼
gvntw
你本来就是判断文件是否打开啊,呵呵。
5楼
xyh9999
gvntw,wise两位版主辛苦了,我无名小卒也说两句,说得不好不要见怪耶。
1) gvntw的这个程序应该是考虑不太全面,当文件单独用两个excel线程(或叫单独内存)打开时你的程序判断肯定出错,用其他工具打开了文件的话你的程序就更没办法判断了!因为我们对“打开”的理解不能局限理解于“仅用excel的单线程打开”。
2) wise的这个比较好,但应把Open FileName For Input As #iFilenum 改成Open FileName For Append As #iFilenum ,否则运行也经常出错。
3) wise的程序最好先判断一下文件是否存在,不然如果判断一个机器中不存在的文件,你的文件就会生成一个同名的文件,产生不必要的垃圾。

你们看是不是可以把程序改成这样:
  1. Function IsFileOpen(FileName)
  2.     Dim iFilenum As Long
  3.     Dim iErr As Long
  4.     iFilenum = FreeFile() '使用 FreeFile 给iFilenum提供一个尚未使用的文件号
  5.     If Dir(FileName) <> "" Then
  6.        On Error Resume Next ' 改变错误处理的方式。
  7.        Open FileName For Append As #iFilenum  '打开该文件
  8.        iErr = Err
  9.        Select Case iErr
  10.        Case 0:
  11.           IsFileOpen = "文件没打开"
  12.        Case 70:
  13.           IsFileOpen = "文件已打开"
  14.        Case Else:
  15.           IsFileOpen = "出错号为" & iErr
  16.        End Select
  17.        Close iFilenum
  18.        Err.Clear
  19.        On Error GoTo 0
  20.     Else
  21.        IsFileOpen = "文件不存在"
  22.     End If
  23. End Function
  24. '#######################
  25. Sub 例子()
  26.     Dim myfile As String
  27.     myfile = ThisWorkbook.Path & "\mybook.xls" '当前目录下的mybook文件
  28.     MsgBox IsFileOpen(myfile)
  29. End Sub

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap