我的代码必须打开一个文件(.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
结束功能
答案 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