Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
280to284
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
280to284
280to284
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ordner auswählen und alle xls-Datein öffnen

Ordner auswählen und alle xls-Datein öffnen
11.07.2003 23:32:38
Christoph
Hallo Forum!
Ich möchte über einen CommandButton1 ein Verzeichnis auswählen. Über einen zweiten CommandButton sollen alle xls-Dateien des ausgewählten Ordners geöffnet werden.
(Diese sollen nicht nur geöffnet, sondern auch bearbeitet werden - das ist aber hier nicht relevant)
Mit Hilfe eures genialen Archivs habe ich auch denn Code zur Ordnerauswahl gefunden. Ebenso kann ich alle Dateien in einem fest vorgegebenen Pfad öffnen.
Mein Problem ist, wie kann ich den über CommandButton1 ausgewählten Pfad als Variable in das Sub von CommandButton2 übergeben?
Code zur Ordnerauswahl:
Public Type BrowseInfo
hOwner As Long
pIDLRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long

Dim arrFiles As Variant

End Type
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BrowseInfo) As Long
Sub DirAuswahl()
Dim sMsg As String, sPath As String
sMsg = "Wählen Sie bitte einen Ordner aus:"
sPath = getdirectory(sMsg)
If sPath <> "" Then MsgBox sPath

End Sub

Function getdirectory(Optional msg) As String
Dim bInfo As BrowseInfo
Dim Path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pIDLRoot = 0&
If IsMissing(msg) Then
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
Else
bInfo.lpszTitle = msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
getdirectory = Left(Path, pos - 1)
Else
getdirectory = ""
End If
End Function

Code zum Öffnen der Dateien:
Sub Dateien_oeffnen()
Application.ScreenUpdating = False
Dim j As Integer
Dim arrFiles As Variant
Dim intCounter As Integer
Dim strPath As String
strPath = "D:\Test"

arrFiles = FileArray(strPath, "*.xls")

Application.ScreenUpdating = False
Application.DisplayAlerts = False

For intCounter = 1 To UBound(arrFiles)
Workbooks.Open strPath & arrFiles(intCounter)

' hier weitere Bearbeitungsschritte für jede Datei

'aktuelles Fenster schließen
Windows(arrFiles(intCounter)).Close

Next intCounter

Application.DisplayAlerts = True
Application.ScreenUpdating = True


End Sub


Private Function FileArray(strPath As String, strPattern As String)
Dim arrDateien()
Dim intCounter As Integer
Dim strDatei As String
If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
strDatei = Dir(strPath & strPattern)
Do While strDatei <> ""
intCounter = intCounter + 1
ReDim Preserve arrDateien(1 To intCounter)
arrDateien(intCounter) = strDatei
strDatei = Dir()
Loop
FileArray = arrDateien
End Function

schon vorab vielen Dank
Gruß Christoph

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

Betreff
Datum
Anwender
Anzeige
AW: Ordner auswählen und alle xls-Datein öffnen
11.07.2003 23:41:05
RAnton
Hallo, und dafür gibst du den ganzen Code ins Forum???
Antwort: du kannst dem Command_Button keine Parameter mitgeben.
Lege doch den Pfad in eine Variable ab und hole ihn dir dort ab.
Gruß
RAnton

AW: Ordner auswählen und alle xls-Datein öffnen
11.07.2003 23:48:59
Christoph
Hi RAnton,
sorry, ich wollte dich nicht mit meinem Code "zumüllen".
Aber genau da: "Pfad in Variable ablegen und wieder abholen" klemmt es bei mir. Ich hab das schon probiert mit beiden Codes in getrennten Modulen und auch im gleichen Modul, aber ich krieg das nicht hin.
Gruß
Christoph

AW: Ordner auswählen und alle xls-Datein öffnen
11.07.2003 23:52:19
RAnton
und was klemmt?
Gruß
RAnton

AW: Ordner auswählen und alle xls-Datein öffnen
12.07.2003 00:02:23
Christoph
Hi,
wenn ich keine MsgBox als Ergebnis von "Ordnerauswahl" haben will, sondern eine Variable, die wieder eingelesen werden kann:
also statt:
If sPath <> "" Then MsgBox sPath
sowas wie:
If sPath <> "" Then k...
dann komm ich damit nicht weiter. Fehlermeldung wie: "Anweisung innerhalb eines Typeblocks ungültig" o.ä.
Ich komm nicht drauf, wie ich die Variable deklarieren muss und wie die Anweisung innerhalb der If-Abfrage lauten muss.
kannst du mir helfen?
Gruß Christoph

