Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Private Sub Worksheet_Change bei Formeln

Private Sub Worksheet_Change bei Formeln
09.12.2020 12:48:10
Thierry
Hallo
Ich habe fast keine VBA Kenntnisse. Dennoch habe ich folgenden Code gefunden und kopiert.
Dieser funktioniert auch einwandfrei, wenn ich die Daten manuell in Zelle A2 eingebe und mit Enter bestätige.
Das Problem besteht darin, dass in Zelle A2 eine Formal (=Tabelle1!B2) ist. Es scheint, dass der VBA-Code die Änderungen in Telle A2 nicht merkt.
Was muss geändert werden, damit die Zelle bzw. die Formal die Änderungen erkennt.
Vielen Dank für Eure Hilfe
Thierry

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "A2" Then
Select Case Target.Value
Case "Gennaio"
Rows.EntireRow.Hidden = False
Rows("10:52").EntireRow.Hidden = True
Case "Febbraio"
Rows.EntireRow.Hidden = False
Rows("14:52").EntireRow.Hidden = True
Case "Marzo"
Rows.EntireRow.Hidden = False
Rows("18:52").EntireRow.Hidden = True
Case "Aprile"
Rows.EntireRow.Hidden = False
Rows("22:52").EntireRow.Hidden = True
Case "Maggio"
Rows.EntireRow.Hidden = False
Rows("26:52").EntireRow.Hidden = True
Case "Giugno"
Rows.EntireRow.Hidden = False
Rows("30:52").EntireRow.Hidden = True
Case "Luglio"
Rows.EntireRow.Hidden = False
Rows("34:52").EntireRow.Hidden = True
Case "Agosto"
Rows.EntireRow.Hidden = False
Rows("38:52").EntireRow.Hidden = True
Case "Settembre"
Rows.EntireRow.Hidden = False
Rows("42:52").EntireRow.Hidden = True
Case "Ottobre"
Rows.EntireRow.Hidden = False
Rows("46:52").EntireRow.Hidden = True
Case "Novembre"
Rows.EntireRow.Hidden = False
Rows("50:52").EntireRow.Hidden = True
Case Else
Rows.EntireRow.Hidden = False
End Select
End If
End Sub

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:12:58
Nepumuk
Hallo Thierry,
gibst du den Wert in Tabelle1 B2 manuell ein? Wenn ja, dann setzt das Makro in dessen Modul und verweise so auf die andere Tabelle:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "B2" Then
        With Worksheets("Tabelle2") ' Anpassen !!!
            Select Case Target.Value
                Case "Gennaio"
                    .Rows.EntireRow.Hidden = False
                    .Rows("10:52").EntireRow.Hidden = True
                Case "Febbraio"
                    .Rows.EntireRow.Hidden = False
                    .Rows("14:52").EntireRow.Hidden = True
                Case "Marzo"
                    .Rows.EntireRow.Hidden = False
                    .Rows("18:52").EntireRow.Hidden = True
                Case "Aprile"
                    .Rows.EntireRow.Hidden = False
                    .Rows("22:52").EntireRow.Hidden = True
                Case "Maggio"
                    .Rows.EntireRow.Hidden = False
                    .Rows("26:52").EntireRow.Hidden = True
                Case "Giugno"
                    .Rows.EntireRow.Hidden = False
                    .Rows("30:52").EntireRow.Hidden = True
                Case "Luglio"
                    .Rows.EntireRow.Hidden = False
                    .Rows("34:52").EntireRow.Hidden = True
                Case "Agosto"
                    .Rows.EntireRow.Hidden = False
                    .Rows("38:52").EntireRow.Hidden = True
                Case "Settembre"
                    .Rows.EntireRow.Hidden = False
                    .Rows("42:52").EntireRow.Hidden = True
                Case "Ottobre"
                    .Rows.EntireRow.Hidden = False
                    .Rows("46:52").EntireRow.Hidden = True
                Case "Novembre"
                    .Rows.EntireRow.Hidden = False
                    .Rows("50:52").EntireRow.Hidden = True
                Case Else
                    .Rows.EntireRow.Hidden = False
            End Select
        End With
    End If
End Sub

