下标超出工作簿范围。关闭

时间:2016-03-08 08:23:58

标签: sql excel vba excel-vba

我使用下面的连接字符串创建了与Excel文件的ADODB连接。即使在执行SQL CloseConnection proc之后,文件仍保持打开状态。我运行我的IsWorkBookOpen函数来检查文件是否打开并返回true,但是当我尝试关闭文件时,我得到的"下标超出范围"信息。这显然是无稽之谈,因为我不仅可以看到它开放,而且前一行告诉我它是。文件名和文件扩展名是正确的,并且'隐藏已知文件类型的扩展程序'在Windows资源管理器中设置为true。我尝试手动键入没有扩展名的文件名,并尝试使用set wb = workbooks(OutputFile)无济于事。任何有关这方面的帮助都会非常感激,因为我感到困惑,而且我必须锁定应用程序,直到我能解决这个问题。

以下是输出文件路径变量的定义:

Public Const OutputFile As String = OutputName & " v" & OutputVersion & ".xlsx"
Public Const OutputDir As String = RootDir & "\output\" & OutputFile

这是打开ADODB的连接字符串; ConnectionInfo.DataSource设置为OutputDir:

ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ConnectionInfo.DataSource & ";" & "Extended Properties=""Excel 12.0 XML;READONLY=" & CStr(ConnectionInfo.XLReadOnly) & ";HDR=YES"";"

这是关闭连接过程:

Public Sub CloseConnection()
On Error Resume Next
    If Not cnn Is Nothing Then
        cnn.Close
        Set cnn = Nothing
    End If
End Sub

这是我检查工作簿是否已打开的过程:

Public 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

这是我用来关闭的行。 FYI在早期的脚本中使用InputDir和InputFile,它们的文件格式相同:

If modWindows.IsWorkBookOpen(OutputDir) Then Workbooks(OutputFile).Close SaveChanges:=0

0 个答案:

没有答案