我试图遍历文件夹中的所有文件,打开它们并删除文档信息。但是当处理无法打开的文件或打开时出现有关禁用宏的弹出窗口时,我遇到了麻烦。我尝试使用on error resume next和on error goto 0来解决这个问题。但随后由于我的工作簿对象(wb)在我尝试关闭打开的文件时未设置而导致运行时错误。
我已经阅读了“On Error Resume Next”和“On error goto 0”的文档,但我不认为我在这里正确使用它们。
非常感谢您的帮助,谢谢。
我已更新我的代码,并按照@PatricK的建议添加了If Not wb Is Nothing Then remove the info,目前它已经可以正常工作,但是却一直弹出关于更新链接的提示框。如果我点击“不更新”,则代码将继续正常工作,但是有没有一种方法来解决这个问题呢?我正在遍历5000多个文件,所以您可以想象这需要一些时间。目前所需的时间不是问题,但是我目前在这里不得不多次点击“不更新”。我原以为设置Application.DisplayAlerts = False 可以防止这些弹出框,但实际上并不能。
Option Explicit
Sub test_Scrubber_New()
Dim directory As String, fileName As String, i As Variant, wb As Workbook
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'directory = "C:\Users\bayli\Desktop\Files for Testing\"
directory = "C:\Users\bayli\Desktop\excel files\"
fileName = Dir(directory & "*.xl??")
i = 0
Do While fileName <> ""
On Error Resume Next
Set wb = Workbooks.Open(directory & fileName)
On Error GoTo 0
'remove info
ActiveWorkbook.RemoveDocumentInformation (xlRDIAll)
wb.Close True
i = i + 1
fileName = Dir()
Application.StatusBar = "Files Completed: " & i
Loop
Application.StatusBar = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Complete"
End Sub
我已更新我的代码,并按照@PatricK的建议添加了If Not wb Is Nothing Then remove the info,目前它已经可以正常工作,但是却一直弹出关于更新链接的提示框。如果我点击“不更新”,则代码将继续正常工作,但是有没有一种方法来解决这个问题呢?我正在遍历5000多个文件,所以您可以想象这需要一些时间。目前所需的时间不是问题,但是我目前在这里不得不多次点击“不更新”。我原以为设置Application.DisplayAlerts = False 可以防止这些弹出框,但实际上并不能。
如果Err.Number <> 0 Then '做其他事情
- RnoActiveWorkbook.RemoveDocumentInformation(xlRDIAll)
将无论如何运行,并且将在该Activeworkbook上。您可能希望将其切换到wb.RemoveDocumentInformation(...)
。 - BruceWayneRemoveDocumentInformation
应该对wb
运行,而不是对ActiveWorkbook
运行。而且On Error Resume Next
并不能算是合适的错误处理方式。如果代码在未知的错误状态下愉快地运行,并在一切都失控时轻松报告 "完成" ,那就不是"正确"的代码了。硬编码路径也是一个问题,i
是Variant
类型非常值得质疑,xlRDIAll
被强制传递ByVal
却没有任何理由,Dir()
不需要多余的括号,而且过程名应该更有意义、使用PascalCase
并明确声明为Public
。 - Mathieu GuindonDir
调用和Workbooks.Open
调用之间,某个其他进程删除了该文件。 - Cominternwb Is Nothing
是否为空。 - PatricK