2012-07-06 10 views
11

Ten program ma stworzyć przycisk, który użytkownik może nacisnąć, aby aktywować inny sub. Z moich wyszukiwań w Internecie wydaje się, że poniższy podrzędny powinien zostać aktywowany podczas otwierania skoroszytu, ale tak nie jest?Workbook_Open sub nie będzie działać po otwarciu skoroszytu?

Co robię źle?

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

Czy ten moduł jest umieszczony w obiekcie 'ThisWorkbook' w VBE, w przeciwieństwie do obiektu Module lub Worksheet? Ponieważ kiedy to zrobiłem, zadziałało to dla mnie. Aby uruchomić zdarzenia Workbook, kod musi istnieć w module 'ThisWorkbook'. To samo dotyczy zdarzeń na poziomie arkusza roboczego, kod musi znajdować się w każdym obiekcie arkusza w VBE. –

+7

@Scott, myślę, że powinieneś zmienić swój komentarz na odpowiedź. –

Odpowiedz

23

upewnić się, że Private Sub Workbook_Open() podprogram jest wklejony wewnątrz Ten skoroszyt obiektu, a nie w module, forma, lub obiektu arkusza.

+0

Dziękujemy! Zadziałało! :) – TheTreeMan

+1

Czy możesz wtedy uznać mnie za właściwą odpowiedź? :) (Staram się odpowiadać na pytania, aby uzyskać pełny dostęp do strony!) – danielpiestrak

3

Interesujące. W 2009 r. Opisano konflikt z warunkowym formatowaniem arkusza do otwarcia, jak w vbforum post.

Wygląda na to, że ten błąd nadal istnieje w programie Excel i uniemożliwia wystrzelenie zdarzenia workbook_open. Mam skoroszyt (stary format XLS-binarny), który po prostu nie uruchamia zdarzenia w programach Excel 2003 i 2007, ale działa w 2013 r. Usunąłem formatowanie warunkowe z pierwszego arkusza roboczego, ale nadal nie można wykonać procedury workbook_open w starszej wersji Wersje Excel.

obejście, używam w rozproszonych skoroszytach jest użycie zmiennej lokalnej i drugą imprezę w skoroszycie następująco:

'' 
' 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

znam ten post został uśpiony na jakiś czas, ale po prostu z trudem godzinami, aby rozwiązać ten problem. To najdziwniejsza rzecz, ale w końcu zauważyłem, że jeden z moich arkuszy był w "Odsyłaniu do strony" ... i jak tylko wstawię go do "Normalnego", moja funkcja Workbook_Open() znowu zaczęła działać normalnie. Bardzo dziwne - zdecydowanie bug Excel ... po prostu się cieszę, że w końcu rozwiązać to ... Mam nadzieję, że ktoś pomoże ...

1

Rozwiązanie znalazłem biegł poniższy kod, a następnie „Otwórz” zdarzenie zadziałało.

Sub EventRestore() 

    Application.EnableEvents = True 

End Sub 
Powiązane problemy