我从字面上复制并粘贴并测试了可能的BB的每一段代码,并且所有这些都发生了相同的事情。他们都告诉我文件是打开还是关闭的,或者告诉我文件是打开还是关闭的。代码永远不会正确。这是我尝试过的最后一件事,它告诉我它什么时候没打开都没有打开
有人可以告诉我这是否是由于文件位于网络上
Sub Is_WorkBook_Open()
Dim wBook As Workbook
On Error Resume Next
Set wBook = Workbooks("X:\Audit Tracking\Team_Larry\DailyReports\Larry_Blank.xlsm")
'Not open
If wBook Is Nothing Then
MsgBox "Larry's Workbook is not open, Proceed to posting", vbCritical
Set wBook = Nothing
On Error GoTo 0
'It is open
Else
MsgBox "Yes it is open, Notify Supervisor to close file", vbInformation
Set wBook = Nothing
On Error GoTo 0
End If
End Sub
答案 0 :(得分:0)
它告诉我它什么时候都没有打开
Application.Workbooks
集合包含在Excel.Application
中在此情况下打开的所有工作簿 ;如果工作簿是由另一台计算机上的其他人打开的,则该工作簿不在集合中,并且您无法使用该方法来知道这一点。
如果您在Office 365上使用最新,最出色的Excel 2016,请查看如何使用co-authoring功能完全消除该担忧。
否则,您可以尝试共享工作簿,然后Excel可以准确告诉您打开了该工作簿的人,但是共享工作簿有很多问题,包括但不是限于无法编辑VBA代码。
使用硬编码路径也是获得假阴性的好方法。打开文件,验证其实际FullName
并使用它。
Dim i As Long
For i = 1 To Application.Workbooks.Count
Debug.Print Application.Workbooks(i).FullName
Next
如果文件的位置并不重要,只需文件名,就可以迭代打开的文件并查看文件名是否匹配:
Dim i As Long
For i = 1 To Application.Workbooks.Count
If Application.Workbooks(i).Name = "Larry_Blank.xlsm" Then
MsgBox "File is opened."
Exit For
End If
Next
答案 1 :(得分:0)
当您打开Excel工作簿时,将创建该工作簿的隐藏临时副本。大概是用来恢复崩溃的文件。请注意,临时工作簿的名称和路径与实际工作簿相同,但在文件名前加上~$
。由于文件路径保持不变,因此我们可以假设↓`isWorkbookOpen()↓即使在映射和共享文件夹下也可以使用。
Function isWorkbookOpen(Path As String) As Boolean
Dim values() As String
values = Split(Path, "\")
values(UBound(values)) = "~$" & values(UBound(values))
Path = Join(values, "\")
isWorkbookOpen = Len(Dir(Path, vbHidden)) > 0
End Function
答案 2 :(得分:0)
我相信您的代码将在您从中运行代码的计算机上测试是否将其打开。
此代码将打开工作簿,如果它以只读状态打开,则其他人将其打开。注意:如果您在计算机上打开它,然后在同一台计算机上运行此代码,它将报告它不是处于只读状态。
Sub Test()
Dim oWB As Workbook
Set oWB = Application.Workbooks.Open("C:\Temp\test.xlsx")
If oWB.ReadOnly Then
MsgBox "Open"
Else
MsgBox "Closed"
End If
oWB.Close
End Sub