Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel Treeview mit Checkboxes

Forumthread: Excel Treeview mit Checkboxes

Excel Treeview mit Checkboxes
22.05.2019 12:36:53
Philipp
Hallo zusammen,
ich habe auf Userform1 eine Treeview1 erstellt, welche sich in der Prozedur "Userform_Initialize" aus Tabelle2 die Inhalte der Parents- und Child-Nodes holt. Das hat gut geklappt.
Nun sollen die Auswahlen in Treeview1, bei welcher die Checkboxen vor den Parents- und Child-Nodes anzeigt werden, nach Klicken auf CommandButton1 in Tabelle1 Spalte A untereinander in Zeilen geschrieben werden. Ich habe schon einiges probiert und wie wild recherchiert - leider aber ohne Erfolg.
Weiß jemand, wie der Ansatz für den entsprechenden Code lauten müsste? Falls es hilfreich wäre, könnte ich auch die entsprechende Datei hochladen.
Herzlichen Dank für alle Antworten.
Grüße vom Philipp
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Treeview mit Checkboxes
22.05.2019 13:20:05
Nepumuk
Hallo Philipp,
eine Mustermappe wäre hilfreich, dann muss ich das nicht nachbauen.
Gruß
Nepumuk
AW: Excel Treeview mit Checkboxes
22.05.2019 13:53:24
Philipp
Hallo Nepumuk,
ich bedanke mich herzlich für die schnelle Antwort. Ich habe die Datei hier hochgeladen:
https://www.dropbox.com/s/k2h4fktvfysjdg0/TreeView_Template.xlsm?dl=0
Momentan muss die Userform noch über die VBA-Bedienfläche aufgerufen werden. Später sollte diese mit dem Öffnen des Dokuments erscheinen. In der Userform sollte in der Treeview dann die Auswahl getroffen werden und die Auswahl anschießend mit Klick auf den Command-Button "Übertragen" bestätigt werden. Dadurch sollen die ausgewählten Parent- und Child-Nodes in aufeinander folgende Zeilen ab Zelle A6 aufgeführt werden.
Toll wäre es dabei, wenn die Parent-Nodes fett und die die Child-Nodes in Standard dargestellt werden.
Bereits jetzt besten Dank für Deine Hilfe und Unterstützung.
Grüße vom Philipp
Anzeige
AW: Excel Treeview mit Checkboxes
22.05.2019 13:56:56
Philipp
Ich habe ungenau geschrieben:
Es muss heißen: "Dadurch sollen die ausgewählten Parent- und Child-Nodes in aufeinander folgende Zeilen ab Zelle A6 in Tabelle1 "Druckversion" aufgeführt werden.
Entschuldigung bitte.
AW: Excel Treeview mit Checkboxes
22.05.2019 14:42:18
Nepumuk
Hallo Philipp,
teste mal:
Private Sub CommandButton1_Click()
    Dim objNode As Node
    Dim lngRow As Long
    lngRow = 6
    With Worksheets("Druckversion")
        Call .Range("A6:A38").ClearContents
        For Each objNode In TreeView1.Nodes
            If objNode.Checked Then
                With .Cells(lngRow, 1)
                    .Value = objNode.Text
                    .Font.Bold = objNode.Parent Is Nothing
                End With
                lngRow = lngRow + 1
            End If
        Next
    End With
End Sub

Gruß
Nepumk
Anzeige
AW: Excel Treeview mit Checkboxes
22.05.2019 14:59:56
Philipp
Hallo Nepumuk,
großartige Arbeit. Vielen, herzlichen Dank. Das ist genau das Ergebnis, an dem ich Stunden erfolglos rumgebastelt habe.
Darf ich Deine Zeit vielleicht nochmal beanspruchen in diesem Zusammenhang? Die Frage lehnt sich an diesen Beitrag an: (https://www.herber.de/forum/archiv/1360to1364/1362659_TreeView_Checkboxes_Child_checked__Parents_chec.html)
Wie erreiche ich, dass wenn eine Child-Node ausgewählt wird automatisch auch die dazugehörige Parent-Node aktiviert wird. Und auch umgekehrt - egal wie viele Child-Nodes aktiviert aktiviert sind, wenn die Parent-Node deaktiviert wird, werden auch die Child-Nodes deaktiviert.
Ich habe es mit dem Code aus dem Beitrag versucht, leider ohne Erfolg.
Anzeige
AW: Excel Treeview mit Checkboxes
22.05.2019 15:24:42
Nepumuk
Hallo Philipp,
so?
Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
    Dim objNode As Node
    Dim lngIndex As Long
    With Node
        If .Parent Is Nothing Then
            If Not .Checked Then
                For Each objNode In TreeView1.Nodes
                    If objNode.Parent Is Node Then objNode.Checked = False
                Next
            End If
        Else
            If .Checked Then .Parent.Checked = True
        End If
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Excel Treeview mit Checkboxes
22.05.2019 15:33:26
Philipp
Hallo Nepumuk,
wieder ein Volltreffer. Ich danke Dir vielmals! Da bemerkt man wirklich fundierte VBA-Kenntnisse.
Nun gebe ich vorerst Ruhe. Den Rest sollte ich durch probieren selbst hinbekommen. Dafür muss ich Dich nicht aufhalten.
Einen schönen Nachmittag Dir und vielen Dank nochmal für die Unterstützung.
Herzliche Grüße
vom Philipp
Anzeige
AW: Excel Treeview mit Checkboxes
22.05.2019 21:12:20
Philipp
Hallo Nepumuk,
ich muss doch schneller nochmal nachhaken, als mir lieb ist.
Zunächst habe ich die Prozedur "TreeView1_NodeCheck" um nachfolgende If-Anweisung erweitert, um zu erzielen: "Wenn nur die Parent-Node ausgewählt wird und Child-Nodes vorhanden sind, alle Child-Nodes ausgewählt werden." Dafür haben ich folgenden Code vor das "End With" eingefügt...
        If .Parent Is Nothing Then
If .Checked Then
For Each objNode In TreeView1.Nodes
If objNode.Parent Is Node Then objNode.Checked = True
Next
End If
End If

Wie kann ich jetzt aber die Prozedur "TreeView1_NodeCheck" auch noch so erweitern, dass:"Wenn keine Child-Node ausgewählt ist, auch die dazugehörige Parent-Node nicht ausgewählt ist - sofern Child-Nodes vorhanden sind". Müsste ich das irgendwie in folgende Richtung lösen:
If objNode.Checked = False Then
ojNode.Parent [...]
End If
Bereits jetzt nochmal Danke für die Unterstützung und Hilfe.
Anzeige
AW: Excel Treeview mit Checkboxes
24.05.2019 19:42:01
Nepumuk
Hallo Philipp,
ich kann dir leider nicht folgen. Mach das mal an einem konkreten Beispiel fest.
Gruß
Nepumuk
AW: Excel Treeview mit Checkboxes
26.05.2019 14:57:25
Nepumuk
Hallo Philipp,
war am Freitag nicht mehr so ganz fit. Jetzt nochmal gelesen und sofort verstanden.
Teste mal:
Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
    Dim objNode As Node
    Dim blnChecked As Boolean
    With Node
        If .Parent Is Nothing Then
            If Not .Checked Then
                For Each objNode In TreeView1.Nodes
                    If objNode.Parent Is Node Then objNode.Checked = False
                Next
            Else
                For Each objNode In TreeView1.Nodes
                    If objNode.Parent Is Node Then objNode.Checked = True
                Next
            End If
        Else
            If .Checked Then
                .Parent.Checked = True
            Else
                For Each objNode In TreeView1.Nodes
                    If objNode.Parent Is Node.Parent Then
                        If objNode.Checked Then blnChecked = True
                    End If
                Next
                If Not blnChecked Then .Parent.Checked = False
            End If
        End If
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Excel Treeview mit Checkboxes
29.05.2019 10:06:30
Philipp
Hallo Nepumuk,
nun habe ich die vergangenen Tage gar nicht hier reingeschaut. Entschuldige bitte. Der Code ist wieder einmal genau passend. Ich danke Dir herzlich. Hiermit läuft nun alles!
Herzliche Grüße
Philipp
AW: Excel Treeview mit Checkboxes
29.05.2019 10:08:24
Philipp
Nachtrag, damit der Thread nicht mehr bei den offenen Fragen angezeigt wird. Alle Fragen wurden mit Deinem Beitrag beantwortet. Danke nochmal für die großartige Unterstützung.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Excel Treeview mit Checkboxes in VBA


Schritt-für-Schritt-Anleitung

  1. Userform und Treeview erstellen:

    • Stelle sicher, dass Du eine Userform mit einem Treeview-Element (TreeView1) in Excel VBA erstellt hast.
    • Füge einen CommandButton (CommandButton1) hinzu, um die Auswahl zu übernehmen.
  2. Inhalte in Treeview laden:

    • Verwende die Userform_Initialize-Prozedur, um die Parent- und Child-Nodes aus einer Excel-Tabelle (z.B. Tabelle2) in das Treeview zu laden.
  3. Checkboxen aktivieren:

    • Stelle sicher, dass die Treeview Checkbox-Option aktiviert ist, um Checkboxen vor den Nodes anzuzeigen.
  4. Daten in Tabelle übertragen:

    • Verwende den folgenden VBA-Code für den CommandButton, um die Auswahl in die Tabelle zu übertragen:
    Private Sub CommandButton1_Click()
       Dim objNode As Node
       Dim lngRow As Long
       lngRow = 6
       With Worksheets("Druckversion")
           .Range("A6:A38").ClearContents
           For Each objNode In TreeView1.Nodes
               If objNode.Checked Then
                   With .Cells(lngRow, 1)
                       .Value = objNode.Text
                       .Font.Bold = objNode.Parent Is Nothing
                   End With
                   lngRow = lngRow + 1
               End If
           Next objNode
       End With
    End Sub
  5. Checkbox-Logik für Parent- und Child-Nodes:

    • Um sicherzustellen, dass die Auswahl der Child-Nodes auch die Parent-Node beeinflusst, benutze den folgenden Code:
    Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
       Dim objNode As Node
       Dim lngIndex As Long
       With Node
           If .Parent Is Nothing Then
               If Not .Checked Then
                   For Each objNode In TreeView1.Nodes
                       If objNode.Parent Is Node Then objNode.Checked = False
                   Next
               End If
           Else
               If .Checked Then .Parent.Checked = True
           End If
       End With
    End Sub

Häufige Fehler und Lösungen

  • Fehler: TreeView zeigt keine Checkboxen an.

    • Lösung: Überprüfe, ob die Style-Eigenschaft des Treeviews auf tvwCheckboxes gesetzt ist.
  • Fehler: Daten werden nicht in die Tabelle übertragen.

    • Lösung: Stelle sicher, dass der richtige Arbeitsblattname ("Druckversion") verwendet wird und dass die Cells-Referenz korrekt ist.
  • Fehler: Parent-Node wird nicht aktiviert, wenn Child-Node aktiviert wird.

    • Lösung: Implementiere die Logik im NodeCheck-Event, um die Checkboxen entsprechend zu verknüpfen.

Alternative Methoden

  • Verwendung von ActiveX-Controls:

    • Du kannst ActiveX-Controls verwenden, um ein benutzerdefiniertes Treeview in Excel zu erstellen, das möglicherweise mehr Flexibilität bietet.
  • Verwendung von Formeln:

    • Wenn Du keine VBA-Lösungen verwenden möchtest, kannst Du auch Excel-Formeln oder Pivot-Tabellen nutzen, um Hierarchien darzustellen, jedoch ohne Checkbox-Funktionalität.

Praktische Beispiele

  • Beispiel für eine einfache Struktur:

    • Hierarchische Daten wie Unternehmensabteilungen oder Produktkategorien können in einem excel tree view angezeigt werden. Lade die Daten von einem Arbeitsblatt und verwende die oben genannten Methoden, um die Auswahl zu verarbeiten.
  • Erweiterung des Codes:

    • Du kannst den Code anpassen, um zusätzliche Informationen wie Notizen oder Statusupdates für jede Node zu speichern, indem Du weitere Spalten in der Ziel-Tabelle verwendest.

Tipps für Profis

  • VBA-Debugging:

    • Nutze die Debugging-Werkzeuge in VBA, um sicherzustellen, dass jede Prozedur wie gewünscht funktioniert. Setze Haltepunkte, um den Code Schritt für Schritt zu analysieren.
  • Verwendung von Klassenmodulen:

    • Wenn Du komplexere Strukturen benötigst, erwäge die Verwendung von Klassenmodulen, um die Datenlogik besser zu kapseln.

FAQ: Häufige Fragen

1. Wie aktiviere ich Checkboxen in meinem Treeview? Um Checkboxen in einem Treeview anzuzeigen, musst Du die Style-Eigenschaft des Treeviews auf tvwCheckboxes setzen.

2. Wie kann ich Child-Nodes auswählen, wenn die Parent-Node aktiviert wird? Du kannst dies durch die Implementierung einer NodeCheck-Prozedur erreichen, die die Checkboxen der Child-Nodes entsprechend der Parent-Node anpasst.

3. Funktioniert das auch in Excel 2016? Ja, die beschriebenen Methoden sind mit Excel 2016 und späteren Versionen kompatibel, solange die VBA-Umgebung aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige