office交流網--QQ交流群號

Access培訓群:792054000         Excel免費交流群群:686050929          Outlook交流群:221378704    

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

判斷Excel工作簿文件是否被打開

2019-11-18 09:05:00
zstmtony
原創
18020

工作場景中,可能有時處理數據之前,可能需要使用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
分享