Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Diagramme nach mehreren Balken filtern


Betrifft: Diagramme nach mehreren Balken filtern von: Marc
Geschrieben am: 10.09.2019 09:52:18

Hallo zusammen,

in der letzten Woche hat ein sehr lieber User mir einen Code gezeigt, mit dem ich alle Charts eines Tabellenblattes mit einem Filter versehen kann:

Sub test ()
     
     If Optionbotton1 = True Then
     
           For Each chrDia In ActiveSheet.ChartObjects
             With chrDia.Chart
                 For lngZaehler = .FullSeriesCollection.Count To 1 Step -1
                     If .FullSeriesCollection(lngZaehler).Name <> "Verkauf" Then
                         .FullSeriesCollection(lngZaehler).IsFiltered = True
                     Else
                         .FullSeriesCollection(lngZaehler).IsFiltered = False
                     End If
                 Next lngZaehler
             End With
         Next chrDia
      End If
     
     End Sub

Nun hat meine GF Blut geleckt und möchte gerne mehrere Balken in den Diagrammen auswählen können.

Wenn ich nun also folgendes mache, dann wird immer nur der Code des letzten Hakens angezeigt:
Sub Test ()
     
     If CheckBox2 = True Then
     
           For Each chrDia In ActiveSheet.ChartObjects
             With chrDia.Chart
                 For lngZaehler = .FullSeriesCollection.Count To 1 Step -1
                     If .FullSeriesCollection(lngZaehler).Name <> "Verkauf" Then
                         .FullSeriesCollection(lngZaehler).IsFiltered = True
                     Else
                         .FullSeriesCollection(lngZaehler).IsFiltered = False
                     End If
                 Next lngZaehler
             End With
         Next chrDia
      End If
     
     If CheckBox3 = True Then
     
           For Each chrDia In ActiveSheet.ChartObjects
             With chrDia.Chart
                 For lngZaehler = .FullSeriesCollection.Count To 1 Step -1
                     If .FullSeriesCollection(lngZaehler).Name <> "Kunde" Then
                         .FullSeriesCollection(lngZaehler).IsFiltered = True
                     Else
                         .FullSeriesCollection(lngZaehler).IsFiltered = False
                     End If
                 Next lngZaehler
             End With
         Next chrDia
      End If
     
     End Sub

Was muss ich tun, damit ich mir mehrere Optionen anzeigen lassen kann?

Danke für Eure Hilfe!
Marc
  

Betrifft: Bitte Beispielmappe hochladen - o.w.T. von: 1712191.html
Geschrieben am: 10.09.2019 10:14:53


GrußformelBeverly's Excel - Inn
  

Betrifft: AW: Diagramme nach mehreren Balken filtern von: 1712197.html
Geschrieben am: 10.09.2019 10:28:33

Hallo,

ich habe die Datei nun mal entsprechend hochgeladen.

https://www.herber.de/bbs/user/131942.xlsm

Ich möchte nun mit den Checkboxen mehrere Linien auswählen können... :(

Ich bekomme es seit Samstag nicht hin... :(

Danke für Eure Hilfe!
Marc

  

Betrifft: Diagramm Datenreihen Filtern von: 1712209.html
Geschrieben am: 10.09.2019 11:14:08

Hi Marc,

schreibe zuerst die Caption aller aktivierten CheckBoxen in ein Array, laufe dann über alle Datenreihen und prüfe ob der Name der Datenreihe im Array steht - falls ja, dann einblenden, andernfalls ausblenden:

Private Sub CommandButton4_Click()
      Dim ctrBox As Control
      Dim lngZaehler As Long
      Dim chrDia As ChartObject
      Dim arrBoxen()
      Dim varAnzeige As Variant
      Dim intZaehler As Integer
      ReDim arrBoxen(0)
      For Each ctrBox In Controls
          If TypeName(ctrBox) = "CheckBox" Then
              If ctrBox Then
                  ReDim Preserve arrBoxen(0 To intZaehler)
                  arrBoxen(intZaehler) = ctrBox.Caption
                  intZaehler = intZaehler + 1
              End If
          End If
      Next ctrBox
      If arrBoxen(0) <> "" Then
          For Each chrDia In ActiveSheet.ChartObjects
            With chrDia.Chart
                For lngZaehler = .FullSeriesCollection.Count To 1 Step -1
                    varAnzeige = Application.Match(.FullSeriesCollection(lngZaehler).Name, _
                        arrBoxen(), 0)
                    If Not IsNumeric(varAnzeige) Then
                        .FullSeriesCollection(lngZaehler).IsFiltered = True
                    Else
                        .FullSeriesCollection(lngZaehler).IsFiltered = False
                    End If
                Next lngZaehler
            End With
          Next chrDia
      End If
  End Sub
  

GrußformelBeverly's Excel - Inn
  

Betrifft: AW: Diagramm Datenreihen Filtern von: 1712262.html
Geschrieben am: 10.09.2019 14:03:07

Vielen lieben Dank liebe Karin!!!!

Ich verstehe leider nur maximal die Hälfte, werde mir aber nun mal ein Buch zulegen....

Danke, danke, danke!!!!

LG
Marc

  

Betrifft: AW: Diagramm Datenreihen Filtern von: 1712270.html
Geschrieben am: 10.09.2019 14:34:21

Hi Marc,

hier der Code nochmal mit einigen Kommentaren damit du besser verstehst was abläuft:

Private Sub CommandButton4_Click()
    Dim ctrBox As Control
    Dim lngZaehler As Long
    Dim chrDia As ChartObject
    Dim arrBoxen()
    Dim varAnzeige As Variant
    Dim intZaehler As Integer
    ReDim arrBoxen(0)
    ' Schleife über alle Steuerelemente des UserForms
    For Each ctrBox In Controls
        ' laufendes Steuerelement ist eine CheckBox
        If TypeName(ctrBox) = "CheckBox" Then
            '  laufendes Steuerelement ist aktiviert
            If ctrBox Then
                ' erweitere das Array um 1 Feld
                ReDim Preserve arrBoxen(0 To intZaehler)
                ' in letztes Arrayfeld die Caption der laufenden TextBox
                arrBoxen(intZaehler) = ctrBox.Caption
                ' Zähler um 1 erhöhen
                intZaehler = intZaehler + 1
            End If
        End If
    Next ctrBox
    ' erstes Arrayfeld ist belegt, d.h. mindestens 1 CheckBox ist aktiviert
    If arrBoxen(0) <> "" Then
        ' Schleife über alle Diagramme
        For Each chrDia In ActiveSheet.ChartObjects
          With chrDia.Chart
              ' Schleife von der letzten bis zur ersten Datenreihe
              For lngZaehler = .FullSeriesCollection.Count To 1 Step -1
                  ' VERGLEICH() ob Datenreihenname im Array enthalten
                  varAnzeige = Application.Match(.FullSeriesCollection(lngZaehler).Name, _
                      arrBoxen(), 0)
                  ' Datenreihenname ist nicht enthalten und VERGLEICH ergibt keinen Zahlenwert
                  If Not IsNumeric(varAnzeige) Then
                      ' Datenreihe ausblenden
                      .FullSeriesCollection(lngZaehler).IsFiltered = True
                  ' Datenreihenname ist enthalen und ergibt einen Zahlenwert bei VERGLEICH
                  Else
                      ' Datenreihe einblenden
                      .FullSeriesCollection(lngZaehler).IsFiltered = False
                  End If
              Next lngZaehler
          End With
        Next chrDia
    End If
End Sub

GrußformelBeverly's Excel - Inn

Beiträge aus dem Excel-Forum zum Thema "Diagramme nach mehreren Balken filtern"