繁体   English   中英

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

[英]Runtime error 6 overflow when looping through worksheets

我使用下面的代码删除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

可能是由于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

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

有可能一个或多个“纸张”不是。 可见 你不能。如果.Visible属性为False或xlVeryHidden,则激活 'sheet'。

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。
  • 你不需要.Activate¹一个工作表来处理它,你可以在一个隐藏的工作表上工作。 使用With ... End With语句提供宽父工作表层次结构。
  • 如果未激活其他工作表,则无需存储和重新激活原始工作表。
  • 如果您使用Worksheets集合而不是Sheets集合,那么您不必检查“工作表”是否是工作表。

¹ 请参阅如何避免在Excel VBA宏中使用选择以获取更多方法, 以避免依赖选择和激活来实现目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM