2017-08-09 65 views
1

我对vba非常陌生。打开文档时出现424 Ojbect所需的错误。我尝试使用Call subName,但没有任何区别。VBA错误424对象在调用子工作簿时需要_Open

请让我知道我还能发送或解释什么。在发现的ThisWorkbook

代码:

Private Sub Workbook_Open() 
    Sheet1.Worksheet_Activate//<- Object Required 
    Sheet2.Worksheet_Activate 
    Sheet3.Worksheet_Activate 
    Sheet4.Worksheet_Activate 
    Sheet5.Worksheet_Activate 
    Sheet6.Worksheet_Activate 
    Sheet7.Worksheet_Activate 
... 

代码在Sheet1中发现:

'INITIAL SETUP OF THE SHEET 
Public Sub Worksheet_Activate() 
    If Sheet9.Range("B1").Text = "TRUE" Then 
    'RUN INIT FUNCTIONS HERE 
    Me.initReqLink 
    Me.initVersion 
    Me.initCbApplicaiton 

    Sheet9.Range("B1").Text = "FALSE" 

    End If 
End Sub 

预先感谢您。

+0

您是否将Sheet1作为工作表声明? “ThisWorkbook.Worksheets(” 工作表Sheet “)。” – danieltakeshi

+1

默认情况下事件处理程序是'Private',原因是:它们不是要像这样手动调用,请参阅[braX的答案](https://stackoverflow.com/a/45598326/1188513)。 @danieltakeshi'Sheet1'将是'CodeName'标识符,一个免费的全局范围对象变量标识符VBA为Excel项目中的每个工作表创建。无需每次声明它并从'ThisWorkbook'中获取它。此外,通过名称获取工作表非常脆弱,因为用户可以随时重新命名工作表。 –

+0

@ Mat'sMug我不知道!感谢您的解释。 – danieltakeshi

回答

1

只需将其更改为Sheet1.Activate并且该事件将被调用。

+0

很确定事件处理程序* do *被调用。 OP的IDE可能不会打破课堂模块,这隐藏了真正的问题。但是让Excel调用这些事件而不是明确地调用它们的赞誉。 –

0

您不应该手动调用事件处理程序,但那不是您遇到该错误的原因;通过使方法Public已经暴露在Sheet1的界面上,使得这些调用完全“合法” - 所以方法do被调用,毫无疑问。

转到工具/选项/常规/错误捕获,并将其设置为未处理错误中断

那么你应该确切地比较清楚哪些语句吹起来,极有可能位于其中的一个地方:

Me.initReqLink 
Me.initVersion 
Me.initCbApplicaiton 

..这你还没有公布。

侧面说明,Call不会有所作为,因为它是一个过时的语法,自隐式调用语法的到来遥想当年一直没有一个目的。你永远不需要需要一个明确的Call声明。决不。

相关问题