我使用下面的代码删除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
答案 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
¹有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros。