2012-07-06 8 views
11

Questo programma dovrebbe creare un pulsante che l'utente può premere per attivare un sub diverso. Dalle mie ricerche online, sembra che il sotto sotto dovrebbe attivarsi quando si apre la cartella di lavoro, ma non lo è?Sottomenu Workbook_Open non verrà eseguito quando apro la cartella di lavoro?

Cosa sto sbagliando?

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

Avete questo modulo inserito nell'oggetto 'ThisWorkbook' nel VBE, in opposizione a un oggetto Module o Worksheet? Perché quando l'ho fatto, ha funzionato per me. Affinché gli eventi della cartella di lavoro si attivino, il codice deve esistere nel modulo 'ThisWorkbook'. Lo stesso vale per gli eventi a livello di foglio di lavoro, il codice deve essere nell'oggetto di ogni foglio nel VBE. –

+7

@Scott, penso che dovresti cambiare il tuo commento per una risposta. –

risposta

23

Assicurarsi che il Private Sub Workbook_Open() subroutine è incollato all'interno del Questo oggetto Workbook e non in un modulo, modulo, o un oggetto Foglio.

+0

Grazie! Ha funzionato! :) – TheTreeMan

+1

Potresti contrassegnarmi come la risposta giusta allora? :) (Sto cercando di rispondere alle domande per ottenere l'accesso completo al sito!) – danielpiestrak

3

Interessante. Nel 2009 è stato descritto un conflitto con la formattazione condizionale del foglio da aprire, come in vbforum post.

Sembra che questo errore esista ancora in Excel e impedisce l'attivazione dell'evento workbook_open. Ho una cartella di lavoro (vecchio formato XLS-binario) che semplicemente non genera l'evento in Excel 2003 e 2007, ma nel 2013. Ho eliminato tutta la formattazione condizionale dal primo foglio di lavoro ma non riuscivo ancora a eseguire la procedura workbook_open per l'anziano Excel-versioni.

una soluzione, io uso nelle cartelle di lavoro distribuite è quello di utilizzare una variabile locale e un secondo evento nella cartella di lavoro come segue:

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

So che questo post è stato sospeso per un po ', ma ho appena lottato per ore per risolvere questo problema. È la cosa più strana, ma alla fine ho notato che uno dei miei fogli di lavoro era in "Page View" ... e non appena l'ho inserito in "Normal" la mia funzione Workbook_Open() ha ripreso a funzionare normalmente. Molto strano - sicuramente un bug di Excel ... solo felice di aver finalmente risolto ... Speranza che aiuta qualcuno ...

1

La soluzione che ho trovato era in esecuzione il codice qui sotto e poi l'evento "Open" ha funzionato.

Sub EventRestore() 

    Application.EnableEvents = True 

End Sub 
Problemi correlati