Ordner mit Unterordner verschieben



Excel-Version: 8.0 (Office 97)
nach unten

Betrifft: Ordner mit Unterordner verschieben
von: Tanja
Geschrieben am: 17.07.2002 - 07:06:03

Gibt es eine Möglichkeit mit VBA einen Ordner samt Unterordner und enthaltenen Dateien zu verschieben?

Gruß
Tanja


nach oben   nach unten

Re: Ordner mit Unterordner verschieben
von: sam
Geschrieben am: 17.07.2002 - 07:43:05

Hi,

hier werden üblicherweise API-Calls von Windows verwendet. Diese sehen etwas wild und unübersichtlich für Anfänger aus. Keine Scheu, einfach in ein Modul kopieren und die Funktion verwenden. Den Hintergrund braucht man eigentlich nicht wissen.

Hinweis: Wie habe ich diesen Code gefunden (ist nicht von mir!) - Google.de Suchbegriff "Ordner verschieben VB". so findet man fast alles für VB!

Der folgende Code wird von vb@rchiv zur Verfügung gestellt:
http://www.visualbasic-archiv.de/archiv/tipp_details.php3?pid=207


Option Explicit
' KONSTANTEN DER FUNC

' Kopiert das File in pFROM nach pTo
Private Const FN_COPY = &H2&

' Löscht das File in pFrom (pTo wird ignoriert)
Private Const FN_DELETE = &H3&

' Verschiebt das File in pFROM nach pTo
Private Const FN_MOVE = &H1&

' Umbenennen des Files in pTo
Private Const FN_RENAME = &H4&
    
    
' KONSTANTEN DER FLAGS

' Undo Information -> Schiebt beim Löschen
' das (die) File(s) in den Papierkorb
Private Const FNF_ALLOWUNDO = &H40&

' Bislang keine bekannte Funktion
Private Const FNF_CONFIRMMOUSE = &H2&

' Handle zum Eltern-Fenster der
' Progress-Dialogbox (also Me.hwnd)
Private Const FnF_CREATEPROGRESSDLG = &H0&

' Nur Files - KEINE ORDNER - wenn *.* als Source
Private Const FnF_FILESONLY = &H80&

' Für diverse Stellen bei DEST (der "pTo" muss dann
' die gleiche Anzahl von Zielen aufweisen wie "pFrom"
Private Const FnF_MULTIDESTFILES = &H1&

' ANTWORTET AUTOMATISCH MIT 'JA für alle'
Private Const FnF_NOCONFIRMATION = &H10&

' Keine Abfrage für einen neuen Ordner, falls benötigt
Private Const FnF_NOCONFIRMMKDIR = &H200&

' Bei Namenskollisionen im ZIEL wird ein neuer Name
' erzeugt (z.B. Kopie(2) von xy.tmp)
Private Const FnF_RENAMEONCOLLISION = &H8&

' Zeigt keine Fortschritts-Dialogbox (fliegende Blätter)
Private Const FnF_SILENT = &H4&

' Zeigt die Fortschritts-Dialogbox an, aber ohne Filenamen
Private Const FnF_SIMPLEPROGRESS = &H100&

' Wenn FnF_RENAMECOLLISION gewählt wird,
' hNameMappings wird gefüllt (Anzahl)
Private Const FnF_WANTMAPPINGHANDLE = &H20&

' Eine Funktion für vier Dateioperationen
Private Declare Function SHFileOperation Lib "shell32.dll" _
  Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) _
  As Long

Type SHFILEOPSTRUCT
  hWnd As Long
  wFunc As Long
  pFrom As String
  pTo As String
  fFlags As Integer
  fAnyOperationsAborted As Boolean
  hNameMappings As Long
  lpszProgressTitle As String
End Type
' Alle Angaben müssen mit vbNullChar+vbNullChar
' abgeschlossen werden. Hier wird's noch mal geprüft
Private Function Check_NullChars(S As String) As String
  If Right(S, 2) <> vbNullChar + vbNullChar Then
    If Right(S, 1) <> vbNullChar Then
      S = S + vbNullChar + vbNullChar
    Else
      S = S + vbNullChar
    End If
  End If
  Check_NullChars = S
End Function

Public Function fMove(Source As String, _
  Dest As String) As Long

  Dim FileStructur As SHFILEOPSTRUCT
    
  With FileStructur
    .wFunc = FN_MOVE
    .pFrom = Check_NullChars(Source)
    .pTo = Dest
    .fFlags = FnF_RENAMEONCOLLISION + FnF_SILENT
  End With

  fMove = SHFileOperation(FileStructur)
End Function


nach oben   nach unten

Re: Ordner mit Unterordner verschieben
von: Tanja
Geschrieben am: 17.07.2002 - 07:47:41

Vielen Dank, das sieht ja klasse aus. Aber wie verwende ich nun die Funktion?
Grüße von Tanja

nach oben   nach unten

Re: Ordner mit Unterordner verschieben
von: sam
Geschrieben am: 17.07.2002 - 07:55:44

Hi,

ganz einfach.
1) Neues Modul hinzufügen
2) Gesamten Code reinkopieren
3) du kannst nun in jedem anderen Modul deiner Mappe folgende Funktion aufrufen.

Annahme: du möchtest Ordner "Test" in den Ordner "Eigene Dateien" verschieben (inkl. Unterordner)
Aufruf: fMove "C:\Test", "C:\Eigene Dateien"

Sollte der Zielordner nicht existieren, so wird der Ordner in den Zielordner umbenannt.

Ich empfehle dir auf alle Fälle den Code vorher mit Testverzeichnissen inkl. Testinhalten auszuprobieren! Man weiß ja nie...

Liebe Grüße,
Sam

nach oben   nach unten

Re: Ordner mit Unterordner verschieben
von: Tanja
Geschrieben am: 17.07.2002 - 08:08:27

Habe ich gemacht, aber leider bekomme ich die Funktion nicht aufgerufen. Ich habe das Ganze mal mit einem Test auf Laufwerk A:\ und zwei Testordnern ausprobiert.
Nach der Eingabe fMove "C:\Test", "C:\Eigene Dateien" oder =fMove "C:\Test", "C:\Eigene Dateien"
in eine Zelle bekomme ich nur die Meldung, dass die Formel fehler enthält.
Mache ich irgendetwas verkehrt?
Gruß
Tanja
nach oben   nach unten

Re: Ordner mit Unterordner verschieben
von: sam
Geschrieben am: 17.07.2002 - 10:44:04

Hi,

upps...da haben wir uns missverstanden. Du darfst diese Funktion nicht in eine Zelle schreiben. Du kannst per Zelleintrag keine Ordner verschieben, das geht nur über ein Makro. Ich habe dir geschrieben, dass du ein neues Modul erstellen musst.

Also nur über Visual Basic. Sonst ist das Verschieben nicht möglich!
Sam


nach oben   nach unten

Re: Ordner mit Unterordner verschieben
von: Tanja
Geschrieben am: 17.07.2002 - 12:47:49

Hallo Sam,
perfekt, jetzt habe ich es verstanden. Es funktioniert prima.
Ganz herzlichen Dank für Deine Hilfe.
Viele Grüße
Tanja

 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Ordner mit Unterordner verschieben"