office交流网--QQ交流群号

Access培训群:792054000         Excel免费交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

判断Excel工作簿文件是否被打开

2019-11-18 09:05:00
zstmtony
原创
16908

工作场景中,可能有时处理数据之前,可能需要使用VBA先判断待处理的Excel文件是否已经被别人打开,如果打开,需要提示先关闭或代码强制关闭。

那如何判断工作簿已经被打开呢,有以下一些方法


方法1:



Const strFileName As String = "你的文件.xls"
Sub CheckFileIsOpen()
Dim xApp As Application
Set xApp = CreateObject("Excel.Application")
xApp.DisplayAlerts = False
On Error GoTo Error_Handler
xApp.Workbooks.Open Filename:=ThisWorkbook.Path & "" & strFileName, notify:=False, ReadOnly:=False
If xApp.ActiveWorkbook.ReadOnly = True Then
    MsgBox "文件已经被打开!"
Else
    MsgBox "文件未被打开!"
End If
GoTo Exit_Handler
Error_Handler:
    MsgBox "File is not exist"
Exit_Handler:
    xApp.Quit
End Sub


方法2:


        Dim wb As Workbook
        Set wb = GetObject("G:\测试工作簿.xlsx")
'        If wb.IsInplace = False Then
        If wb.ReadOnly = True Then
           MsgBox "指定的工作簿已经被打开了"
           wb.Close
           Set wb = Nothing
           Exit Sub
        Else
            wb.Close
            Set wb = Nothing
        End If


方法3:


Sub 判断文件是否已经打开()
    Dim x As Integer
    For x = 1 To Windows.Count
        If Windows(x).Caption = "test.xls" Then
            MsgBox "test文件已经打开了"
            Exit Sub
        Else
            MsgBox "test文件没有被打开!"
        End If
    Next
End Sub


方法4:



判断一个指定的工作簿文件是否打开
先将下面的VBA代码放到一个标准模块中,然后在需要的地方进行调用。
'如果目标工作簿已打开则返回TRUE,否则返回FALSE
Function IsWkLoaded(strWbName As String) As Boolean
 
 Dim i As Long

 For i = Workbooks.Count To 1 Step -1
  If Workbooks(i).Name = strWbName Then
    Exit For
  End If
 Next
 '如果工作簿未找到
 If i = 0 Then
   IsWkLoaded = False
 Else
   IsWkLoaded = True
 End If
End Function

调用示例如下,将“Book2.xls”换成指定的工作簿名称:

Sub 调用()
If IsWkLoaded("test.xls") Then
MsgBox "指定的工作簿已打开"
Else
MsgBox "指定的工作簿没有打开"
End If
End Sub
分享