通过一些研究和反复试验,我能够遇到这个帮助我重命名大量文件附件的基本VBA。我已经能够重命名几十个附件但我遇到了运行时错误'53:找不到文件。有没有办法修改VBA以跳过无法找到的文件名?
Sub RenameFiles()
Const strPath = "C:\Documents and Settings\User\My Documents\FolderName\"
Dim r As Long
Dim n As Long
n = Cells(Rows.Count, 1).End(xlUp).Row
For r = 2 To n
Name strPath & Cells(r, 1) As strPath & Cells(r, 2)
Next r
End Sub
答案 0 :(得分:2)
使用以下语句禁用错误处理:
On Error Resume Next
要再次启用错误处理,您必须使用以下语句:
On Error Goto 0
最好只为您真正想要跳过错误的语句禁用错误处理。另一方面,启用和禁用错误处理可能会减慢代码的运行速度。在这种情况下,你可以把它放在循环中。
On Error Resume Next
For r = 2 To n
Name strPath & Cells(r, 1) As strPath & Cells(r, 2)
Next r
On Error Goto 0
答案 1 :(得分:1)
在子程序的顶部添加以下行:
On Error Resume Next
这句话与它所说的完全相同,它忽略了错误并转移到下一行代码。
使用此语句时,您需要谨慎使用,因为它无法修复错误。对于您当前的问题,它应该没问题,但在许多其他问题上,您需要处理错误而不是忽略它。
获得基础知识的好资源是Error Handling in VBA。
如果您想了解有关Excel VBA的更多信息,brettdj对What is the best way to master VBA macros的回答是一个很好的起点。
要了解On Error Resume Next
或On Error GoTo 0
如何影响错误,请在VBA编辑器中逐步执行以下操作:
Sub ExcelVBAErrorDemo()
Dim forceError As Integer
' ignore errors
On Error Resume Next
' cause an error
forceError = 1 / 0
' the error was ignored, and the integer variable will
' display its default value
MsgBox "Our forceError variable = " & forceError
' turn default error handling behavior back on
On Error GoTo 0
' now we'll get a run-time error
forceError = 1 / 0
End Sub
答案 2 :(得分:1)
优于On Error Resume Next
(在我看来)是检查特定/预期的错误并适当地处理它们。在这种情况下,您可以检查文件名是否有效,如果无效则跳过Name
分配。
使用Dir()
函数检查它是否是有效的文件名:
Sub RenameFiles()
Const strPath = "C:\Documents and Settings\User\My Documents\FolderName\"
Dim sFile as String
Dim r As Long
Dim n As Long
n = Cells(Rows.Count, 1).End(xlUp).Row
For r = 2 To n
sFile = strPath & Cells(r,1)
If Not Dir(sFile) = vbNullString Then
Name sFile As strPath & Cells(r, 2)
End If
Next r
End Sub