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

时间:2016-08-27 03:45:02

标签: excel vba excel-vba replace worksheet

我使用下面的代码删除Excel中引用用户共享文件的加载项的路径。它适用于某些文件,但在新文件中使用它并在打开时收到运行时错误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

2 个答案:

答案 0 :(得分:2)

这可能会导致 ,因为在加载所有内容之前,Workbook_Open事件很快就会触发。

如果您不尝试激活工作表,可能会有更好的运气。 (激活它们会导致Excel必须显示它们,它可能无法执行,因为它仍在执行其他操作。但是在不强制显示工作表的情况下进行更改可能会让它继续执行它想要执行的操作。我在猜测,但在有人提出另一种解决方案之前,猜测就像任何东西一样好!)

尝试将代码更改为:

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

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

答案 1 :(得分:1)

一张或多张'张'可能不是.Visible。如果.Visible属性为False或xlVeryHidden,则不能.Activate''表'。

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将返回默认值。
  • 您无需.Activate¹工作表就可以使用它,您可以处理隐藏的工作表。使用With ... End With statement提供宽父工作表层次结构。
  • 如果您未激活其他工作表,则无需存储和重新激活原始工作表。
  • 如果使用Worksheets collection而非Sheets集合,则无需检查“工作表”是否为工作表。

¹有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros