我正在为将在其网络上使用它的公司编写一些代码。我不是像他们这样的网络能够测试,所以我正在检查以确保代码是第一次正确的!
工作簿将以各种方式与其网络上的其他工作表进行交互,基本上我需要能够检查是否:
我遇到过很多关于检查工作簿是否已经打开的内容,例如:http://support.microsoft.com/kb/291295
但是我没有找到任何可以明确区分我在上面解释的两种情况的东西。
谢谢
更新
我现在正在使用:
Function IsFileOpenInInstance(FileName As String)
Dim ShortFileName As String
Dim ValidOpenFile As Boolean
Dim ErrNum As Integer
On Error Resume Next
ShortFileName = Dir(FileName)
If FileName = Workbooks(ShortFileName).FullName Then ValidOpenFile = True
ErrNum = Err
On Error GoTo 0
If ErrNum <> 0 Then
IsFileOpenInInstance = False
Else
IsFileOpenInInstance = ValidOpenFile
End If
End Function
答案 0 :(得分:0)
由于Excel宏的解析方式,单个实例中的Excel工作簿由非限定名称(没有完整路径的文件名)区分。
尝试访问Workbooks("File Name.xls")
以查看工作簿是否在当前实例中加载,如果是,请检查FullName
以查看它是否确实是正确的。
在操作方面,无论是否在不同的实例中打开两个工作簿,都没有区别。但是,获取指向另一个实例的指针可能会有问题,我不建议这样做(例如,如果你打电话给GetObject("File Name.xls")
,它可以返回你的Excel实例,而不是另一个实例,即使你没有&# 39;打开文件)。您应该假设所有必需的工作簿都在同一个实例中打开。
您或其他用户是否已打开工作簿没有任何区别。如果您尝试在另一个Excel实例中打开相同的工作簿,它会告诉您它被阻止,就像它被其他人打开一样。