2012-07-06 145 views
11

這個程序應該創建一個按鈕,用戶可以按下來激活不同的子。在我的在線搜索中,似乎應該在打開工作簿時激活下面的子菜單,但它不是?當我打開工作簿時,Workbook_Open sub不會運行?

我在做什麼錯?

Option Explicit 
Private Sub Workbook_Open() 
Dim btn As Button 
Dim rng As Range 
With Worksheets("Sheet1") 
    Set rng = .Range("B2:C2") 
     Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height) 
    With btn 
     .Caption = "To begin the program, please click this button" 
     .AutoSize = True 
     .OnAction = "TableCreation1" 
    End With 
End With 
End Sub 
+12

您是否將此模塊放置在VBE中的ThisWorkbook對象中,而不是模塊或工作表對象?因爲當我這樣做,它爲我工作。爲了使工作簿事件觸發,代碼必須存在於'ThisWorkbook'模塊中。代碼需要位於VBE中的每個工作表的對象中。 – 2012-07-06 21:26:22

+7

@Scott,我認爲你應該改變你的評論爲答案。 – 2012-07-06 21:44:54

回答

23

確保您私人小組Workbook_Open()子程序的該工作簿對象,而不是內部粘貼在一個模塊,表格,或表對象。

+0

謝謝!有效! :) – TheTreeMan 2012-07-09 14:57:29

+1

你能把我標記爲正確答案嗎? :) (我試圖回答問題,以獲得完全訪問該網站!) – danielpiestrak 2012-07-09 15:05:45

3

有趣。 2009年,描述了與要打開表單的條件格式衝突,如 vbforum post

看來這個bug在excel中依然存在,並且阻止了workbook_open事件被觸發。 我有一個工作簿(舊的XLS-二進制格式),它不會在Excel 2003和2007中觸發事件,而是在2013年。我刪除了第一張工作表中的所有條件格式,但仍然無法使workbook_open過程在老人中運行Excel的版本。

一種變通方法,我在分佈式工作簿使用是使用局部變量和第二個事件在工作簿如下:

'' 
' private variable 
Private wbOpenEventRun as Boolean 

'' 
' procedure to be called by excel when workbook opens 
Private Sub Workbook_Open() 
    wbOpenEventRun = true 
    ' perform tasks 
End Sub 

'' 
' the selection change event fires usually. 
' performance is not reduced 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    If Not wbOpenEventRun Then Workbook_Open 
    ' perform tasks in reaction of selection change events, if required 
End Sub 
2

我知道這個職位一直蟄伏了一段時間,但我只是掙扎幾個小時才能解決這個問題。這是最奇怪的事情,但我終於注意到我的工作表之一是在「頁面視圖」中......並且一旦我將它放入「普通」,我的Workbook_Open()函數就再次正常工作。非常奇怪 - 絕對是一個Excel錯誤...只是很高興我終於解決了它...希望它可以幫助別人...

1

我找到的解決方案是運行下面的代碼,然後「打開」事件工作。

Sub EventRestore() 

    Application.EnableEvents = True 

End Sub 
相關問題