2017-08-09 85 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聲明。決不。

相關問題