Gruß
Nepumuk
Anzeige
sorry..
09.12.2020 13:18:42
Werner
Hallo,
..keine Ahnung warum deine Antwort bei mir noch nicht angezeigt wurde.
Gruß Werner
AW: sorry..
09.12.2020 13:23:12
Nepumuk
Hallo Werner,
ist doch egal. Dafür musst du dich nicht entschuldigen.
Gruß
Nepumuk
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:21:37
Nepumuk
Hallo Thierry,
ich nochmal. Rows + EntireRow ist doppelt gemoppelt. Das genügt:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "B2" Then
        With Worksheets("Tabelle2") ' Anpassen !!!
            Select Case Target.Value
                Case "Gennaio"
                    .Rows.Hidden = False
                    .Rows("10:52").Hidden = True
                Case "Febbraio"
                    .Rows.Hidden = False
                    .Rows("14:52").Hidden = True
                Case "Marzo"
                    .Rows.Hidden = False
                    .Rows("18:52").Hidden = True
                Case "Aprile"
                    .Rows.Hidden = False
                    .Rows("22:52").Hidden = True
                Case "Maggio"
                    .Rows.Hidden = False
                    .Rows("26:52").Hidden = True
                Case "Giugno"
                    .Rows.Hidden = False
                    .Rows("30:52").Hidden = True
                Case "Luglio"
                    .Rows.Hidden = False
                    .Rows("34:52").Hidden = True
                Case "Agosto"
                    .Rows.Hidden = False
                    .Rows("38:52").Hidden = True
                Case "Settembre"
                    .Rows.Hidden = False
                    .Rows("42:52").Hidden = True
                Case "Ottobre"
                    .Rows.Hidden = False
                    .Rows("46:52").Hidden = True
                Case "Novembre"
                    .Rows.Hidden = False
                    .Rows("50:52").Hidden = True
                Case Else
                    .Rows.Hidden = False
            End Select
        End With
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:44:06
Thierry
Hallo Nepumuk, vielen vielen Dank für die Lösung.
Ich habe noch eine zusätzliche Frage: Wie sieht der Code aus, wenn mehrere Tabellenblätter geändert werden müssen (Tabelle10, Tabelle11, Tabelle12)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B2" Then
With Worksheets("Tabelle10")
Gruss. Thierry
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:47:18
Nepumuk
Hallo Thierry,
soll in allen diesen Tabellen das ausblenden nach dem selben Muster stattfinden?
Gruß
Nepumuk
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:49:55
Thierry
Ja, genau.
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:54:07
Nepumuk
Hallo Thierry,
dann so:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim vntWorksheet As Variant
    If Target.Address(0, 0) = "B2" Then
        For Each vntWorksheet In Array("Tabelle2", "Tabelle3", "Tabelle4") ' Anpassen !!!
            With Worksheets(vntWorksheet)
                Select Case Target.Value
                    Case "Gennaio"
                        .Rows.Hidden = False
                        .Rows("10:52").Hidden = True
                    Case "Febbraio"
                        .Rows.Hidden = False
                        .Rows("14:52").Hidden = True
                    Case "Marzo"
                        .Rows.Hidden = False
                        .Rows("18:52").Hidden = True
                    Case "Aprile"
                        .Rows.Hidden = False
                        .Rows("22:52").Hidden = True
                    Case "Maggio"
                        .Rows.Hidden = False
                        .Rows("26:52").Hidden = True
                    Case "Giugno"
                        .Rows.Hidden = False
                        .Rows("30:52").Hidden = True
                    Case "Luglio"
                        .Rows.Hidden = False
                        .Rows("34:52").Hidden = True
                    Case "Agosto"
                        .Rows.Hidden = False
                        .Rows("38:52").Hidden = True
                    Case "Settembre"
                        .Rows.Hidden = False
                        .Rows("42:52").Hidden = True
                    Case "Ottobre"
                        .Rows.Hidden = False
                        .Rows("46:52").Hidden = True
                    Case "Novembre"
                        .Rows.Hidden = False
                        .Rows("50:52").Hidden = True
                    Case Else
                        .Rows.Hidden = False
                End Select
            End With
        Next
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:50:33
onur
Hi,
Ich finde es ja toll von Dir, dass du dich bei EINEM bedankst, wenn MEHRERE Leute sich die Arbeit gemacht haben, dir zu helfen.
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 14:17:05
Thierry
Hallo Onur
VBA ist für mich eine Fremdsprache, sei mir bitte daher nicht böse, wenn ich mich auf eine Lösung konzentriert habe. Mein Dank gilt auch Dir und allen anderen. Thierry
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 14:23:21
onur
"VBA ist für mich eine Fremdsprache" - ja klar, daran wird es wohl liegen.
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:17:08
Werner
Hallo,
Ich habe fast keine VBA Kenntnisse
Warum dann Status VBA gut?
In dem Fall würde ich die Eingabe in Zelle B2 in Tabelle1 überwachen.
Den Code also ins Codemodul von Tabelle1
Private Sub Worksheet_Change(ByVal Target As Range)
With Worksheets("Tabelle2")
If Target.Address(0, 0) = "B2" Then
Select Case Target.Value
Case "Gennaio"
.Rows.EntireRow.Hidden = False
.Rows("10:52").EntireRow.Hidden = True
Case "Febbraio"
.Rows.EntireRow.Hidden = False
.Rows("14:52").EntireRow.Hidden = True
Case "Marzo"
.Rows.EntireRow.Hidden = False
.Rows("18:52").EntireRow.Hidden = True
Case "Aprile"
.Rows.EntireRow.Hidden = False
.Rows("22:52").EntireRow.Hidden = True
Case "Maggio"
.Rows.EntireRow.Hidden = False
.Rows("26:52").EntireRow.Hidden = True
Case "Giugno"
.Rows.EntireRow.Hidden = False
.Rows("30:52").EntireRow.Hidden = True
Case "Luglio"
.Rows.EntireRow.Hidden = False
.Rows("34:52").EntireRow.Hidden = True
Case "Agosto"
.Rows.EntireRow.Hidden = False
.Rows("38:52").EntireRow.Hidden = True
Case "Settembre"
.Rows.EntireRow.Hidden = False
.Rows("42:52").EntireRow.Hidden = True
Case "Ottobre"
.Rows.EntireRow.Hidden = False
.Rows("46:52").EntireRow.Hidden = True
Case "Novembre"
.Rows.EntireRow.Hidden = False
.Rows("50:52").EntireRow.Hidden = True
Case Else
.Rows.EntireRow.Hidden = False
End Select
End If
End With
End Sub
Worksheet_Change reagiert nur auf händische Eingabe und nicht auf Änderungen durch Formeln.
Für Änderungen in Formeln gibt es das Worksheet_Calculate Ereignis. Dort gibt es allerdings kein Target. Du kannst also nicht konkret eine bestimmte Zelle auf Formeländerung überwachen. Das Ereignis löst bei jeder Formelberechnung irgendwo auf dem Blatt aus.
Gruß Werner
Anzeige
AW: Private Sub Worksheet_Change bei Formeln
09.12.2020 13:46:16
Thierry
Hallo Werner, bei den Kenntnissen habe ich mich vertippt! Sorry

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige