Tipp 1.10 - Datei kopieren

Wie kann ich Dateien mit Flying Windows kopieren?

Mit dieser Funktion können Sie Dateien mit Flying Windows kopieren. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Api-AufrufeVerwendete Win32-Api-Aufrufe und Typen: GetDesktopWindow, SHFileOperation - SHFILEOPSTRUCT

Beispiel:

Option Explicit
 
Public Type SHFILEOPSTRUCT
  hwnd                   As Long
  wFunc                  As Long
  pFrom                  As String
  pTo                    As String
  fFlags                 As Integer
  fAborted               As Long
  hNameMaps              As Long
  sProgress              As String
End Type
 
Public Declare Function GetDesktopWindow Lib _
    "user32" () As Long
Public Declare Function SHFileOperation Lib _
    "shell32.dll" Alias _
    "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) _
    As Long
 
Public Function CopyFiles( _
                asFiles() As String, _
                sTarget As String) _
                As Boolean
  '// -----------------------------------------------------
  '// Methode:   | Kopiert eine Anzahl Dateien;
  '//            | Aufruf des "flying windows"-Dialogs
  '//            | benötigt VBA6+ wegen Join-Funktion
  '// -----------------------------------------------------
  '// Parameter: | asFiles = Datenfeld (Array) mit
  '//            |           gültigen Pfaden
  '//            | sTarget = Zielordner
  '// -----------------------------------------------------
  '// Rückgabe:  | True bei Erfolg
  '// -----------------------------------------------------
  '// Autor:     | Stefan Kulpa
  '//            | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
 
  Const FO_COPY               As Long = &H2
  Const FOF_RENAMEONCOLLISION As Long = &H8
 
  Dim sFiles                  As String
  Dim uSHFileOp               As SHFILEOPSTRUCT
 
  On Error Resume Next
  sFiles = VBA.Join(asFiles, vbNullChar)
  sFiles = sFiles & vbNullChar
  With uSHFileOp
    .hwnd = GetDesktopWindow()
    .wFunc = FO_COPY
    .pFrom = sFiles
    .pTo = sTarget
    .fFlags = FOF_RENAMEONCOLLISION
  End With
  CopyFiles = (SHFileOperation(uSHFileOp) = 0)
 
End Function