Tobias Harnegg
2009-02-07 00:48:32 UTC
Muss vorrausschicken, das ich VBA-Anfänger bin, daher die doofen
Fragen:
Ich hab hier ein Script, das mir Ordnernamen ausliest:
Das funktioniert auch gut, aber ich wollte ein paar Änderungen
vornehmen, die mir nicht gelungen sind:
1.) Ich möchte, das der Pfad direkt im Script ausgewählt wird
(also keine Auswahlmöglichkeit) Pfad soll der sein, in dem das
Dokument liegt.
setobjFolder=Thisworkbook.Path klappt leider nicht.
2.) Wenn ich c:\docs als ordner angegeben habe,bekomme ich die
Unterordner-Namen folgendermassen geliefert:
A1: c:\docs\01\Ordner X
A2: c:\docs\01\Ordner Y
A3 c:\docs\02\Ordner Z
Stattdessen häte ich lieber nur die ordner selbst, ohne kompletten
pfad:
A1: 01\Ordner X
A2: 01\Ordner Y
A3: 02\Ordner Z
Am allerliebsten - vermutlich aber auch am kompliziertesten, wäre es
mir so
A1: Ordner X, OrdnerY
A2 Ordner Z
3.) Statt bei A1, hätte ich das ganze lieber in Spalte B, beginnend
bei B9
Hintergrund:
Ich bastle an einem Mini-Redaktionssystem für ein kleines Magazin.
Änderungen können mit Datumsstempel für jede Seite eingegeben werden,
so sieht der Layouter immer was aktuell ist. Die Exel-Datei liegt im
Hauptverzeichnis einer Ordnerstruktur, in der für jede Seite ein
Ordner angelegt wurde (also Ordner \01,\02,\03,...) In jedem Dieser
Ordner befindet sich ein (oder mehrere) weitere Ordner mit dem Namen
des Artikels. Und genau Diese Namen möchte ich gerne aufgelistet
haben. Wenn jemand die xlsm Datei haben möchte, ich schicke sie gerne
zu!
Hier nun aber das Skript, von dem ich sprach:
(Die Frage ist nun natürlich, wie ich es abändern muss, damit meine 3
"Wünsche" erfüllt werden)
***********************************************************************************
Option Explicit
Dim z
Public Sub Aufruf()
Dim objShell As Object
Dim objFolder As Object
Dim objItem As Object
Set objShell = CreateObject("Shell.Application")
With objShell
Set objFolder = .BrowseForFolder(0&, "Was soll ich machen?", 0,
ThisWorkbook.Path)
End With
If Not objFolder Is Nothing Then
Set objItem = objFolder.Self
Else: Exit Sub
End If
z = 1
Schreiben objItem.Path, True 'true wenn die Unterordner auch wieder
geschrieben werden sollen
'Sonst false oder weglassen
End Sub
Public Sub Schreiben(V, Optional sbfolds As Boolean = False)
Dim fso As Object
Dim datei
Dim Unterordner
Set fso = CreateObject("Scripting.FileSystemObject")
Set datei = fso.getfolder(V)
Select Case sbfolds
Case True
For Each Unterordner In datei.subfolders
Cells(z, 1) = Unterordner.Path
z = z + 1
Schreiben Unterordner, True
Next
Case False
For Each Unterordner In datei.subfolders
Cells(z, 1) = Unterordner.Path
z = z + 1
Next
End Select
Set fso = Nothing
Set datei = Nothing
End Sub
************************************************************************************
Vielen Dank für Hilfe,
Tobias
Fragen:
Ich hab hier ein Script, das mir Ordnernamen ausliest:
Das funktioniert auch gut, aber ich wollte ein paar Änderungen
vornehmen, die mir nicht gelungen sind:
1.) Ich möchte, das der Pfad direkt im Script ausgewählt wird
(also keine Auswahlmöglichkeit) Pfad soll der sein, in dem das
Dokument liegt.
setobjFolder=Thisworkbook.Path klappt leider nicht.
2.) Wenn ich c:\docs als ordner angegeben habe,bekomme ich die
Unterordner-Namen folgendermassen geliefert:
A1: c:\docs\01\Ordner X
A2: c:\docs\01\Ordner Y
A3 c:\docs\02\Ordner Z
Stattdessen häte ich lieber nur die ordner selbst, ohne kompletten
pfad:
A1: 01\Ordner X
A2: 01\Ordner Y
A3: 02\Ordner Z
Am allerliebsten - vermutlich aber auch am kompliziertesten, wäre es
mir so
A1: Ordner X, OrdnerY
A2 Ordner Z
3.) Statt bei A1, hätte ich das ganze lieber in Spalte B, beginnend
bei B9
Hintergrund:
Ich bastle an einem Mini-Redaktionssystem für ein kleines Magazin.
Änderungen können mit Datumsstempel für jede Seite eingegeben werden,
so sieht der Layouter immer was aktuell ist. Die Exel-Datei liegt im
Hauptverzeichnis einer Ordnerstruktur, in der für jede Seite ein
Ordner angelegt wurde (also Ordner \01,\02,\03,...) In jedem Dieser
Ordner befindet sich ein (oder mehrere) weitere Ordner mit dem Namen
des Artikels. Und genau Diese Namen möchte ich gerne aufgelistet
haben. Wenn jemand die xlsm Datei haben möchte, ich schicke sie gerne
zu!
Hier nun aber das Skript, von dem ich sprach:
(Die Frage ist nun natürlich, wie ich es abändern muss, damit meine 3
"Wünsche" erfüllt werden)
***********************************************************************************
Option Explicit
Dim z
Public Sub Aufruf()
Dim objShell As Object
Dim objFolder As Object
Dim objItem As Object
Set objShell = CreateObject("Shell.Application")
With objShell
Set objFolder = .BrowseForFolder(0&, "Was soll ich machen?", 0,
ThisWorkbook.Path)
End With
If Not objFolder Is Nothing Then
Set objItem = objFolder.Self
Else: Exit Sub
End If
z = 1
Schreiben objItem.Path, True 'true wenn die Unterordner auch wieder
geschrieben werden sollen
'Sonst false oder weglassen
End Sub
Public Sub Schreiben(V, Optional sbfolds As Boolean = False)
Dim fso As Object
Dim datei
Dim Unterordner
Set fso = CreateObject("Scripting.FileSystemObject")
Set datei = fso.getfolder(V)
Select Case sbfolds
Case True
For Each Unterordner In datei.subfolders
Cells(z, 1) = Unterordner.Path
z = z + 1
Schreiben Unterordner, True
Next
Case False
For Each Unterordner In datei.subfolders
Cells(z, 1) = Unterordner.Path
z = z + 1
Next
End Select
Set fso = Nothing
Set datei = Nothing
End Sub
************************************************************************************
Vielen Dank für Hilfe,
Tobias