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

Mappe = Dir (...)

Mappe = Dir (...)
17.01.2007 09:03:37
Boris
Holla,
ich verwende folgenden Code, den ich kopiert habe und würde ihn gerne verstehen:)

Sub KopiereDatensätze()
Dim Mappe As String
Dim strPfad as String
strPfad = ThisWorkbook.Path
Mappe = Dir(strPfad & "*.xls")
Do While Mappe <> ""
Workbooks.Open strPfad & Mappe, UpdateLinks:=0
Workbooks(Mappe).Close savechanges:=False
Mappe = Dir
Loop
End Sub

1) Was genau steht in Mappe? Ein Array mit den einzelnen Dateinamen? Und was bewirkt Mappe = Dir?
2) Im angebeben Ordner strPfad befinden sich Dateien im Format #.xls (3.xls, 5.xls, 14.xls, 18.xls, 23.xls, 41.xls usw). Ich kopiere Datensätze aus diesen Dateien in ein Blatt untereinander. Nun werden die Dateien aber nicht in der obigen Reihenfolge geöffnet, sondern "binär", also: 14.xls, 18.xls, 23.xls, 3.xls, 41.xls, 5.xls, ...). Lässt sich das ändern?
u.A.w.g.
Boris

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mappe = Dir (...)
17.01.2007 09:13:32
EtoPHG
Hallo Boris,
1) Da würde Dir das Help von Dir weiterhelfen:
Die Dir-Funktion gibt den ersten Dateinamen zurück, der mit dem Argument Pfadname übereinstimmt. Weitere mit dem Argument Pfadname übereinstimmende Dateinamen erhalten Sie durch das erneute Aufrufen der Dir-Funktion ohne Angabe von Argumenten. Wenn keine weiteren übereinstimmenden Dateinamen gefunden werden, gibt die ... etc...
2) Auch das steht im Help:
Tip Die Dateinamen werden unsortiert zurückgegeben. Bei Bedarf können Sie die zurückgegebenen Dateinamen in einem Datenfeld speichern und das Datenfeld anschließend sortieren.
Gruss Hansueli
Anzeige
AW: Mappe = Dir (...)
17.01.2007 10:13:48
Boris
Hi Hansueli,
danke für den Tip in Help nachzuschauen:) Habe ich in der Tat etwas vernachlässigt (vielleicht liegt's an meiner englischen Version...)...
also Punkt 1) ist damit schnell geklärt...
Punkt 2) bereitet mir Probleme, da ich versuche, mir VBA-Kenntnisse durch Fragen hier im Forum und direkte Praxis-Anwendung anzueignen. Meine VBA-Kenntnisse sind noch sehr begrenzt. Wie sähe eine mögliche Lösung aus? Gedankengang:

Sub KopiereDatensätze()
Dim Mappe As String
Dim strPfad as String
Dim arrFiles as String
Dim i as Integer
strPfad = ThisWorkbook.Path
Mappe = Dir(strPfad & "*.xls")
Do While Mappe <> ""
i = i + 1
ReDim Preserve arrFiles (1 To i)
arrFiles(i) = Mappe
Mappe = Dir
Loop
''' jetzt habe ich mit arrFiles ein Array mit den einzelnen Dateien. Wie sortiere ich diese nun und wie sieht dann die folgende ursprüngliche Schleife aus?'''
Do While Mappe <> ""
Workbooks.Open strPfad & Mappe, UpdateLinks:=0
Workbooks(Mappe).Close savechanges:=False
Mappe = Dir
Loop
End Sub

Anzeige
AW: Mappe = Dir (...)
17.01.2007 11:33:44
EtoPHG
Hallo Boris,
Wenn ich dich richtig verstehe, möchtest Du die Filenamen nach ihrem numerischen Wert sortieren, also z.B.
1.xls, 2.xls, 10.xls, 11.xls, 21.xls
und nicht alphanumerisch
1.xls, 10.xls, 11.xls, 2.xls, 21.xls
D.h. du müsstes dann die Filenamen auseinander-nehmen und die Zahlen separieren. Ebenfalls müsstest Du sicherstellen, dass keine anderen Filename im Verzeichnis vorkommen.
Dann könnstest Du beim laden des Arrays den Sort schon machen. D.h. Vor dem Einfügen in den Array, testen ob der neue Begriff grösser oder kleiner als die eingefügten sind und dann an der richtigen Position einfügen.
Gruss Hansueli
Anzeige
AW: Mappe = Dir (...)
17.01.2007 14:01:53
Boris
yep, du hast mich richtig verstanden, ich bin jetzt so weit ein arrFiles as Integer zu kreieren, das die sortierten Zahlen enthält.

Sub KopiereDatensätze
Dim strPfad
Dim Mappe As String
Dim arrFiles() As Integer
Dim i As Integer
Dim j as Integer
Dim vtemp As Integer
strPfad = ThisWorkbook.Path
Mappe = Dir(strPfad & "*.xls")
Do While Mappe <> ""
i = i + 1
ReDim Preserve arrFiles(1 To i)
arrFiles(i) = Left(Mappe, InStr(Mappe, ".") - 1)
Mappe = Dir
Loop
For j = UBound(arrFiles) - 1 To LBound(arrFiles) Step -1
' Alle links davon liegenden Zeichen auf richtige Sortierung der jeweiligen Nachfolger überprüfen:
For i = LBound(arrFiles) To j
' Ist das aktuelle Element seinem Nachfolger gegenüber korrekt sortiert?
If arrFiles(i) > arrFiles(i + 1) Then
' Element und seinen Nachfolger vertauschen.
vtemp = arrFiles(i)
arrFiles(i) = arrFiles(i + 1)
arrFiles(i + 1) = vtemp
End If
Next i
Next j
End Sub

Jetzt brauche ich nur noch eine Schleife, die alle Werte dieses arrFiles durchläuft. So etwas wie: For each ''wert'' in arrFiles ... Oder löse ich das so: for i = 1 to Ubound(arrfiles) ... next i?
Anzeige
AW: Mappe = Dir (...)
17.01.2007 14:30:09
EtoPHG
Hallo Boris,
Klaro, genau gleich mit einer Schleife durch den Array und die Filenamen wieder richtig zusammensetzen.
Gruss Hansueli
AW: Mappe = Dir (...)
18.01.2007 09:56:49
Boris
Sehr schön, jetzt funktioniert alles. Der code ist zwar etwas unübersichtlich geworden, aber hauptsache ich verstehe ihn:)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige