在vba中操作打开的文件时出错

时间:2015-11-05 13:31:33

标签: vba io

我的代码必须打开一个文件(.xls),但该文件之前可能已打开过。如果文件没有打开工作完美但是如果打开则出现运行时错误(9)下标超出范围,标记为*贝娄:

Dim src As Workbook
Dim file as String

file = "c:/tmp/file.xls"

If IsFileOpen(file) = True Then
   Workbooks(file).Activate  '* <====
   Set src = ActiveWorkbook
Else
    Set src = Workbooks.Open(file, True, True)  
End If


Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer

On Error Resume Next   ' Turn error checking off.
filenum = FreeFile()   ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum          ' Close the file.
errnum = Err           ' Save the error number that occurred.
On Error GoTo 0        ' Turn error checking back on.

' Check to see which error occurred.
Select Case errnum

    ' No error occurred.
    ' File is NOT already open by another user.
    Case 0
     IsFileOpen = False

    ' Error number for "Permission Denied."
    ' File is already opened by another user.
    Case 70
        IsFileOpen = True

    ' Another error occurred.
    Case Else
        Error errnum
End Select

结束功能

1 个答案:

答案 0 :(得分:2)

问题是如何激活工作簿。 Excel期望工作簿名称(或索引)不是路径和名称。试试这个(更改文件名以适合您的情况):

Sub test()
Dim src As Workbook
Dim file As String

file = "c:/junk/foo.xlsx"

If IsFileOpen(file) = True Then
   Workbooks("foo.xlsx").Activate 
   Set src = ActiveWorkbook
Else
    Set src = Workbooks.Open(file, True, True)
End If

End Sub