web-dev-qa-db-fra.com

Le sous-classeur Workbook_Open ne s'exécutera pas lorsque j'ouvrirai le classeur?

Ce programme est censé créer un bouton sur lequel l'utilisateur peut appuyer pour activer un autre sous-marin. D'après mes recherches en ligne, il semble que le sous-dessous devrait s'activer lors de l'ouverture du classeur, mais ce n'est pas le cas

Qu'est-ce que je fais mal?

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
13
TheTreeMan

Assurez-vous que votre Private Sub Workbook_Open () sous-routine est collé à l'intérieur du This Workbook object et non dans un objet Module, Form ou Sheet.

30
danielpiestrak

Intéressant . En 2009, un conflit avec le formatage conditionnel de la feuille à ouvrir est décrit, comme dans vbforum post .

Il semble que ce bogue existe toujours dans Excel et empêche le déclenchement de l'événement workbook_open . J'ai un classeur (l'ancien format binaire XLS) qui ne déclenche tout simplement pas l'événement dans Excel 2003 et 2007 mais le fait en 2013. I supprimé toutes les mises en forme conditionnelles de la première feuille de calcul, mais ne pouvait toujours pas exécuter la procédure workbook_open dans les anciennes versions d'Excel.

Une solution de contournement que j'utilise dans les classeurs distribués consiste à utiliser une variable locale et un deuxième événement dans le classeur, comme suit:

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

Je sais que ce message est en sommeil depuis un certain temps, mais je me suis battu pendant des heures pour résoudre ce problème. C'est la chose la plus étrange, mais j'ai finalement remarqué qu'une de mes feuilles de travail était en "Vue de page" ... et dès que je l'ai mise en "Normal", ma fonction Workbook_Open () a repris son fonctionnement normal. TRES ETRANGE - définitivement un bug d'Excel ... juste heureux de l'avoir finalement résolu ... J'espère que cela aidera quelqu'un ...

2
Shawn

La solution que j'ai trouvée exécutait le code ci-dessous, puis l'événement "Ouvrir" fonctionnait.

Sub EventRestore()

    Application.EnableEvents = True

End Sub
2
Nazim

Semblable à L'activation de l'événement par Nazim via une solution de code J'ai découvert le correctif suivant:

le correctif

la fermeture de tous les classeurs Excel et de fenêtres VBA et la réouverture de celui avec Workbook_Open() ont résolu le problème.
(probablement dû à l’événement permettant une solution similaire à la solution de Nazim décrite ci-dessus).

expérience problématique

Au moment de déboguer et d’abandonner l’exécution, j’ai désactivé les événements du code en cours d’exécution avant d’abandonner. Je n'ai pas remarqué cette situation au début et même après la fermeture/réouverture de mon cahier, cela n'a pas fonctionné ...

cause probable

... Les autres classeurs Excel ouverts ou une instance globale ont en quelque sorte "rappelé" que les événements du classeur rouvert avaient été désactivés.

0
Andreas Dietrich