Microsoft Excel

Herbers Excel/VBA-Archiv

Aktualisierung VBA-Code in Arbeitsblatt

Betrifft: Aktualisierung VBA-Code in Arbeitsblatt von: Bernhard
Geschrieben am: 18.08.2020 10:50:05

Hallo,
ich hoffe, dass mir hier jemand bei nachfolgendem Problem helfen kann. Ich habe in einem Excel-Tabellenblatt eine Frageliste erstellt, bei der die Antworten jeweils mit "x" gegeben werden können. Je Nachdem, ob bei einer Frage "x" für "trifft zu" eingegeben wird blenden sich dann bestimmte Zeilen aus. Wenn das "x" wieder gelöscht wird, dann blenden sich die Zeilen wieder ein. Das funktioniert mit folgendem Code (auszugsweise dargestellt) soweit auch gut:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$I$98" Then
    If Target.Value = "x" Then
        Rows("170:224").Hidden = True
    Else
        Rows("170:224").Hidden = False
    End If
ElseIf Target.Address = "$I$99" Then
    If Target.Value = "x" Then
        Rows("225:228").Hidden = True
        Rows("579:583").Hidden = True
    Else
        Rows("225:228").Hidden = False
        Rows("579:583").Hidden = False
    End If
Ende If
End Sub
Das Problem ist, dass wenn man eine ursprünglich gemachte Eingabe nicht einzeln wieder löscht (dh in die betroffene Zelle klickt, das "x" löscht und dann die Zelle wieder verlässt), sondern mehrere Zellen markiert und mehrere Werte gleichzeitig löscht, dann werden die Zeilen nicht wieder eingeblendet. Man muss immer jede Zelle einzeln anwählen, damit das funktioniert. Ich habe schon mit "Refresh.All" und "Calculate" herumprobiert, komme aber zu keiner Lösung. Es wäre auch ok, wenn die Neuberechnung nicht automatisch, sondern durch Klicken eines Steuerungselements initiiert wird. Das habe ich leider aber ebenso wenig zusammengebracht.
Vielen Dank für eure Hilfe!
Bernhard

Betrifft: AW: Aktualisierung VBA-Code in Arbeitsblatt
von: Bernd
Geschrieben am: 18.08.2020 10:59:49

Servus Bernhard,

teste mal:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
    If Target.Address = "$I$98" Then
        If Target.Value = "x" Then
            Rows("170:224").Hidden = True
        Else
            Rows("170:224").Hidden = False
        End If
    ElseIf Target.Address = "$I$99" Then
        If Target.Value = "x" Then
            Rows("225:228").Hidden = True
            Rows("579:583").Hidden = True
        Else
            Rows("225:228").Hidden = False
            Rows("579:583").Hidden = False
        End If
    End If
Else
    Rows("1:1000").Hidden = False ' ggf. noch anpassen
End If
End Sub
Grüße, Bernd

Betrifft: AW: Aktualisierung VBA-Code in Arbeitsblatt
von: Bernhard
Geschrieben am: 18.08.2020 11:29:32

Vielen Dank! Hat super funktioniert!

Betrifft: AW: Aktualisierung VBA-Code in Arbeitsblatt
von: Bernhard
Geschrieben am: 18.08.2020 11:56:08

Da habe ich mich wohl zu früh gefreut. Die Anpassung des Codes bewirkt zwar, dass die Zeilen eingeblendet werden, wenn ich das "x" in mehreren Zellen gleichzeitig lösche, es blendet mir aber auch Zeilen wieder ein, wo das "x" stehen geblieben ist.

Betrifft: AW: Aktualisierung VBA-Code in Arbeitsblatt
von: Regina Resch-Jansen
Geschrieben am: 18.08.2020 11:00:21

Hi Bernhard,
an dem Problem habe ich mir auch schon mal die Zählen ausgebissen. Wenn Du das Ganze über eine Schaltfläche lösen möchtest, könnte das ein Ansatz sein:
Public Sub aktualisierung()
Dim lng_zeile As Long
With Worksheets("Tabelle1") ' Anpassen!
    For lng_zeile = 1 To 99  ' Läuft von Zeile 1 bis 99, ggf. anpassen
        Select Case lng_zeile
            ' Case 1 - 97
            Case 98
                If .Cells(lng_zeile, 9) = "x" Then
                    .Rows("170:224").Hidden = True
                Else
                    .Rows("170:224").Hidden = False
                End If
            Case 99
                If .Cells(lng_zeile, 9) = "x" Then
                    .Rows("225:228").Hidden = True
                    .Rows("579:583").Hidden = True
                Else
                    .Rows("225:228").Hidden = False
                    .Rows("579:583").Hidden = False
                End If
        End If
        End Select
    Next
End With
End Sub
Gruß Regina

Betrifft: AW: Aktualisierung VBA-Code in Arbeitsblatt
von: UweD
Geschrieben am: 18.08.2020 11:07:13

Hallo

versuch es mal so
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Z
    For Each Z In Target
        If Z.Address = "$I$98" Then
            If Z.Value = "x" Then
                Rows("170:224").Hidden = True
            Else
                Rows("170:224").Hidden = False
            End If
        End If
        If Z.Address = "$I$99" Then
            If Z.Value = "x" Then
                Rows("225:228").Hidden = True
                Rows("579:583").Hidden = True
            Else
                Rows("225:228").Hidden = False
                Rows("579:583").Hidden = False
            End If
        End If
    Next
End Sub

LG UweD

Betrifft: Kürzer..
von: UweD
Geschrieben am: 18.08.2020 11:11:22


Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Z
    For Each Z In Target
        If Z.Address = "$I$98" Then
            Rows("170:224").Hidden = (Z.Value = "x")
        End If
        
        If Z.Address = "$I$99" Then
            Rows("225:228").Hidden = (Z.Value = "x")
            Rows("579:583").Hidden = (Z.Value = "x")
        End If
    Next
End Sub

LG UweD

Betrifft: AW: Kürzer..
von: Bernhard
Geschrieben am: 18.08.2020 11:31:03

Danke an euch alle für die Unterstützung!!

Beiträge aus dem Excel-Forum zum Thema "Aktualisierung VBA-Code in Arbeitsblatt"