AW: Arbeitsblätter ein/ ausblenden
05.07.2021 14:41:09
Daniel
HI
prinizpell würde ich bei 365 zu erwartenden Blättern keine Buttons verwenden, sondern über das BeforeDoubleIKlick-Event bestmmten Zellen die Button-Funktionalität zuweisen.
damit das auch für alle Blätter gilt, verwendet man das Modul "DieseArbeitsmappe".
Die dort hinterlegten Event-Makros gelten automatisch für alle Blätter der Mappe (Ausnahmen kann man durch abfragen erzeugen), egal wie viele man hinzufügt.
schau dir mal das Beispiel an:
https://www.herber.de/bbs/user/146955.xlsm
das ist der Code für das ganze im Modul "Diese Arbeitsmappe"
Sub AnzeigeTB_Blatt(DatumBis As Date)
Dim Anz As Long
Dim DatumTBl As Date
Dim DatumAb As Date
Dim Sh As Worksheet
Dim Anzeigen As Long
Anz = Range("AnzTage").Value
DatumAb = DatumBis - Anz
For Each Sh In Me.Worksheets
If IsDate(Sh.Name) Then
DatumTBl = CDate(Sh.Name)
Anzeigen = CLng(DatumTBl >= DatumAb And DatumTBl Anzeigen Then Sh.Visible = Anzeigen
If CDate(Sh.Name) = DatumBis Then Sh.Select
End If
Next
End Sub
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim wsh As Worksheet
Dim Datum As Date
If Not Intersect(Target, Sh.Range("A2:E2")) Is Nothing Then
Cancel = True
Select Case Target.Value
Case "heute": Call AnzeigeTB_Blatt(Date)
Case "": If IsDate(Sh.Name) Then Call AnzeigeTB_Blatt(CDate(Sh.Name) + 1)
Case "alle"
For Each wsh In Me.Worksheets
If IsDate(wsh.Name) Then If wsh.Visible xlSheetVisible Then wsh.Visible = xlSheetVisible
Next
Case Else
End Select
End If
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address(0, 0) = "C2" Then
If IsDate(Target.Value) Then Call AnzeigeTB_Blatt(Target.Value)
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Ausgelöst wird es über die Zellen A2:E2 in den Mappen, in diesen muss der entsprechende Text oder das Datum stehen.
Gruß Daniel