簡體   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