当文件处于保护模式(因为从互联网上下载)时, sheet.activate 包含在 Workbook_Open()中时出现问题。一旦“启用编辑”,就会执行Workbook_Open()并出现错误。
如果我使用此代码:
Private Sub Workbook_Open()
Sheets(2).Activate
End Sub
我有这个错误: 运行时错误1004工作表类的激活方法失败
在其他一些讨论中,我尝试使用 Workbook_Activate()方法,如果我在我的所有项目中只有一个简单的激活,它就可以工作。如果我使用以下示例可以修复:
Private Sub Workbook_Open()
a = True
End Sub
Private Sub Workbook_Activate()
If a Then
Sheets(2).Activate
a = False
End If
End Sub
但它部分解决了问题,这个代码可以工作,但下次我在我的项目中有另一个sheet.activate错误再次出现,(即,如果我单击按钮进入面板或如果我运行其他例程)。
此错误仅在您第一次打开文件时出现,如果您停止调试器,关闭文件而不保存并重新打开文件错误不会再次出现但我会避免它第一次出来
提前致谢
答案 0 :(得分:1)
这看起来像是一个已知的问题:
Object Model calls may fail from WorkbookOpen event when exiting Protected View
它说......
解决强>
您可以通过以下方式解决问题: -
如果信任打开工作簿的位置,请将该位置添加到Excel的受信任位置。
- 醇>
将WorkbookOpen事件外部的对象模型调用推迟到WorkbookActivate事件。
推迟对象模型调用的代码示例
Option Explicit
Public WithEvents oApp As Excel.Application
Private bDeferredOpen As Boolean
Private Sub oApp_WorkbookActivate(ByVal Wb As Workbook)
If bDeferredOpen Then
bDeferredOpen = False
Call WorkbookOpenHandler(Wb)
End If
End Sub
Private Sub oApp_WorkbookOpen(ByVal Wb As Workbook)
Dim oProtectedViewWindow As ProtectedViewWindow
On Error Resume Next
'The below line will throw error (Subscript out of range) if the workbook is not opened in protected view.
Set oProtectedViewWindow = oApp.ProtectedViewWindows.Item(Wb.Name)
On Error GoTo 0 'Reset error handling
If oProtectedViewWindow Is Nothing Then
bDeferredOpen = False
Call WorkbookOpenHandler(Wb)
Else
'Delay open actions till the workbook gets activated.
bDeferredOpen = True
End If
End Sub
Private Sub WorkbookOpenHandler(ByVal Wb As Workbook)
'The actual workbook open event handler code goes here...
End Sub
答案 1 :(得分:0)
在打开文件之前检查文件属性。如果它来自互联网,通常在属性页上会显示一个“取消保护”复选框,您可以选中该复选框以取消保护它,然后它应该会像平常一样打开。
还有一个“只读”复选框,可能也对您有帮助。确保文件不是只读的。
只需在打开它之前执行此操作。