la méthode worksheet_activate Excel VBA ne fonctionne pas correctement

J'ai une feuille de calcul avec un petit sous-programme qui devrait faire trois choses lorsque l'onglet de la feuille "Modèle" est cliqué: 1. faites une copy de la feuille "Modèle" et placez-la avant la feuille "Modèle" 2 d'origine. modifiez le nom de la feuille copiée pour être la date d'aujourd'hui (10-13-2016) 3. modifiez le contenu de la cellule B1 pour être la date d'aujourd'hui (jeudi 13 octobre 2016)

Le code ci-dessous est ce genre de chose. Les deux choses dont j'ai besoin d'aide sont les suivantes: 1. Pour get la feuille à copyr, je dois cliquer sur une autre feuille, puis cliquer sur la feuille "Modèle". Je voudrais pouvoir cliquer simplement sur l'onglet "Modèle" et lui faire créer la copy, même si la feuille "Modèle" est déjà la feuille active. 2. Pour une raison quelconque, le code VBA m'empêche de supprimer l'onglet qui est créé lorsque vous click l'onglet "Modèle".

Private Sub Worksheet_Activate() Application.EnableEvents = False If ActiveSheet.Name = "Template" Then Worksheets("Template").Copy before:=Worksheets("Template") ActiveSheet.Range("B2").Select ActiveCell.FormulaR1C1 = Format(Date, "dddd, mmm d, yyyy") ActiveSheet.Name = Format(Date, "mm-dd-yyyy") End If Application.EnableEvents = True End Sub 

Je sais que c'est probablement très simple, mais je n'ai pu find aucune reference à ce comportement n'importe où. Toute aide sera très appréciée.

vous n'utiliseriez pas Worksheet_Activate() car il serait copié avec les copys de feuilles de calcul, de sorte que les feuilles de travail copiées ont généré d'autres feuilles de travail

de sorte que vous souhaitez utiliser le gestionnaire d'events Workbook_SheetActivate()

même alors, vous devez savoir que, lors de la suppression d'une feuille juste précédant "Template", la feuille active devient "Template" (la suivante), activant ainsi la procédure de clonage et faisant apparaître comme si "le code VBA vous empêche" de supprimer l'onglet "

puis tapez ce code dans le volet de code ThisWorkBook:

 Option Explicit Dim nextShtName As Ssortingng Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim newName As Ssortingng If nextShtName = "Template" Then nextShtName = "" Else If Sh.Name = "Template" Then newName = Format(Date, "mm-dd-yyyy") If GetSheet(newName) Is Nothing Then Application.EnableEvents = False On Error GoTo exitsub Sh.Copy before:=Worksheets("Template") With ActiveSheet .Range("B2").FormulaR1C1 = Format(Date, "dddd, mmm d, yyyy") .Name = newName End With exitsub: Application.EnableEvents = True Else MsgBox "sheet '" & newName & "' already in this workbook", vbInformation End If End If End If End Sub Function GetSheet(shtName As Ssortingng) As Worksheet On Error Resume Next Set GetSheet = Worksheets(shtName) End Function Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object) Dim i As Long For i = 1 To Worksheets.Count If Worksheets(i).Name = Sh.Name Then Exit For Next i nextShtName = Worksheets(i + 1).Name End Sub