Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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

Order suchen in einem Verzeicnisbaum

Order suchen in einem Verzeicnisbaum
04.04.2017 12:42:35
Marc
Hallo zusammen,
hat jetzt zwar nicht direkt was mit Excel zu tun, ich bin aber erst mal ratlos.
Folgende Sachlage: Ein (ur)altes DBF-Programm (ja, sowas läuft noch), erstellt eine Reihe von Worddateien, die es in einem temporären Ordner gespeichert werden.
Die zwei ersten Wörter der Dateien sind der Nach- und Vorname der Person.
Diese Dateien müssen dann einzeln (!) verschoben werden.
Das Zielverzeichnis befindet sich in einem sehr Komplexen Verzeichnisbaum.
Das braucht enorm viel Zeit.
Ich möchte also ein VBA Programm erstellen (in Word bevorzugt, Excel geht aber auch), der diese Dateien automatisch verschiebt.
Das Problem ist also den Pfad zum richtigen Verzeichnis zu finden.
Vielen Dank für Eure Hilfe.
Gruß aus Belgien,
Marc

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Detail-Infos fehlen
04.04.2017 14:16:12
Fennek
Hallo,
bei diesen "Basic"-Befehlen gibt es keinen Unterschied zwischen xl und pp.
Sofernder Zielpfad per code zu bestimmen ist, sollte es gehen.
Bitte informiere auch, ob die Pfadangaben Leerzeichen oder dt Umlaute haben.
mfg
AW: Detail-Infos fehlen
04.04.2017 14:46:17
Marc
Hallo Fennek,
Die Ordner können außer Buchstaben und Zahlen auch Leerzeichen, Binde- und Unterstriche sowie deutsche und französische Umlaute beinhalten.
AW: Archiv-Code
04.04.2017 19:22:23
Fennek
Hallo,
dieser Code soll die Umlaute ermöglichen:

Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As  _
String) As Long
Public Function F_ASC_ANS(ByVal Text As String) As String
OemToCharA Text, Text
F_ASC_ANS = Text
End Function
Dieser Code liest alle xls-Dateien in allen Unterordner:

Sub M_snb()
Application.ScreenUpdating = False
sn = Split(F_ASC_ANS(CreateObject("wscript.shell").exec("cmd /c Dir ""V:\xxx\xx\x\*blabla*. _
xls"" /b/s").stdout.readall), vbCrLf)
With ThisWorkbook.Worksheets(1)
.UsedRange.ClearContents
For j = 0 To UBound(sn) - 1
.Cells(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 1) = sn(j)
Set wkb = Workbooks.Open(sn(j))
wkb.Worksheets(1).Range("B4:L" & wkb.Worksheets(1).Cells(Rows.Count, 2).End(xlUp). _
Row).Copy .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 2)
wkb.Close False
Set wkb = Nothing
Next
End With
Application.ScreenUpdating = True
MsgBox "Anzahl der Dateien: " & UBound(sn)
End Sub
Die genaue Syntax der Schalter wird in "cmd.exe" mit "dir /?" erklärt.
Schaun wir mal, ob du damit zurecht kommst.
mfg
Anzeige
AW: Archiv-Code
05.04.2017 00:47:46
Marc
Hallo,
ja der Code ist OK. Gibt mir zwar die Liste aller Dateien, ich brauche aber nur die Ordner.
Da müsste man dann aussortieren.
Allerdings wird das wegen den Umlauten nicht funktionieren.
Ein Vergleich geht zwar noch wenn ich beim Dateinamen, durch den den ich den Pfad suche auch die Umlaute ersetze, aber später dann, wenn ich die Datei verschieben muss entsteht dann das Problem, dass er den Pfad wegen abgeänderter Umlaute nicht mehr findet.
AW: Order suchen in einem Verzeicnisbaum
05.04.2017 15:03:05
Planlos
Hallo
ein Ansatz könnte sein, API-Funktionen in der W-Variante zu verwenden:
Dieser Ansatz beinhaltet jetzt nicht die Logik welche der gefundenen Dateien in welchen Ordner gehören.
Declare Function MoveFileExW Lib "KERNEL32.DLL" _
( _
ByVal lpExistingFileName As Long, _
ByVal lpNewFileName As Long, _
ByVal dwFlags As Long _
) As Long
Sub dirordner()
Dim sDeinRootFolder As String
sDeinRootFolder = >>
'auslesen der Ordner und in Spalte A schubsen
Call CreateObject("wscript.shell").Run("cmd.exe /c dir /S /B /A:D " & _
sDeinRootFolder & "|clip", 0, True)
Tabelle1.Range("A1").PasteSpecial
'auslesen der Dateien, in Spalte B packen
Call CreateObject("wscript.shell").Run("cmd.exe /c dir /b " & _
sDeinRootFolder & "\*.txt" & "|clip", 0, True)
Tabelle1.Range("B1").PasteSpecial
'mal eine der Dateien in einen der Ordner verschieben
MoveFileExW StrPtr(sDeinRootFolder & "\" & Tabelle1.Range("B2")), StrPtr(Tabelle1.Range("A1" _
) & "\" & Tabelle1.Range("B2")), 0
End Sub

Anzeige
AW: Order suchen in einem Verzeicnisbaum
06.04.2017 15:28:15
Marc
Hallo,
bei mir läuft die Routine nicht. Es wird nichts ausgegeben.
Zusätzlich eine Frage zum MoveFile: Was ist StrPtr?
Das wird bei mir als Syntax-Fehler angezeigt.
PS: Ich habe eine Lösung für das Problem gefunden.
Erklärung in anderer Antwort.
Herzlichen Dank an alle.
AW: Order suchen in einem Verzeicnisbaum
06.04.2017 15:48:08
Marc
Ich habe eine Lösung gefunden.
Diese benutzt das Scripting.FileSystemObject.
Ich darf hier den Code nicht ganz veröffentlichen, so steht es in den Anmerkungen das Autors.
Autor ist Marc Wershoven und der direkte Link zum vollständigen Code ist https://www.online-vba.de/vba_readfolder.php
Zusätzlich soviel:
Da ich ja nur den Verzeichnisbaum einlesen muss, in dem "irgendwo" das Zielverzeichnis meiner zu verschiebenden Dateien liegt, habe ich die Routine teilweise abgeändert.
Ich erhalte jetzt, vorläufig als Excel-Tabelle, später in einem Array den vollständigen Verzeichnisbaum, einschließlich der Ordner in denen keine Dateien gespeichert sind, was ja durchaus möglich ist. Letzteres war bisher auch noch nicht gegeben.
Hier mein abgeänderter Abschnitt:

With oSheet
For Each oSubFolder In oFolder.subfolders
'Alle Ordner auflisten
If Not .Cells(lRowCounter - 1, 1) = oSubFolder.Path & "\" Then
.Cells(lRowCounter, 1) = oSubFolder.Path & "\"
lRowCounter = lRowCounter + 1
End If
'Alle Unterverzeichnisse verarbeiten (rekursiv)
Call MWReadSubFolder(oSubFolder.Path)
Next oSubFolder
End With
Damit kann ich problemlos arbeiten. Auch die Umlaute bleiben hiermit erhalten.
Nochmals vielen herzlichen Dank für die vielen guten Ansätze und Ideen. Danke für Eure Mühen und Bemühungen ein zufriedenstellendes Resultat zu erhalten.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige