Empêchez MSGBOX d'apparaître à partir de la feuille individuelle lorsque Workbook_BeforeClose est activé à proximité

Je suis nouveau dans VBA et Excel. Je me demandais si il y a un problème que je pourrais empêcher une boîte de message d'apparaître à proximité et une feuille de travail individuelle lorsque le script Workbook_BeforeClose est exécuté? Vous findez ci-dessous le script Workbook_BeforeClose, puis séparé sera le file msgbox individuel qui s'exécute lorsque je ne le souhaite pas. Je voudrais pouvoir y parvenir, de sorte qu'il ne soit pas ennuyeux pour les users à proximité. Suggestions?

Informations complémentaires: Tout dans mon script principal "On Close" je voudrais restr le même. Je ne veux tout simplement pas que l'object de feuille de travail individuel soit activé à proximité. Parce que mon script fermé bloque le tableau de bord afin que les users soient forcés d'activer les macros afin qu'il passe par les feuilles et les cache. Eh bien, dans ce process, il a également activé cette feuille et montre le MSGBOX que je ne veux pas de "Objet de feuille de travail individuel:" Je veux qu'il ne s'affiche pas lorsque "Workbook_BeforeClose:" est activé.

Workbook_BeforeFermer:

Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim ws As Worksheet Dim sDateTime As Ssortingng, sFileName As Ssortingng Sheets("START").Visible = xlSheetVisible For Each ws In ThisWorkbook.Worksheets If ws.Name <> "START" Then ws.Visible = xlVeryHidden End If Next ws Application.DisplayAlerts = False If ThisWorkbook.Readonly = True Then GoTo Passed2 GoTo Passed3 Passed2: If IsWorkbookOpen("CCC_Error_Tracker.xlsm") Then MsgBox "Excel has detected that your `Team Error Tracker` is still open and has not been saved. The Opportunities Dashboard will now close. As a reminder, in order to save your data, you must close ProcessID: `CCC_Error_Tracker.xlsm`", vbInformation End If GoTo End1: Passed3: CodeRetry: On Error GoTo Failed If Me.Saved = True And BackupReqd = False Then Exit Sub With ThisWorkbook sDateTime = " (" & Format(Now, "yyyy-mm-dd hhmm") & ").xlsm" sFileName = Replace(.Name, ".xlsm", sDateTime) .SaveCopyAs Filename:="P:\WI\Teams\Programs\J&J CCC\Care Specialist\Alicia's Team\FPA RESULTS\Supporting_Files\FPA_FILE_BACKUPS\Opportunities_Dashboard\" & sFileName GoTo Passed Failed: GoTo CodeRetry Passed: ThisWorkbook.Save MsgBox "Your data has been saved and backed-up successfully! Your backup will be stored for 72 hours before discarded to save disk space. Email [email protected] if you have a suggestion." GoTo End2 End1: Application.Quit End2: End With End Sub 

Objet de feuille de travail individuel:

  Private Sub Worksheet_Activate() If ThisWorkbook.Readonly = True Then GoTo Readonly GoTo Editmode Readonly: MsgBox "You're currently in read only mode and cannot save feedback. If you continue to provide feedback, you will lose all data on close." Editmode: End Sub 

OK, voyons si cela vous rapproche. Il peut y avoir d'autres façons, mais il y a un moyen d'y parvenir. Ceci est juste pour les besoins de démonstration et d'apprentissage, donc j'utilise un nouveau classur plutôt que votre code existant. J'espère que vous verrez comment cela fonctionne et que vous pourrez modifier votre code en fonction de vos besoins.

Étape 1: Créez un nouveau classur et ajoutez quelques feuilles de calcul (mon exemple a 3).

Étape 2: ajoutez un code à l'événement Worksheeet_Activate pour chaque feuille de calcul. Quelque chose comme:

 Private Sub Worksheet_Activate() If Not ClosingEvent Then MsgBox Sheet1.Name End Sub 

modifiez la reference de la feuille pour chaque feuille de calcul.

Étape 3: Ajoutez un nouveau module et en haut, mettez ceci:

 Public ClosingEvent As Boolean 

Étape 4: Dans l'événement Workbook_BeforeClose, ajoutez ce code:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim ws As Worksheet ClosingEvent = True For Each ws In ThisWorkbook.Worksheets ws.Activate Next ws ' this is here for testing, to keep the workbook from actually closing. Cancel = True ClosingEvent = False End Sub 

Maintenant, click chaque onglet et consultez cette boîte de message? Regardez ce qui se passe lorsque vous fermez le classur, pas de boîtes de message! N'hésitez pas à parcourir l'événement de fermeture afin que vous puissiez voir chaque feuille de calcul activée s'exécuter, mais puisque vous avez configuré le drapeau pour ne s'exécuter que lorsque ce n'est pas l'événement de fermeture, il saute sur la boîte de message. Si vous ne me croyez pas, commenter la ligne ClosingEvent = True dans l'événement BeforeClose et relancer le code …

J'espère que cela pourra aider! Si vous avez besoin de plus d'assistance, veuillez postr.