Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1420to1424
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA 2 einfache "?" Fragen

VBA 2 einfache "?" Fragen
23.04.2015 11:16:45
Ralf
Hallo und guten morgen,
ich suche auf die schnelle eine Lösung für mein kleines Excel/ VBA Problem. Ich habe festgestellt, dass ich schon mal etwas fitter mit VBA war und komme nun nicht weiter.
Aufgabenstellung:
1. Ordner im Netzlaufwerk, der jeweils wieder Unterordner enthält (1-2 weitere Ebenen)
Diese Ordner möchte ich nun in Excel aufgelistet bekommen. Hierzu habe ich im Netz
auch ein Makro gefunden dass zum Teil funktioniert.
Allerdings soll die Datei auf unterschiedliche Seicherorte -je nach Bedarf-zugreifen um die jeweiligen Ordner zu finden und aufzulisten.
Ich habe nun folgendes Modul:
Public Function Pfad_Datei(Blatt$) As String
Dim Pfad As String
Dim Datei As String
With Worksheets(Blatt$)
'Hole aus Zelle B1 den Pfad
Pfad = .Range("B1").Value
'Hole aus Zelle B2 den Dateinamen
Datei = .Range("B2").Value
End With
'Überprüfe, ob Pfad am Ende einen "\" hat; falls nicht füge ihn an
If Right(Pfad, 1)  "\" Then Pfad = Pfad & "\"
'Gib beides Pfad+Dateiname als Rückgabewert aus der Funktion zurück
Pfad_Datei = Pfad & Datei
End Function

Hier wird mir ja nur ein Pfad generiert. Ich benötige aber 5 Pfade, welche ich durch Eingabe in der Zelle B2 bis B6 definiere.
Habe schon versucht " Datei = .Range("B2") .Value" &
"Pfad_Datei = Pfad & Datei" durch "Datei 3= .Range("B3") .Value" &
"Pfad_Datei3 = Pfad & Datei3" zu ersetzen, habe anscheinend aber die falsche Syntax.
2. Fragestellung (Trivial)
Wie bekomme ich mittels Schaltfläche vier Makros (Jeweils Funktion je Blatt) als Abfolge zum laufen. "Run.application" geht hier irgendwie nicht da es sich um Funktionen handelt.
Option Explicit
Dim FSO, FO, FU, f
Dim lRow As Long
Dim icol As Integer
Public Sub Ordner_inMF()
Set FSO = CreateObject("Scripting.FileSystemObject")
icol = 1
lRow = 0
GetSubFolders "G:\Ralf\++++ in MF"
End Sub
Function GetSubFolders(Pfad)
Set FO = FSO.GetFolder(Pfad)
Set FU = FO.SubFolders
On Error Resume Next
For Each f In FU
lRow = lRow + 1
Cells(lRow, icol) = f.Name
Next
icol = icol - 1
End Function
Ich sage schonmal jetzt Danke für jeden Tipp.
LG Ralf

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA 2 einfache "?" Fragen
23.04.2015 12:36:04
fcs
Hallo Ralf,
ganz so einfach ist es nicht.
Problem 1:
Hier ist es sinnvoller, als Parameter die beiden Zellen zu übergeben mit Pfad und Dateiname, um daraus den kompletten Dateinamen zu generieren.
Public Function Pfad_Datei(ZellePfad As Variant, ZelleDatei As Variant) As String
Dim Pfad As String
Dim Datei As String
'Hole aus Zelle den Pfad
Pfad = ZellePfad
'Hole aus Zelle den Dateinamen
Datei = ZelleDatei
'Überprüfe, ob Pfad am Ende einen "\" hat; falls nicht füge ihn an
If Right(Pfad, 1)  "\" Then Pfad = Pfad & "\"
'Gib beides Pfad+Dateiname als Rückgabewert aus der Funktion zurück
Pfad_Datei = Pfad & Datei
End Function

Formel-Beispiel: =Pfad_Datei($B$1;B2)
Makro-Beispiel:
  With Worksheets("Tabelle1")
strPfad=Pfad_Datei(ZellePfad:=.Range("B1"), ZelleDatei:=.Range("B2"))
End With
Problem 2:
Hier musst du eine oder auch mehrere (für jede Schaltfläche eins) übergeordnete Makros anlegen, die als Parameter den/die Pfade übergeben, deren Unterverzeichnisse gelistet werden sollen.
Option Explicit
Dim FSO, FO, FU, f
Dim lRow As Long
Dim icol As Integer
Sub Ordner_Listen1() 'Makro für Schaltfläche
Dim Zelle As Range
With Worksheets("Tabelle1")
.Activate
lRow = 7   'Startzeile für Ordnernamen
For Each Zelle In .Range("C2:C6").Cells 'Zellbereich mit Ordnername(n)
If Zelle  "" Then
Call Ordner_inMF(strFolder:=Zelle.Text, bolSubFolders:=True)
End If
Next
End With
End Sub
Public Sub Ordner_inMF(strFolder As String, ByVal bolSubFolders As Boolean)
'Unterverzeichnisse im Ordner Listen
Set FSO = CreateObject("Scripting.FileSystemObject")
icol = 0
GetSubFolders strFolder, bolSubFolders:=bolSubFolders
Set FSO = Nothing
End Sub
Function GetSubFolders(Pfad, Optional ByVal bolSubFolders As Boolean)
'Unterverzeichnisse + optional Unter-Unter-Verzeichnisse im Ordner Listen -
Set FO = FSO.GetFolder(Pfad)
Set FU = FO.SubFolders
icol = icol + 1 'Spalte für nächste Stufe Unterverzeichnis erhöhen
On Error Resume Next
For Each f In FU
lRow = lRow + 1
Cells(lRow, icol) = f.Name
If bolSubFolders = True Then GetSubFolders (f)
Next
icol = icol - 1 'Spalte für vorherige Stufe Unterverzeichnis erniedrigen
End Function
Gruß
Franz

Anzeige
AW: VBA 2 einfache "?" Fragen
23.04.2015 23:18:47
Ralf
Hi Franz, um den Doppelpost zu vermeiden hier der Hinweis auf meine weitere Frage ... falsch eingegebn...

AW: VBA 2 einfache "?" Fragen
23.04.2015 23:16:58
Ralf
Hallo Franz,
ich sage schonmal Danke.
So richtig schlau werde ich noch nicht...
zu 1. mit den Pfaden
Ich habe nun folgende Pfade in den Zellen in der Tabelle "Parameter"
B1 = Pfad "G:\Ralf" (Hauptpfad)
B2 = "angenommen" (Unterordner1)
B3 = "abgelehnt" (Unterordner2)
B4 = "in Schwebe" (Unterordner3)
Für jeden der 4 Ordner habe ich ein Tabellenblatt angelegt, in das die enthaltenen Ordner hereinkopiert werden sollen. Dazu habe ich den umständlichen Weg gewählt, pro Tabellenblatt den obigen Code mit GetSubFolders "G:\Ralf\++++ in MF (jeweils mit dem eigenen Pfad) anzulegen.
Das geht auch gut. Allerdings möchte ich halt den Pfad durch die Eingaben in den Zellen B1 bis B4 nachträglich abändern können. Hier fehlt mir nun ein wenig das Verständnis....
Kannst Du mir evtl. einen pragmatischen Tipp geben wie ich es schaffe, die Pfade im Makro "variabel" zu gestalten?

