在工作表中循环时,运行时错误6溢出

我正在使用下面的代码删除Excel中的path引用用户共享文件的加载项。 它与一些文件一起使用,但将其与新文件一起使用,并在打开时收到运行时错误6溢出错误。 它正停在Cell Replace行上。

Private Sub Workbook_Open() Dim i As Long Dim strWorksheetName As String strWorksheetName = ActiveSheet.Name Application.DisplayAlerts = False For i = 1 To Sheets.Count Sheets(i).Activate If Sheets(i).Type = xlWorksheet Then Cells.Replace What:="'c:\*xla*'!", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End If Next i Application.DisplayAlerts = True Sheets(strWorksheetName).Activate End Sub 

可能是由于Workbook_Open事件在加载之前发生得太快而引起的。

如果您不尝试激活工作表,您可能会有更好的运气。 (激活它们会导致Excel必须显示它们,但由于它仍然在做其他的事情,所以它们可能无法完成,但是在不强制显示的情况下进行更改可能会让Excel继续按照自己的意愿执行操作。我猜测,但直到有人提出另一个解决scheme,猜测和任何东西一样好!)

尝试将您的代码更改为:

 Private Sub Workbook_Open() Dim ws As Worksheet Application.DisplayAlerts = False For Each ws in Worksheets ws.Cells.Replace What:="'c:\*xla*'!", _ Replacement:="", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Next Application.DisplayAlerts = True End Sub 

如果有效,我会在这里留下答案。 如果没有,我会删除答案,其他人可以提出build议。

一张或多张“床单”可能是不可见的 。 如果.Visible属性为False或xlVeryHidden,则不能激活 “表单”。

 Option Explicit Private Sub Workbook_Open() Dim i As Long Application.DisplayAlerts = False For i = 1 To Worksheets.Count With Worksheets(i) .Cells.Replace What:="'c:\*xla*'!", _ Replacement:=vbNullString, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False End With Next i End Sub 
  • 退出将其更改为False的过程后, Application.DisplayAlerts将返回默认值True。
  • 您不需要激活 ¹工作表以便处理它,并且您可以在隐藏的工作表上工作。 使用With … End With语句可提供较宽的父级工作表层次结构。
  • 如果您不激活另一张工作表,则不必存储和重新激活原件。
  • 如果您使用Worksheets集合而不是Sheets集合,则不必检查“sheet”是否为工作表。

¹ 请参阅如何避免使用在Excel VBAmacros中select更多的方法来摆脱依靠select和激活来实现您的目标。