Userform-Name als Variable an Sub übergeben (VBA)

Conny-N

Grünschnabel
Hallo,

Ich habe eine Public Sub die für mehrere Userforms gültig ist (Treeview einlesen). Nun möchte ich den Namen der jeweiligen Userform als Variable an die Prozedur übergeben Nachfolgender Code funktioniert leider nicht :-( > Fehler 466 Argument nicht optional. Kann mir jemand helfen?

In der Userform:

Set TreeView1.ImageList = ImageList1
Dim alleOrdner As String

alleOrdner = Sheets("vip").Range("b304").Value
FillTreeView (alleOrdner)



Im Modul:

' TreeView mit allen Ordnern eines Laufwerks füllen
Public Sub FillTreeView(ByVal StartPath As String, TarUFName As UserForm)
Dim DirName As String
Dim i As Integer
Dim sPos As Integer
Dim ordner As String
Dim MainOrdner As String

' TreeView löschen
TarUFName.TreeView1.Nodes.Clear

' Verzeichnisse ermitteln
If Right$(StartPath, 1) = ":" Then _
StartPath = StartPath + "\"
GetAllFolders StartPath

' Erster Eintrag: Laufwerk selbst
TarUFName.Nodes.Add , , StartPath, StartPath, 3, 3

' Verzeichnisse
While UFname.ListBox8.ListCount > 0
DirName = UFname.ListBox8.List(0)
TarUFName.ListBox8.RemoveItem 0

sPos = InstrRev97(DirName, "\")
ordner = Mid$(DirName, sPos + 1)
MainOrdner = Left$(DirName, sPos - 1)
If InStr(MainOrdner, "\") = 0 Then _
MainOrdner = MainOrdner + "\"

TarUFName.TreeView1.Nodes.Add MainOrdner, tvwChild, DirName, ordner, 1, 2
Wend

' Root öffnen
TarUFName.TreeView1.Nodes(1).Expanded = True

End Sub

' Rekursive Prozedur zum Ermitteln aller Verzeichnisse
Private Sub GetAllFolders(ByVal pfad As String)
Dim Count As Long
Dim i As Long
Dim DirName() As String

On Local Error Resume Next
Count = GetAllSubDir(pfad, DirName())
i = 1
Do Until i > Count
UserForm11.ListBox8.AddItem pfad + DirName(i)
GetAllFolders pfad + DirName(i) + "\"
i = i + 1
Loop
On Local Error GoTo 0
End Sub

' Unterverzeichnisse eines Ordners ermitteln
Private Function GetAllSubDir(Path As String, _
D() As String) As Integer

Dim DirName As String
Dim Count As Integer
DirName = Sheets("vip").Range("b304").Value


If Right$(Path, 1) <> "\" Then Path = Path + "\"
DirName = Dir(Path, vbDirectory)
Count = 0
Do While DirName <> ""
If DirName <> "." And DirName <> ".." Then
If (GetAttr(Path + DirName) And vbDirectory) = _
vbDirectory Then
If (Count Mod 10) = 0 Then
ReDim Preserve D(Count + 10) As String
End If
Count = Count + 1
D(Count) = DirName
End If
End If
DirName = Dir
Loop
GetAllSubDir = Count
End Function


Vielen Dank!
Conny

P.S. Der Code stammt nicht von mir
 
Hi Conny,

na das kann doch auch nicht funktionieren. Deine Prozedur muss mit zwei Parametern aufgerufen werden.
Public Sub FillTreeView(ByVal StartPath As String, TarUFName As UserForm)
als erstes der Startpfad und als zweites ein Form Objekt. Du versuchst aber nun diese Prozedur nur mit einem Parameter aufzurufen, der den Pfad angibt.

Übergebe also als zweiten Parameter die Form, auf der das TreeView ist oder ändere den Funktionsaufruf

Gruß
Das Orakel
 
Hallo Orakel,

danke für Deine Antwort. Leider bin ich (wie man sieht) nicht sehr fit in VBA :(
Ich habe jetzt folgendes versucht, klappt aber auch nicht - ich bekomme einen Syntaxfehler. Was mache ich falsch?

Set TreeView1.ImageList = ImageList1
Dim alleOrdner As String
Dim TarUFName As String
TarUFName = Sheets("vip").Range("b309").Value

alleOrdner = Sheets("vip").Range("b304").Value
FillTreeView(alleOrdner, TarUFName)

Danke und Grüße
Conny
 
Hi Conny,

FillTreeView(alleOrdner, TarUFName)

Also ich gehe mal davon aus, dass die Form, auf der das Treeview ist nicht TarUFName heist. Die Bezeichnung der Form erhälst Du, wenn Du im VBA-Editor die entsprechende Form öffnest und Dir in der Eigenschaften Box den Namen anschaust. Diesen Namen must Du an die Prozedur übergeben.

Gruß
Das Orakel
 
Hallo Orakel,

herzlichen Dank für Deinen Hinweis, jetzt hab ich es begriffen ;)

In der Userform muß es heißen

Set TreeView1.ImageList = ImageList1
Dim alleOrdner As String
alleOrdner = Sheets("vip").Range("b304").Value
FillTreeView (alleOrdner), Me

... und es funktioniert *freu*

Nochmals vielen Dank!
Conny
 
Hi Conny,

das wiederum freut mich. Könntest Du noch den Thread als erledigt markieren

Gruß
Das Orakel
 
Zurück