Anzeige
AW: Ordner auswählen und alle xls-Datein öffnen
12.07.2003 00:14:58
RAnton
HAllo
ich nehme an, wenn du diese deklaration oberhalb der prozedur machst, dann kannst du die variable benutzen
dim sPath As String
Gruß
RAnton

AW: Ordner auswählen und alle xls-Dateien öffnen
12.07.2003 00:21:44
Christoph
Hallo RAnton
ich werd wohl noch ein bischen damit rumprobieren.
Danke soweit
Gruß Christoph

AW: Ordner auswählen und alle xls-Dateien öffnen
12.07.2003 00:39:50
OliveR
Hallo Christoph,
hier der Code. Habe zusätzliche Kommentare eingefügt.
Gruß
OliveR
_________________________________________________________________________________
Public Type BrowseInfo
hOwner As Long
pIDLRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
arrFiles As Variant
End Type
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BrowseInfo) As Long
Sub DirAuswahl()
Dim sMsg As String, sPath As String
sMsg = "Wählen Sie bitte einen Ordner aus:"
sPath = getdirectory(sMsg)
If sPath <> "" Then
Dateien_oeffnen (sPath) 'Änderung - Übergabe Directory and Dateien_oeffnen
End If
End Sub

Function getdirectory(Optional msg) As String
Dim bInfo As BrowseInfo
Dim Path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pIDLRoot = 0&
If IsMissing(msg) Then
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
Else
bInfo.lpszTitle = msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
getdirectory = Left(Path, pos - 1)
Else
getdirectory = ""
End If
End Function

'Code zum Öffnen der Dateien:
Sub Dateien_oeffnen(strPath As String) 'Änderung
Application.ScreenUpdating = False
Dim j As Integer 'keine Ahnung wofür der soll
Dim arrFiles As Variant
Dim intCounter As Integer
arrFiles = FileArray(strPath, "*.xls")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For intCounter = 1 To UBound(arrFiles)
Workbooks.Open strPath & arrFiles(intCounter)
' hier weitere Bearbeitungsschritte für jede Datei
'aktuelles Fenster schließen
'Windows(arrFiles(intCounter)).Close 'Bitte Kommentierung rausnehmen, falls die Fenster direkt wieder geschlossen werden sollen nach der Bearbeitung
Next intCounter
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


Private Function FileArray(strPath As String, strPattern As String)
Dim arrDateien()
Dim intCounter As Integer
Dim strDatei As String
If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
strDatei = Dir(strPath & strPattern)
Do While strDatei <> ""
intCounter = intCounter + 1
ReDim Preserve arrDateien(1 To intCounter)
arrDateien(intCounter) = strDatei
strDatei = Dir()
Loop
FileArray = arrDateien
End Function


Anzeige
AW: Ordner auswählen und alle xls-Dateien öffnen
12.07.2003 00:57:24
Christoph
Hi Oliver,
das hilft mir schon ein ganzes Stück weiter. Danke!
allerdings: ich würde gerne eine Variable übergeben und nicht direkt das Makro Dateien_oeffnen ausführen:
If sPath <> "" Then
Dateien_oeffnen (sPath)
In dem gewählten Ordner sind ca. 1000 Dateien die geöffnet, bearbeitet und wieder geschlossen werden sollen. (Wobei ich den Pfad der Dateien noch nicht kenne - daher der Button: Ordner auswählen)
Mein Anliegen war daher, hier zwei Buttons zu haben, so dass ich mit der Ordnerauswahl nicht gleichzeitig einen Prozess über 15 Minuten starte.
Das soll deine Hilfe jedoch in keinster Weise schmälern. Denn auf diese einfache Lösung "If-Then-Makro_ausführen" wäre ich so schnell nicht gekommen - Das Problem mit dem Wald und den Bäumen - Sie wissen schon.
vielen Dank
Christoph

Anzeige
AW: Ordner auswählen und alle xls-Dateien öffnen
12.07.2003 01:31:19
OliveR
Hola Christoph,
nadann so...
oberhalb der ersten Subroutine
Dim sPath as String
einfügen und aus der Sub Dir_auswahl() löschen.
Dann in der Dir_auswahl die IF Schleife ändern:
If sPath = "" Then
Msgbox("Keine Directory gewählt! Bitte Macro neu starten!")
Exit Sub
End If
Dann in der Sub Dateien_oeffnen() eine Zuweisung schreiben
Dim strPath as String
strPath = sPath
So sollte es gehen. Oder alle strPath in sPath ändern.
Gruß
OliveR

vielen Danke - genau das wars
12.07.2003 18:34:20
Christoph
Hi Oliver,
du hast mir sehr geholfen. Irgendwie hatte ich mich so verhaspelt, dass es für mich keinen Durchblick mehr gab.
Merci
Gruß
Christoph

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige