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

daten aus sheet in treeview einfügen

Forumthread: daten aus sheet in treeview einfügen

daten aus sheet in treeview einfügen
31.07.2007 11:48:37
jimmi4u
hallo @all,
Ich habe wiedermal ein Problem und hoffe, dass ihr mir da weiterhelfen könnt.
Ich habe ein Sheet, in dem in der ersten Spalte sich eine Verzeichnisstruktur befindet. (Ordnernamen, Unterordner und die Dateien mit dem vollen Pfad). Jetzt gilt es diese in einer Art Ordnerstruktur (explorer like) in einem Treeview überzuführen.
root
--Ordner1
--Unterordner1
--Dateien
--Unterordner1-1
-- dateien1-1
-- etc.
--Unterordner2
-- etc.
-- etc..
--Ordern2
e:\Verzeichnis alt\1112101\Ordner1
e:Verzeichnis alt\1112101\Ordner1\Unterordner1
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Datei.txt
----
e:\Verzeichnis alt\1112101\Ornder2
---
e:\Verzeichnis alt\1112101\ordner2\Datei2-1.dat
--
Ich offe ich habe mein Problem halbewgs verständlich geschildert und hoffe auf etwas hilfe.
Danke schon mal im voraus.
Paul
..

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
mehr details bitte...
31.07.2007 11:54:00
sergiesam
Hi,
lade mal eine Datei hoch, in der die Daten in der Spalte zu sehen sind.
in dieser Schreibweise lässt sich nämlich nicht abbilden, wer Vater und wer Sohn im Tree ist.
z.B. "--" bedeuten unterstruktur - das würde schon reichen.
Root
--Unterordner1
----Dateiname
--Unterordner2
----Dateiname
----Dateiname
oder so ähnlich - wie sehen die Daten tatsächlich aus?
sam

Anzeige
AW: mehr details bitte...
31.07.2007 13:28:54
jimmi4u
Danke für die schnelle Antwort,
Ok ich probier es nochmal:
So soll der Baum aussehen:
root(1112101) - Vater ;)
--Ordner1 - Mutter
---Unterordner1 - Kind1
----Dateien1
...
----Unterordner1-1 - Kind2
-----Dateien1-1
...
----Unterordner1-2 - Kind 3
-----Dateien1-2
..
----Unterordner1-3 - Kind 4
...
---dateienimOrdner1
...
...
--Ordner2
---DateinimOrdner2
---Unterordner1
----Dateien2-1
----Unterordner1-2
-----Unterordner1-2-1
------Dateien im Unterordner1-2-1
(Unterordner beliebig tief bzw. bis 255 Zeichen)
...
"--" bedeutet Unterstruktur
die Daten im sheet sehen dann so aus:
e:\Verzeichnis alt\1112101\Ordner1
e:Verzeichnis alt\1112101\Ordner1\Unterordner1
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Datei.txt
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Unterordner1-1\Unterordner1-1-1
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Unterordner1-1\Unterordner1-1-1\Datei.txt
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Unterordner1-1\Unterordner1-1-2
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Unterordner1-1\Unterordner1-1-2\Datei1.txt
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Unterordner1-1\Unterordner1-1-2\Datei2.txt
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Unterordner1-2
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Unterordner1-2\Unterordner1-2-1
e:\Verzeichnis alt\1112101\Ordner1\Unterordner1\Unterordner1-1\Unterordner1-2-1\Datei.txt
...
e:\Verzeichnis alt\1112101\Ornder2
...
e:\Verzeichnis alt\1112101\ordner2\Datei2-1.dat
...
Ornder3 , etc.
sind ca. 4000 Einträge(also Ordner, Unterordner, UnterUnterordner, Dateien, etc)
Der User suchts sich im vorhinein das root Verzeichnis aus. In dem Fall ist es 1112101. das sheet wird mit den Pfaden von allen sich darin befindlichen Dateien und Ordnern befüllt.
wie gesagt, die Tiefe der Verzeichnisse ist beliebig, der Pfad übersteigt aber keine 255 Zeichen. (das ist auch glaub ich die Begrenzung von Windows)
Ich hoffe, die Problemstellung ist gelungen und hoffe auch, dass die Lösung nicht allzu schwierig ausfällt.
Danke nochmal,
Paul

Anzeige
AW: mehr details bitte...
31.07.2007 14:01:00
jimmi4u
oder besteht die Möglichkeit das treeview direkt aus dem Ordnerauwahldialog mit den Kurzpfaden von den Unterordneren und Dateien zu füllen. Da würde ich mir das befüllen der sheet ersparren?
nochmals danke für die Bemühungen,
paul

AW: mehr details bitte...
31.07.2007 15:26:08
jimmi4u
hmmpf, der liefert mir da bei
Private Sub SubTreeAufbauen(fld As Folder)
Dim n As Node
Dim unterordner As Folder
Dim f As File
Set n = Me.TreeView1.Nodes.Add(fld.ParentFolder.Path, tvwChild, fld.Path, fld.Name)
die fehlermeldung Element nor Found: laufzeitfehler: 35601
hab dein code einfach copied und pasted, und die Pfadeingabe eingestellt. Das schlimme ist ja das, es sind alle Variablen mit den richtigen Werten belegt?
Bitte einmal noch um hilfe,
danke danke,
Paul
sagst mir deine Adresse wo ich das Bier hinliefern soll *gg*

Anzeige
AW: mehr details bitte...
31.07.2007 16:12:44
jimmi4u
hier der code meiner userform:

Private Sub ComboBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As  _
Single, ByVal Y As Single)
call TreeAufbauen( Laufwerk())
Application.ScreenUpdating = True
End Sub


Function Laufwerk() As String
Laufwerk = GetDirectory("Hir das Verzeichnis mit der Wirtschaftseinheit eintragen")
If Laufwerk = "" Then Exit Function
If Right(Laufwerk, 1) "\" Then Laufwerk = Laufwerk + "\"
End Function



Private Sub TreeAufbauen(vollständigerPfad As String)
Dim fso As New FileSystemObject, fld As Folder, n As Node, unterordner As Folder, f As File
Me.TreeView1.Nodes.Clear
Set fso = New FileSystemObject
Set fld = fso.GetFolder(vollständigerPfad)
Set n = Me.TreeView1.Nodes.Add(, , vollständigerPfad, vollständigerPfad)
n.Expanded = True
For Each unterordner In fld.SubFolders
Call SubTreeAufbauen(unterordner)
Next unterordner
For Each f In fld.Files
Call Me.TreeView1.Nodes.Add(vollständigerPfad, tvwChild, f.Path & f.Name, f.Name)
Next f
End Sub


Sub SubTreeAufbauen(fld As Folder)
Dim n As Node
Dim unterordner As Folder
Dim f As File
Set n = Me.TreeView1.Nodes.Add(fld.ParentFolder.Path, tvwChild, fld.Path, fld.Name)
For Each unterordner In fld.SubFolders
DoEvents
SubTreeAufbauen unterordner
Next unterordner
For Each f In fld.Files
Call Me.TreeView1.Nodes.Add(fld.Path, tvwChild, f.Path & f.Name, f.Name)
Next f
End Sub


Bitte um Hilfe!!
Paul

Anzeige
Unterschiede in der Schreibweise...
31.07.2007 16:41:00
sergiesam
Hi,
fld.path gibt den Pfad ohne abschließendem "\" an. auch Groß/Kleinschreibung könnte sich negativ auswirken.
mit dem unten angeführten Code sind diese Fehler behoben - uCase macht immer Großbuchstaben und der erste Root-Ordner wird nicht mehr durch den angebenen Pfad sondern durch fld.Path dieses Pfades angegeben, damit sind alle Schreibweisen gleich...
lg,
Sam

Private Sub TreeAufbauen(vollständigerPfad As String)
Dim fso As New FileSystemObject, fld As Folder, n As Node, unterordner As Folder, f As File
Me.TreeView1.Nodes.Clear
Set fso = New FileSystemObject
Set fld = fso.GetFolder(vollständigerPfad)
Set n = Me.TreeView1.Nodes.Add(, , UCase(fld.Path), vollständigerPfad)
n.Expanded = True
For Each unterordner In fld.SubFolders
Call SubTreeAufbauen(unterordner)
Next unterordner
For Each f In fld.Files
Call Me.TreeView1.Nodes.Add(UCase(vollständigerPfad), tvwChild, f.Path & f.Name, f.Name)
Next f
End Sub


Sub SubTreeAufbauen(fld As Folder)
Dim n As Node
Dim unterordner As Folder
Dim f As File
Set n = Me.TreeView1.Nodes.Add(UCase(fld.ParentFolder.Path), tvwChild, UCase(fld.Path), fld.Name)
For Each unterordner In fld.SubFolders
DoEvents
SubTreeAufbauen unterordner
Next unterordner
For Each f In fld.Files
Call Me.TreeView1.Nodes.Add(UCase(fld.Path), tvwChild, UCase(f.Path & f.Name), f.Name)
Next f
End Sub


Anzeige
AW: Unterschiede in der Schreibweise...
31.07.2007 19:35:17
Paul
danke, danke. ihr seid echt die ALLERBESTEN.
danke (habe ich mich schon eigentlich bedankt?) DANKE VIELMALS
Paul

AW: mehr details bitte...
31.07.2007 16:18:06
Bernd
Hallo jimmi4u,
habe nur etwas von Daten und Stammbaum gelesen. Hier mal eine Datei aus meinem Fundus - habe ich nicht selber gemacht, da ich von VBA leider keine Ahnung habe, aber vielleicht hilft's Dir weiter:
https://www.herber.de/bbs/user/44631.xls
Die Datei ist von Bert Körn - an dieser Stelle nochmals vielen Dank, konnte ich auch schon gut gebrauchen!
Sag' mal bitte Bescheid, ob Du etwas damit anfangen konntest.
Gruß Bernd

Anzeige
AW: mehr details bitte...
31.07.2007 16:18:00
sergiesam
hi,
hmmm... Schwer jetzt hier eine Fehleranalyse zu machen...
Element not found heißt hier, dass fld.ParentFolder.path (also der Vaterkey) nicht existiert. Du kannst ja mal fld.parentfolder.path markieren und "Debuggen" "Überwachung hinzufügen" klicken. dann siehst du, welchen Knoten er erwartet.
Ist dir der Code ungefähr klar? Ich habe deine Anmerkung übernommen, dass du die Ordner nicht extra ins Excel übernehmen musst, sondern dass er direkt auf das Verzeichnis zugreift.
du kannst ja meine Mustermappe mal direkt starte und als Verzeichnis "C:\Windows" angeben - beim Windowsverzeichnis dauert es halt ziemlich lange, bis er fertig ist.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Daten aus Excel-Sheet in TreeView einfügen


Schritt-für-Schritt-Anleitung

Um Daten aus einem Excel-Sheet in ein TreeView-Element einzufügen, folge diesen Schritten:

  1. Vorbereitung der Daten: Stelle sicher, dass deine Daten in einer Spalte angeordnet sind, wobei jede Zeile den vollständigen Pfad zu einem Ordner oder einer Datei enthält.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  3. Einfügen eines UserForms:

    • Klicke auf "Einfügen" und wähle "UserForm".
    • Füge ein TreeView-Steuerelement hinzu (rechne damit, dass der Microsoft Windows Common Controls-Container installiert ist).
  4. Code hinzufügen: Füge den folgenden Beispielcode in das UserForm ein, um das TreeView mit den Daten zu füllen:

    Private Sub UserForm_Initialize()
       Dim fso As New FileSystemObject
       Dim fld As Folder
       Dim n As Node
       Dim vollständigerPfad As String
    
       vollständigerPfad = "C:\Pfad\zu\deinem\Ordner" ' Pfad anpassen
       Set fld = fso.GetFolder(vollständigerPfad)
       Set n = Me.TreeView1.Nodes.Add(, , fld.Path, fld.Name)
       n.Expanded = True
       Call SubTreeAufbauen(fld)
    End Sub
    
    Sub SubTreeAufbauen(fld As Folder)
       Dim unterordner As Folder
       Dim f As File
       For Each unterordner In fld.SubFolders
           Call SubTreeAufbauen(unterordner)
       Next unterordner
       For Each f In fld.Files
           Call Me.TreeView1.Nodes.Add(fld.Path, tvwChild, f.Path, f.Name)
       Next f
    End Sub
  5. UserForm ausführen: Drücke F5, um das UserForm zu starten und das TreeView mit den Daten zu füllen.


Häufige Fehler und Lösungen

  • Fehlermeldung "Element not found": Diese tritt auf, wenn der angegebene Pfad nicht existiert. Überprüfe den Pfad, den du im VBA-Code angegeben hast. Stelle sicher, dass der Pfad korrekt ist und dass alle Ordner und Dateien existieren.

  • Schreibfehler im Code: Achte darauf, dass die Groß- und Kleinschreibung der Ordnernamen korrekt ist. Der Pfad muss exakt übereinstimmen, um Fehler zu vermeiden.

  • TreeView wird nicht aktualisiert: Wenn das TreeView nicht aktualisiert wird, stelle sicher, dass du Me.TreeView1.Nodes.Clear am Anfang des Codes hinzugefügt hast, um vorherige Einträge zu löschen.


Alternative Methoden

Eine alternative Methode, um ein TreeView zu befüllen, ist die Verwendung des Ordnerauswahldialogs. Hierbei wird der Benutzer gebeten, das Verzeichnis auszuwählen, und das TreeView wird direkt daraus gefüllt. Der entsprechende Code könnte so aussehen:

Private Sub CommandButton1_Click()
    Dim fso As New FileSystemObject
    Dim fld As Folder
    Dim n As Node
    Dim vollständigerPfad As String

    vollständigerPfad = GetFolder() ' Funktion zum Öffnen des Ordnerauswahldialogs
    If vollständigerPfad = "" Then Exit Sub

    Set fld = fso.GetFolder(vollständigerPfad)
    Set n = Me.TreeView1.Nodes.Add(, , fld.Name, fld.Name)
    n.Expanded = True
    Call SubTreeAufbauen(fld)
End Sub

Praktische Beispiele

Hier sind einige Beispiele zur Verwendung der oben genannten Methoden:

  • Beispiel 1: Wenn du einen Ordner mit der Struktur C:\Daten\Projekte\ hast, wird das TreeView beim Ausführen des Codes automatisch die Unterordner und Dateien auflisten.

  • Beispiel 2: Verwende den Ordnerauswahldialog, um ein beliebiges Verzeichnis auszuwählen. Das TreeView wird dann dynamisch mit den Inhalten dieses Verzeichnisses gefüllt.


Tipps für Profis

  • Verwende die DoEvents-Anweisung, um sicherzustellen, dass die Benutzeroberfläche während des Ladevorgangs responsiv bleibt.

  • Teste den Code mit unterschiedlichen Verzeichnissen und Dateistrukturen, um sicherzustellen, dass er robust ist.

  • Füge Fehlerbehandlungsroutinen hinzu, um mögliche Laufzeitfehler abzufangen und anzuzeigen, was schiefgelaufen ist.


FAQ: Häufige Fragen

1. Frage
Wie tief kann die Ordnerstruktur sein?
Die Ordnerstruktur kann beliebig tief sein, solange die Pfadlängen 255 Zeichen nicht überschreiten.

2. Frage
Kann ich auch Netzwerklaufwerke verwenden?
Ja, du kannst auch Netzwerklaufwerke verwenden, achte jedoch darauf, dass du die richtigen Berechtigungen hast.

3. Frage
Wie kann ich die Ansicht des TreeViews anpassen?
Du kannst die Eigenschaften des TreeView-Steuerelements im VBA-Editor anpassen, um das Aussehen zu verändern.

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