检查Excel文件是否被另一台计算机以只读模式打开

问题描述 投票:0回答:1

从这个链接我找到了这段代码:

Option Explicit

Sub Sample()
    Dim Ret

    Ret = IsWorkBookOpen("C:\myWork.xlsx")

    If Ret = True Then
        MsgBox "File is open"
    Else
        MsgBox "File is Closed"
    End If
End Sub

Function IsWorkBookOpen(FileName As String)
    Dim ff As Long, ErrNo As Long

    On Error Resume Next
    ff = FreeFile()
    Open FileName For Input Lock Read As #ff
    Close ff
    ErrNo = Err
    On Error GoTo 0

    Select Case ErrNo
    Case 0:    IsWorkBookOpen = False
    Case 70:   IsWorkBookOpen = True
    Case Else: Error ErrNo
    End Select
End Function

但对我来说,该链接中的问题尚不清楚。 我无法知道问题是否已在同一台计算机中打开工作簿,或者工作簿是否已由两台计算机连接到同一网络的另一台计算机打开。

我正在想象这样的事情:
计算机 A 和计算机 B 连接到同一网络。
Comp-A 创建一个共享文件夹,其中包含 excel 文件,例如 test.xlsm,
所以 comp-B 可以从 Comp-A 共享文件夹中打开 test.xlsm。

因为我没有两台电脑和网络...我想知道情况是否是这样的:
Comp-B 打开 test.xlsm 作为只读模式

当 test.xlsm 被 Comp-B 以只读模式打开时
稍后在 Comp-A 上打开 BLA.xlsm,其中包含打开 test.xlsm 的宏,
所以在打开它之前首先检查上面的子/功能。

我的问题:

Open FileName For Input Lock Read As #ff
抛出错误吗?

为什么我问,因为我不确定上面的子/功能是否仅适用于“comp-B open test.xlsm as 正常模式”,或者也适用于:“comp-B open test .xlsm 为 只读模式"

任何形式的回应将不胜感激。 提前谢谢您。

excel vba excel-2010 readonly-attribute
1个回答
0
投票

函数 IsWorkBookOpen() 只是检查工作簿是否已被其他用户打开。如果是,则返回 True。否则,返回 False。

使用 Open 语句打开文件时,如果文件已打开,则不允许将访问类型指定为

Lock Read
。否则会出现错误。

© www.soinside.com 2019 - 2024. All rights reserved.