Herbers Excel-Forum - das Archiv

Ordner umbenennen

Bild

Betrifft: Ordner umbenennen
von: Carsten
Geschrieben am: 15.11.2003 15:26:54
Hallo,

ich habe folgendes vor:
Per Scanner will ich Dokumente archivieren. Beim scannen wird aber das Dokument nicht so abgelegt wie ich es gerne möchte (läßt sich auch definitiv nicht ändern). Der Scanner erzeugt immer einen Ordner mit einem von mir vorgegebenen Namen. In diesem Ordner liegt ein Unterordner und in diesem liegt erst mein gescanntes Dokument.
Beispiel:

123 (Ordnername von mir vergeben)
|
0000000x.00000000 (Ordnername wird automatisch angelegt)
|
1.pg (Dateiname des gescannten Dokuments)

hier nochmal der Pfad in anderer Schreibweise
c:\123\0000000x.00000000\1.pg

Jetzt meine eigentliche Frage: Kann ich per Vba irgendwie eine Struktur einlesen und immer den Ordnernamen aus einer best. Ebene (hier 123) der Datei 1.pg zuweisen. Diese Datei will ich dann abspeichern (c:\123.pg).

Ich hab schon versucht das Problem üder diverse Programme (Stapelverarbeitungen etc.) zu lösen, aber es funktioniert so nicht.

Ihr im Excel-Forum seid meine letzte Hoffnung...

Gruß

Carsten

Bild

Betrifft: AW: Ordner umbenennen
von: Nepumuk
Geschrieben am: 15.11.2003 15:52:16
Hallo Carsten,

nicht unbedingt ein Problem für VBA, wenn es damit natürlich auch geht. Hast du VB?

Wie hast du dir den Programmablauf vorgestellt? Beispiel: Programm öffnen, über ein Browserfenster den Ordner auswählen, fertig. Das Programm prüft, ob im Ordner ein pg-Datei vorhanden und wenn es genau eine pg-Datei ist, dann umbenennen, kopieren, Ordner löschen und Meldung ausgeben, dass der Job erledigt wurde, ansonsten Fehlermeldung.

Gruß
Nepumuk
Bild

Betrifft: AW: Ordner umbenennen
von: Carsten
Geschrieben am: 15.11.2003 16:40:43
Hallo Nepumuk,

ich habe kein VB, würde gerne über VBA das Problem lösen. Ich dachte mir folgendes: Programm öffnen, Hauptordner aussuchen (z.B. c:\Scanner). Das Programm prüft, ob es es im Ordner z. B. c:\Scanner Unterordner gibt. Wenn ja, dann 1. Unterordner z.B 1234 merken, in Unterordner 0000000x.00000000 gehen und dort die Datei 1.pg in 1234.pg umbenennen. Danach die umbenannte Datei in die Ebene c:\Scanner\ legen und den Ordner 1234 inkl. aller Unterordner löschen. Danach prüfen, ob weiterer Unterordner in c:\scanner\ vorhanden ist. Wenn ja, dann selbe Prozedur wie eben, ansonsten Meldung.
Ich hab leider 0 Ahnung, wie man sowas programmiert.

Gruß Carsten
Bild

Betrifft: AW: Ordner umbenennen
von: Nepumuk
Geschrieben am: 15.11.2003 21:18:40
Hallo Carsten,
versuch es mal damit:


Option Explicit
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As InfoT) As Long
Private Declare Function CoTaskMemFree Lib "ole32" (ByVal hMem As Long) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpStr1 As String, ByVal lpStr2 As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pList As Long, ByVal lpBuffer As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassname As String, ByVal lpWindowName As String) As Long
Private Type InfoT
hwnd As Long
Root As Long
DisplayName As Long
Title As Long
Flags As Long
FName As Long
lParam As Long
Image As Long
End Type
Private Function GetAOrdner() As String
Dim xl As InfoT, IDList As Long, RVal As Long, FolderName As String
With xl
.hwnd = FindWindow("xlmain", vbNullString)
.Title = lstrcat("Bitte wählen Sie ein Verzeichnis", "")
.Flags = 1
End With
IDList = SHBrowseForFolder(xl)
If IDList <> 0 Then
FolderName = Space(256)
RVal = SHGetPathFromIDList(IDList, FolderName)
CoTaskMemFree (IDList)
FolderName = Trim(FolderName)
FolderName = Left(FolderName, Len(FolderName) - 1)
End If
GetAOrdner = FolderName
End Function
Public Sub Dateien_suchen()
Dim strOrdner As String, myFileObjekt As Object, intCont As Integer
Dim myFSyObjekt As Object, myFoObjekt As Object, mySFoObjekt As Object, myFolderObjekt As Object
strOrdner = GetAOrdner
If strOrdner <> "" Then
Set myFSyObjekt = CreateObject("Scripting.FileSystemObject")
Set myFoObjekt = myFSyObjekt.GetFolder(strOrdner)
Set mySFoObjekt = myFoObjekt.SubFolders
For Each myFolderObjekt In mySFoObjekt
With Application.FileSearch
.LookIn = strOrdner & "\" & myFolderObjekt.Name
.Filename = "*.pg"
.SearchSubFolders = True
If .Execute = 1 Then
Set myFileObjekt = myFSyObjekt.GetFile(.FoundFiles(1))
myFileObjekt.Name = myFolderObjekt.Name & ".pg"
myFileObjekt.Move strOrdner & "\"
myFolderObjekt.Delete True
intCont = intCont + 1
End If
End With
Next
MsgBox "Fertig. " & CStr(intCont) & " Dateien umbenannt und verschoben.", 64, "Information"
End If
End Sub



Code eingefügt mit: Excel Code Jeanie

Gruß
Nepumuk
Bild

Betrifft: AW: Genial Nepumuk, Danke
von: Carsten
Geschrieben am: 15.11.2003 23:40:15
Hallo Nepumuk,

G E N I A L !!!

Deine VBA-Lösung ist super. Genau so hab ich mir das vorgestellt.
Hätte nie so schnell mit einer Lösung gerechnet.
Du bist ein echtes Ass. Vielen Dank für Deine Hilfe.

Gruß

Carsten
Bild
Excel-Beispiele zum Thema " Ordner umbenennen"
Excel-Dateien eines Ordners listen Ordner eines Verzeichnisses in ListBox übernehmen
Bei Doppelklick Ordner im Explorer öffnen Dateien einer Ordnerliste in einer Tabelle zusammenstellen
Ordnernamen eines Verzeichnisses in Zelle einfügen Dateisuche unter Einbeziehung der untergeordneten Ordner
Ordnerdialog mit nachfolgendem Dateidialog aufrufen Aus Dialog Verzeichnis auswählen, dann neuen Ordner erstellen
Die Eigenschaft "Stichwort" in allen Dateien eines Ordners ändern Vorhandensein von Verzeichnissen prüfen und Ordner anlegen