Anzeige
AW: VBA 2 einfache "?" Fragen
24.04.2015 10:30:28
fcs
Hallo Ralf,
wenn du es variabel haben möchtest, dann musst du statt der festen Texte im Code entsprechende Verweise auf die Zellen im Blatt "Parameter" einbauen.
Nachfolgend hab ich mal das Makro OrdnerListen so angepasst, dass es alle Unterordner in einer Schleife abarbeitet. Die anderen Makros sind unverändert. Dabei ist die Anzahl der Unterordner beliebig. Es müssen nur entsprechend viele Tabellenblätter für die Ordnerlisten vorhanden sein.
Gruß
Franz
Option Explicit
Dim FSO, FO, FU, f
Dim lRow As Long
Dim icol As Integer
Sub Ordner_Listen() 'Makro für Schaltfläche
Dim Zelle As Range, wksParam As Worksheet, wksOrdner As Worksheet
Dim ZeileUO As Long, Zeile_L As Long, intBlatt As Integer
On Error GoTo Fehler
Set wksParam = Worksheets("Parameter") 'Tabellenblatt mit Hauptordner in B1, und _
Unterordnern in B2 bis Bx                - #### Blattname ggf. anpassen ####
'Prüfen, ob Unterordner eingegeben sind
If wksParam.Range("B2").End(xlDown).Row = wksParam.Rows.Count Then
MsgBox "Es sind keine Unterordner eingegeben!"
Exit Sub
End If
intBlatt = 2 'Indexnummer des 1. Tabellenblatts in das eine Ordnernummer _
eingetragen werden soll   - #### ggf. anpassen ####
Application.ScreenUpdating = False
For ZeileUO = 2 To wksParam.Range("B1").End(xlDown).Row 'in Zeile 2 bis zur letzten _
in Spalte B stehen Namen der Unterordner
Set Zelle = wksParam.Cells(ZeileUO, 2) 'Zelle mit Unterordner
If Zelle  "" Then
'Tabellenblatt für die Ordnerliste festlegen
Set wksOrdner = Worksheets(intBlatt)
With wksOrdner
.Activate
lRow = 3   'Startzeile für Ordnernamen   - #### ggf. anpassen ####
'Altdaten löschen
Zeile_L = .UsedRange.Row + .UsedRange.Rows.Count - 1 'letzte Zeile mit Daten
If Zeile_L >= lRow Then
.Range(.Rows(lRow), .Rows(Zeile_L)).ClearContents
End If
'Ordnerliste erstellen
Call Ordner_inMF(strFolder:=Pfad_Datei(wksParam.Range("B1").Text, Zelle.Text), _
bolSubFolders:=True)
End With
intBlatt = intBlatt + 1 'Indexnummer für Blatt für nächste Ordnerliste erhöhen
End If
Next
MsgBox "Ordnerlisten erstellt!"
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 9
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Es sind mehr Unterordner in der Liste vorhanden als " _
& "Tabellenblätter für die Ordnerlisten"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
wksParam.Activate
Application.ScreenUpdating = True
End Sub
Public Sub Ordner_inMF(strFolder As String, ByVal bolSubFolders As Boolean)
'Unterverzeichnisse im Ordner Listen
Set FSO = CreateObject("Scripting.FileSystemObject")
icol = 0
GetSubFolders strFolder, bolSubFolders:=bolSubFolders
Set FSO = Nothing
End Sub
Function GetSubFolders(Pfad, Optional ByVal bolSubFolders As Boolean)
'Unterverzeichnisse + optional Unter-Unter-Verzeichnisse im Ordner Listen -
Set FO = FSO.GetFolder(Pfad)
Set FU = FO.SubFolders
icol = icol + 1 'Spalte für nächste Stufe Unterverzeichnis erhöhen
On Error Resume Next
For Each f In FU
lRow = lRow + 1
Cells(lRow, icol) = f.Name
If bolSubFolders = True Then GetSubFolders (f)
Next
icol = icol - 1 'Spalte für vorherige Stufe Unterverzeichnis erniedrigen
End Function
Public Function Pfad_Datei(ZellePfad As Variant, ZelleDatei As Variant) As String
Dim Pfad As String
Dim Datei As String
'Hole aus Zelle den Pfad
Pfad = ZellePfad
'Hole aus Zelle den Dateinamen
Datei = ZelleDatei
'Überprüfe, ob Pfad am Ende einen "\" hat; falls nicht füge ihn an
If Right(Pfad, 1)  "\" Then Pfad = Pfad & "\"
'Gib beides Pfad+Dateiname als Rückgabewert aus der Funktion zurück
Pfad_Datei = Pfad & Datei
End Function

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige