与其他用户打开的Excel VBA文件

我正在为一个公司在networking上使用它写一些代码。 我没有像他们的networking那样能够testing,所以我正在检查以确保代码是正确的第一次!

该工作簿将以各种方式与其networking上的其他工作表交互,基本上我需要能够检查:

  1. 目标工作簿已在自己的系统上打开,理想情况下:
    • 无论是在同一个Excel实例中打开,还是
    • 是否是在单独的实例中打开(我相信这可能需要不同的复制和粘贴范围的操作,保存等我需要了解更多的信息)
  2. 目标工作簿由另一个networking用户打开(所以假定它只能以只读方式打开)

我遇到过很多关于检查工作簿是否已经打开的东西,例如: 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 

  1. 由于如何parsingExcelmacros,单个实例中的Excel工作簿将通过非限定名称(没有完整path的文件名)进行区分。

    尝试访问Workbooks("File Name.xls")以查看工作簿是否在当前实例中加载,如果是,请检查FullName是否确实是正确的。

    不pipe是否在不同的实例中打开两个工作簿,操作方面都没有区别。 但是,获取指向另一个实例的指针可能会有问题,我不build议这样做(例如,如果调用GetObject("File Name.xls") ,它可以返回您的Excel实例,而不是另一个,即使您没有打开文件)。 您应该假设所有必需的工作簿都在同一个实例中打开。

  2. 无论您或其他用户是否已经打开工作簿,这都没有什么不同。 如果您尝试在另一个Excel实例中打开相同的工作簿,它会告诉您,它被阻塞的方式与其他人打开方式相同。