Zeilen ausblenden

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Zeilen ausblenden

    Hallo,

    bin Neuling bei VBA, möchte aber mit einen Makro Zeilen aus/einblenden:

    Wenn in Zelle X10 =16, dann Zeilen 89:144,155:210,221:276 ausblenden
    Wenn in Zelle X10 =20, dann Zeilen 91:144,157:210,223:276 ausblenden
    Wenn in Zelle X10 =24, dann Zeilen 93:144,157:210,225:276 ausblenden
    Der Wert von X10 wird automatisch eingefügt im Notfall kann ich das auch manuell machen.

    Vielen Dank im voraus für eure Hilfe

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range) ' Dieses Event wird geworfen, wenn eine oder mehrere Zellen sich ändern
    2. If Intersect(Target, Range("X10") Is Nothing Then Exit Sub ' nur bei X10 reagieren
    3. Select Case Range("X10").Value
    4. Case 16: Range("89:144,155:210,221:276").EntireRow.Hidden = True
    5. Case 20: ' usw.
    6. Case 24: ' usw.
    7. End Select
    8. End Sub
    Aber ein Design, das Zellen und Zeilennummern so hart codiert, kann nichts taugen.
    Das Zeug ist ja nicht wartbar und nicht veränderbar.
    Wenn du schon auf eigene Sheet-Properties verzichtest, verwende wenigstens Named Ranges.

    Außerdem: Wer blendet die Zeilen wieder ein?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für die schnelle Hilfe, es funktioniert bis auf " If Intersect(Target, Range("X10") Is Nothing Then Exit Sub ' nur bei X10 reagieren " das gibt mir Syntax Fehler zurück. Die Zeilen blend ich mit"Case Is <> 16, 20, 24 : Range("89:144,155:210,221:276").EntireRow.Hidden = False" wieder ein

    feder59 schrieb:

    Syntax Fehler
    War zwar keine Absicht, aber das passiert schon mal, wenn man den Code aus dem Kopf schreibt und nicht testet.
    Sieh es als C&P-Bremse, die dich zum Nachdenken bringen soll, wie der Code funktioniert.

    Klammerpaare zählen kannst du auch.
    Jetzt musst du nur noch die Klammer an der richtigen Stelle schließen.
    Es gibt zwei Möglichkeiten und nur eine davon macht Sinn.

    Hast du nur kopiert oder wenigstens mal über "Named Ranges" nachgedacht?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Wie gesagt bin Neuling auf diesem Gebiet, habe kopiert und dann erweitert. Habe über "Named Ranges" nachgedacht, bin aber nicht schlau geworden wie das funktioniert. Ist das ein Steuerelement?
    Wie gesagt es funktioniert soweit gut, super wäre halt wenn ich in X10 den Wert nicht manuell eingeben müsste (Wert automatisch von anderen Tabellenblatt übernehmen). Ich glaube da müsste ich "calculate" verwenden, weis aber nicht wie. Wäre super wenn du mir helfen könntest. Danke

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("X10")) Is Nothing Then Exit Sub ' nur bei X10 reagieren

    Select Case Range("X10").Value
    Case 16: Range("89:144,155:210,221:276,287:342,353:408,419:474,485:540").EntireRow.Hidden = True
    Case 20: Range("91:144,157:210,223:276,289:342,355:408,421:474,487:540").EntireRow.Hidden = True
    Case 24: Range("93:144,159:210,225:276,291:342,357:408,423:474,489:540").EntireRow.Hidden = True
    Case 28: Range("95:144,161:210,227:276,293:342,359:408,425:474,491:540").EntireRow.Hidden = True
    Case 32: Range("97:144,163:210,229:276,295:342,361:408,427:474,493:540").EntireRow.Hidden = True
    Case 36: Range("99:144,165:210,231:276,297:342,363:408,429:474,495:540").EntireRow.Hidden = True
    Case 40: Range("101:144,167:210,233:276,299:342,365:408,431:474,497:540").EntireRow.Hidden = True
    Case 44: Range("103:144,169:210,235:276,301:342,367:408,433:474,499:540").EntireRow.Hidden = True
    Case 48: Range("105:144,171:210,237:276,303:342,369:408,435:474,501:540").EntireRow.Hidden = True
    Case 48: Range("107:144,173:210,239:276,305:342,371:408,437:474,503:540").EntireRow.Hidden = True
    Case Is <> 16, 20, 24, 28, 32, 36, 40, 44, 48: Range("89:144,155:210,221:276,287:342,353:408,419:474,485:540").EntireRow.Hidden = False
    End Select

    End Sub