Hallo,
ich habe eine Arbeitsmappe mit vielen Sheets.
Es werden auch einige Sheets immer wieder in diese Arbeitsmappe reinkopiert.
in dem Sheet ist folgender VBA Text, mit dem Zwecks ständig auf Änderungen zu reagieren.
Hierbei wird auf die Funktion, die mit im VBA Text des Sheets steht "StatusZeile" aufgerufen.
Public Sub Worksheet_Change(ByVal Target As Range) '** Mehrfachauswahl über DropDown-Liste (Gültigkeitsprüfung) '** Einfügen im Code-Container des betreffenden Arbeitsblattes '** Dimensionierung der Variablen Dim rngDV As Range Dim wert_old As String Dim wertnew As String Dim iStartZeile As Integer Dim iLetzteZeile As Integer iStartZeile = 8 iLetzteZeile = 8 '** Errorhandling On Error GoTo Errorhandling '** SPALTE x******Mehrfachauswahl im definierten Bereich (Bsp. B4:B14) durchführen If Not Application.Intersect(Target, Range("x" & iStartZeile & ":" & "x" & iLetzteZeile)) Is _ Nothing Then '**Range definieren Set rngDV = Target.SpecialCells(xlCellTypeAllValidation) If rngDV Is Nothing Then GoTo Errorhandling '** Prüfen, ob eine gültige Zelle ausgewählt wurde und Werte eintragen If Not Application.Intersect(Target, rngDV) Is Nothing Then Application.EnableEvents = False wertnew = Target.Value Application.Undo wertold = Target.Value Target.Value = wertnew If wertold <> "" Then If wertnew <> "" Then Target.Value = wertold & ", " & wertnew End If End If End If Application.EnableEvents = True End If '* ENDE SPALTE x Errorhandling: Application.EnableEvents = True Call StatusZeile End Sub
Public Function Protect() ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True, Password:="oktober2020" End Function
Public Function Unprotect() ActiveSheet.Unprotect Password:="oktober2020" End Function
Sub StatusZeile() ' Leere Statuszeile ausblenden und einblenden Dim Zelle As Range Dim ws As Worksheet Call Unprotect Application.ScreenUpdating = False Set ws = Application.ThisWorkbook.ActiveSheet For Each Zelle In ws.Range("b20:b98") Zelle.EntireRow.Hidden = Zelle = "" Next Call Protect End SubGruß
Private Sub Worksheet_Change(ByVal Target As Range) '** Mehrfachauswahl über DropDown-Liste (Gültigkeitsprüfung) '** Einfügen im Code-Container des betreffenden Arbeitsblattes '** Dimensionierung der Variablen Dim rngDV As Range Dim wertold As String Dim wertnew As String Dim iStartZeile As Integer Dim iLetzteZeile As Integer iStartZeile = 8 iLetzteZeile = 8 '** Errorhandling On Error GoTo Errorhandling '** SPALTE x******Mehrfachauswahl im definierten Bereich (Bsp. B4:B14) durchführen If Not Application.Intersect(Target, Range("x" & iStartZeile & ":" & "x" & iLetzteZeile)) Is _ _ Nothing Then '**Range definieren Set rngDV = Target.SpecialCells(xlCellTypeAllValidation) If rngDV Is Nothing Then GoTo Errorhandling '** Prüfen, ob eine gültige Zelle ausgewählt wurde und Werte eintragen If Not Application.Intersect(Target, rngDV) Is Nothing Then Application.EnableEvents = False wertnew = Target.Value Application.Undo wertold = Target.Value Target.Value = wertnew If wertold <> "" Then If wertnew <> "" Then Target.Value = wertold & ", " & wertnew End If End If End If Application.EnableEvents = True End If '* ENDE SPALTE x Errorhandling: Application.EnableEvents = True Call StatusZeile(Me) End Sub
Sub StatusZeile(wks As Worksheet) ' Leere Statuszeile ausblenden und einblenden Dim Zelle As Range Application.ScreenUpdating = False Call Unprotect(wks) For Each Zelle In wks.Range("b20:b98") Zelle.EntireRow.Hidden = Zelle = "" Next Call Protect(wks) End Sub Public Function Protect(wks As Worksheet) wks.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFiltering:=True, Password:="oktober2020" End Function Public Function Unprotect(wks As Worksheet) wks.Unprotect Password:="oktober2020" End Function