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

在vba中操作打开的文件时出错,vba,io,Vba,Io,我的代码必须打开一个文件(.xls),但该文件可能是以前打开的。如果文件未完全打开,但如果打开,则会出现运行时错误(9)下标超出范围,标记为*bellow: 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

我的代码必须打开一个文件(.xls),但该文件可能是以前打开的。如果文件未完全打开,但如果打开,则会出现运行时错误(9)下标超出范围,标记为*bellow:

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
Dim src作为工作簿
将文件设置为字符串
file=“c:/tmp/file.xls”
如果IsFileOpen(file)=True,则

工作簿(文件).激活'*问题在于如何激活工作簿。Excel需要工作簿名称(或索引),而不是路径和名称。尝试以下操作(更改文件名以适应您的情况):


那么你的问题是什么?这有几个重复,我的错误是我无法访问打开的文件,只有关闭的文件(进入else语句)才能发布“IsFileOpen”函数的代码?在这两个周末之间,你完全错了
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