共享Excel被只读打开时,VBA文件锁读取语句是否报错
关于共享Excel文件只读打开状态的检测问题
当电脑B以只读模式打开电脑A共享的test.xlsm时,电脑A中运行的VBA函数里的Open FileName For Input Lock Read As #ff语句会抛出错误70,该函数会返回True,即可以检测到文件处于已打开状态。
原因说明
Excel无论以正常编辑模式还是只读模式打开文件,都会对文件施加读锁定(网络共享场景下该锁定会在网络范围内生效)。当电脑B已经通过只读方式占用了文件的读锁,电脑A尝试用Lock Read模式打开该文件时,会触发「权限被拒绝」的错误(错误码70),函数的分支逻辑会将此错误判定为文件已打开的状态。
原参考代码
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
内容的提问来源于stack exchange,提问作者karma
相关产品推荐
相关产品推荐

