for循环中的错误1004如何转到下一个函数[重复]
Posted
技术标签:
【中文标题】for循环中的错误1004如何转到下一个函数[重复]【英文标题】:Error 1004 in for loop how to go to next function [duplicate] 【发布时间】:2020-02-21 05:48:29 【问题描述】:我写了一个函数来在一个 excel 上导入 2 到 12 个 excel 文件。事实是一天我有 4 个文件,而另一天我可以有 6 个文件。永远不会超过 12 个。我做了一个 for 循环来导入我的文件,但是如果我只有 4 个文件,当循环查找第 5 个文件时它没有找到它并且弹出“错误 1004”。我正在尝试找到一种方法,即使我有这个错误,我的函数也能继续运行。我想在循环之后运行“宏 #2”。
Dim d As Integer
For d = 2 To 13
Worksheets(d).Cells.ClearContents
Next d
Dim i As Integer
For i = 2 To 12
Dim file_path As String
Dim file_agg As Workbook
Dim lastrow As Long
Name = Worksheets(1).Cells(i, 1)
file_path = "C:\Users\admin\Downloads\"
Set file_agg = Workbooks.Open(file_path & Name & ".xlsx", True, True)
lastrow = file_agg.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
file_agg.Sheets(1).Range("A1:Z" & lastrow).Copy ThisWorkbook.Sheets(i).Range("A1:Z" & lastrow)
file_agg.Close SaveChanges:=False
Next i
'macro #2 (exemple)
.................................................
.............................
............................................
........................
【问题讨论】:
尝试来自***.com/questions/16351249/vba-check-if-file-exists***.com/questions/11573914/…***.com/questions/39999739/…***.com/questions/19384483/…的任何信息 【参考方案1】:Dim file_path As String
Dim file_agg As Workbook
Dim lastrow As Long
file_path = "C:\Users\admin\Downloads\"
Name = Worksheets(1).Cells(i, 1)
Set file_agg = Workbooks.Open(file_path & Name & ".xlsx", True, True)
dim n as long
N=file_agg.Sheets.Count '<<<<
on error resume next 'this might work also with a fixed number
For i = 2 To N
lastrow = file_agg.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
file_agg.Sheets(1).Range("A1:Z" & lastrow).Copy ThisWorkbook.Sheets(i).Range("A1:Z"
& lastrow) 'belongs to line above
file_agg.Close SaveChanges:=False
Next i
Sheets.Count
如果这个问题属于文件数,请查看 DIR() 函数。 使用占位符,他们将返回一个包含所有匹配文件的数组。 这也可以算 :) 在这种情况下,Ubound 是你的朋友。但是根据。您的代码只想导入一个文件,但不知道有多少张。
【讨论】:
【参考方案2】:快速而肮脏地跳过导致错误的区域... 刚开始问题循环后,添加“On Error GoTo ___”并将其指向循环的末尾,如下所示:
For i = 2 To 12
On Error GoTo SkipToNext
---- all the troublesome code causing errors goes here ----
SkipToNext:
Next i
更好的解决方案可能基于您的 Name 变量中的内容。也许将所有的故障代码框起来:
If Name<>""
---- all the troublesome code causing errors goes here ----
End If
希望其中一个对你有用!
【讨论】:
【参考方案3】:使用 FileSystemObject(您需要设置对 ScriptingRuntime 的引用才能使用早期绑定和智能感知)。您可以使用带有 For Each 构造的 FileSystemObject 循环文件夹中的所有文件。
Sub LoopFilesInFolder()
Dim FolderPath As String
FolderPath = "C:\Users\admin\Downloads\"
Dim fso As FileSystemObject
Set fso = New FileSystemObject
With fso
Dim fldr As Folder
Set fldr = .GetFolder(FolderPath)
End With
Dim fl As File
For Each fl In fldr.Files
Next
End Sub
【讨论】:
以上是关于for循环中的错误1004如何转到下一个函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
读取文件时Python中的UnicodeDecodeError,如何忽略错误并跳转到下一行?
NodeJS,如何强制异步 for 循环在传递到下一次迭代之前等待 HTTP 请求解决,这样我们就不会收到 EMFILE 错误?