1

通过一些研究和反复试验,我发现了这个帮助我重命名大量文件附件的基本 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
4

3 回答 3

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
于 2013-06-26T15:25:57.760 回答
1

在子例程的顶部添加以下行:

On Error Resume Next

该语句完全按照它所说的去做,它忽略了错误并继续执行下一行代码。

使用此语句时需要小心,因为它不能修复错误。对于您当前的问题,应该没问题,但在许多其他问题中,您需要处理错误而不是忽略它。

获得基础知识的一个很好的资源是VBA 中的错误处理

如果您想了解有关 Excel VBA 的更多信息,brettdj 对What is the best way to master VBA 宏的回答是一个很好的起点。

要查看错误如何受On Error Resume Nextor影响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
于 2013-06-26T15:12:15.113 回答
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
于 2013-06-26T15:42:25.963 回答