我有一个循环,该循环从工作表中的列表中打开多个文件,然后复制数据,其中一些文件已删除,但是我可以排除它们(运行时错误1004)。但是,某些文件已损坏,错误处理程序崩溃了。错误相同,原因不同。知道我怎么也可以排除这些吗?这些数据没有用,因此需要跳过。
Sub EDITING LOOP()
Application.DisplayAlerts = False
Application.EnableEvents = False
Dim i As Long
With Workbooks("BOOK1.xlsb").Worksheets("SHEET1")
For i = 2 To 29
xfile = .Cells(i, 1)
On Error GoTo ErrHandler
Workbooks.Open (xfile)
Application.Goto Reference:="TABLE1"
Selection.copy
ActiveWindow.Close
ErrHandler:
If Err.Number <> 0 Then .Cells(i, 2) = "ERROR" Else .Cells(i, 2) = "OK"
.Cells(i, 3) = Err.Number
Err.Clear
' On Error Resume Next (TRIED BUT DIDN'T WORK)
' On Error GoTo 0 (TRIED BUT DIDN'T WORK)
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
答案 0 :(得分:0)
通常将错误测试封装在其自己的函数中会更好。这样,您可以更轻松地将“快乐之路”与“错误之路”分开。
Sub EDITINGLOOP()
Application.DisplayAlerts = False
Application.EnableEvents = False
Dim i As Long
With Workbooks("BOOK1.xlsb").Worksheets("SHEET1")
For i = 2 To 29
xfile = .Cells(i, 1)
Dim myErrorNUmber As Long
Dim myWorkbook As Excel.Workbook
If Not TryOpenFile(xfile, myErrorNUmber, myWorkbook) Then
.Cells(i, 2) = "ERROR"
.Cells(i, 3) = myErrorNumber
Else
.Cells(i, 2) = "OK"
Application.GoTo Reference:="TABLE1"
Selection.Copy
ActiveWindow.Close
End If
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Public Function TryOpenFile(ByVal ipFileName As String, ByRef opErrorNum As Long, ByRef opWorkBook As Excel.Workbook) As Boolean
On Error Resume Next
Set opWorkBook = Workbooks.Open(xfile)
opErrorNum = Err.Number
TryOpenFile = Err.Number = 0
On Error GoTo 0
End Function
您将注意到tryOpenFile函数返回错误号和对工作簿的引用(如果已成功打开)。打开工作表功能后,您当前的代码似乎对活动工作表做了一些毫无根据的假设。我没有尝试更正您的代码。
中将详细讨论使用On Error Resume Next管理错误条件的测试。