验证工作簿是否是开放访问vba错误53

时间:2013-12-28 13:56:06

标签: vba ms-access excel-vba ms-access-2007 ms-access-2010

您好我正在使用代码验证工作簿是否已打开,如果是,我向用户发送消息以关闭工作簿。这是一个MS ACCESS表格。我目前的代码如下:

Option Explicit

Sub Sample()
Dim Ret
Dim strPath as string
strpath = "C:\myWork.xlsx"
Ret = IsWorkBookOpen(strpath)

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

我以不同的形式使用它,目录根据用户的需要而变化。它有时可以工作,但大多数时候我得到运行时错误。当我验证Err变量时,它是alaway Err = 53,如果它打开或不打开。有时Err = 70或Err = 0并且代码运行顺利,但情况绝对不是这样。

3 个答案:

答案 0 :(得分:1)

错误#53未找到文件。

此网站的代码完全符合您的要求: http://accessexperts.com/blog/2012/03/06/checking-if-files-are-locked/

答案 1 :(得分:0)

您获得的错误意味着“找不到文件”(您可以使用Err.Description获取比“53”更丰富的信息)。也许名称或路径存在问题,或者一些流浪的角色悄悄进入...或者它可能与您首先生成名称的方式有关。有关可能的方案和解决方法,请参阅http://www.excelforum.com/excel-programming-vba-macros/727403-runtime-error-53-file-not-found.html。如果没有关于在失败时传递给您的例程的文件名的更多信息,则很难更具体。

答案 2 :(得分:0)

我遇到了完全相同的问题。在我的情况下,当我意识到我发送的IsWorkbookOpen函数只是文件名但没有路径时,我能够解决问题。当我修改我的初始代码以文件形式发送一个包含路径和文件名的字符串形式的参数时,它们一起工作。