Excel VBA文件由其他用户打开

时间:2014-06-08 09:54:17

标签: excel excel-vba vba

我正在为将在其网络上使用它的公司编写一些代码。我不是像他们这样的网络能够测试,所以我正在检查以确保代码是第一次正确的!

工作簿将以各种方式与其网络上的其他工作表进行交互,基本上我需要能够检查是否:

  1. 目标工作簿已在自己的系统上打开,并且 理想情况下:
    • 是否在同一Excel实例中打开,或
    • 是否在单独的实例中打开(我相信这可以 需要不同的操作来复制和粘贴范围,保存等 我需要了解更多信息)
  2. 目标工作簿由另一个网络用户打开(因此假定它只能以只读方式打开)
  3. 我遇到过很多关于检查工作簿是否已经打开的内容,例如: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 个答案:

答案 0 :(得分:0)

  1. 由于Excel宏的解析方式,单个实例中的Excel工作簿由非限定名称(没有完整路径的文件名)区分。

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

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

  2. 您或其他用户是否已打开工作簿没有任何区别。如果您尝试在另一个Excel实例中打开相同的工作簿,它会告诉您它被阻止,就像它被其他人打开一样。