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

Kopier-Makro

Kopier-Makro
Claudia
Hallo zusammen,
ich benötige Eure Hilfe!
Ich würde gerne per Excel-Makro einen Ordner woanders hin kopieren.
Die Pfadangabe des Ausgangsordner und auch des Zielordners stehen in Zelle A1 bzw. B1.
In C1 soll hintelegt werden, ob Unterordner ebenfalls kopiert werden sollen. Eine 0 für nein, eine 1 für ja.
Der Code soll dahingehend auf Fehler abgefangen, wenn Ausgangsordner oder Zielordner nicht korrekt hinterlegt sind. Des weiteren soll der Fehler abgefangen werden, wenn der Zugriff z.B. aufgrund fehlender Berechtigungen verweigert wurde.
Wer kann mir helfen?
Liebe Grüße
Claudia

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Kopier-Makro
10.09.2011 17:48:17
Josef

Hallo Claudia,
Probiere mal.

' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub copyDir()
  Dim objFSO As Object, objFolder As Object, objSubFolder As Object
  Dim lngRet As Long
  Dim strSourceDir As String, strTargetDir As String
  Dim bolSubFolders As Boolean
  
  On Error GoTo ErrExit
  
  strSourceDir = Range("A1").Text
  strSourceDir = IIf(Right(strSourceDir, 1) = "\", Left(strSourceDir, Len(strSourceDir) - 1), strSourceDir)
  strTargetDir = Range("B1").Text
  strTargetDir = IIf(Right(strTargetDir, 1) = "\", strTargetDir, strTargetDir & "\")
  bolSubFolders = Range("C1") = 1
  
  If Dir(strSourceDir, vbDirectory) = "" Then
    MsgBox "Das Quellverzeichnis existiert nicht!", vbInformation, "Hinweis"
    Exit Sub
  End If
  
  lngRet = MakeSureDirectoryPathExists(strTargetDir)
  
  If lngRet = 0 Then
    MsgBox "Das Zielverzeichnis existiert nicht und kann auch nicht erstellt werden!", vbInformation, "Hinweis"
    Exit Sub
  End If
  
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  
  lngRet = objFSO.CopyFolder(strSourceDir, strTargetDir)
  
  If Not bolSubFolders Then
    Set objFolder = objFSO.GetFolder(strTargetDir & Mid(strSourceDir, InStrRev(strSourceDir, "\") + 1))
    For Each objSubFolder In objFolder.Subfolders
      objFSO.DeleteFolder objSubFolder.Path, True
    Next
  End If
  
  ErrExit:
  If Err.Number <> 0 Then
    MsgBox "Fehler beim Kopieren des Verzeicnises!" & vbLf & vbLf & Err.Number & vbLf & Err.Description, vbExclamation, "Hinweis"
  End If
  Set objFSO = Nothing
  Set objFolder = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Kopier-Makro
10.09.2011 18:28:30
Claudia
Hallo Sepp,
dann kann ich Dich auch wieder direkt anschreiben. :-)
Funktioniert wieder einmal perfekt. Super!
Danke schön (mal wieder) für Deine schnelle Hilfe!
Liebe Grüße
Claudia
@ Sepp: Doch noch was...
10.09.2011 18:45:26
Claudia
kein Fehler, aber eine Erweiterung, die mir gerade in den Sinn gekommen ist.
Kannst Du das auch so einrichten, dass bei
0 Zielordner incl. der darin befindlichen Dokumente aber ohne Unterordner
1 Zielordner incl. der darin befindlichen Dokumente + die Unterordnernamen (diese aber ohne Inhalt)
2 Zielordner incl. der darin befindlichen Dokumente + alle Unterordner incl. Inhalt (diese auch mit Inhalt)
kopiert wird.
Das wäre super!
Anzeige
AW: @ Sepp: Doch noch was...
10.09.2011 19:23:23
Josef

Hallo Claudi,
kein Problem.

' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub copyDir()
  Dim objFSO As Object, objFolder As Object, objSubFolder As Object, objFile As Object
  Dim lngRet As Long
  Dim strSourceDir As String, strTargetDir As String
  Dim intModus As Integer
  
  On Error GoTo ErrExit
  
  strSourceDir = Range("A1").Text
  strSourceDir = IIf(Right(strSourceDir, 1) = "\", Left(strSourceDir, Len(strSourceDir) - 1), strSourceDir)
  strTargetDir = Range("B1").Text
  strTargetDir = IIf(Right(strTargetDir, 1) = "\", strTargetDir, strTargetDir & "\")
  intModus = Range("C1")
  
  If Dir(strSourceDir, vbDirectory) = "" Then
    MsgBox "Das Quellverzeichnis existiert nicht!", vbInformation, "Hinweis"
    Exit Sub
  End If
  
  lngRet = MakeSureDirectoryPathExists(strTargetDir)
  
  If lngRet = 0 Then
    MsgBox "Das Zielverzeichnis existiert nicht und kann auch nicht erstellt werden!", vbInformation, "Hinweis"
    Exit Sub
  End If
  
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  
  lngRet = objFSO.CopyFolder(strSourceDir, strTargetDir)
  
  If intModus = 0 Then
    Set objFolder = objFSO.GetFolder(strTargetDir & Mid(strSourceDir, InStrRev(strSourceDir, "\") + 1))
    For Each objSubFolder In objFolder.Subfolders
      objFSO.DeleteFolder objSubFolder.Path, True
    Next
  ElseIf intModus = 1 Then
    Set objFolder = objFSO.GetFolder(strTargetDir & Mid(strSourceDir, InStrRev(strSourceDir, "\") + 1))
    For Each objSubFolder In objFolder.Subfolders
      For Each objFile In objSubFolder.Files
        objFSO.DeleteFile objFile.Path, True
      Next
    Next
  End If
  
  ErrExit:
  If Err.Number <> 0 Then
    MsgBox "Fehler beim Kopieren des Verzeicnises!" & vbLf & vbLf & Err.Number & vbLf & Err.Description, vbExclamation, "Hinweis"
  End If
  Set objFSO = Nothing
  Set objFolder = Nothing
End Sub



« Gruß Sepp »

Anzeige
Danke schön! :-)
10.09.2011 19:39:28
Claudia
@Sepp : Fehler
11.09.2011 16:01:43
Claudia
Hallo Sepp,
habe einen Fehler festgestellt. Wenn der Ordner, der kopiert werden soll, bereits existiert gibt es folgende Fehlermeldung.
Fehler beim Kopieren des Verzeichnis!
70 Zugriff verweigert.
Kann man den Ordner vielleicht doch kopieren, in dem man dem Ordner das Tagesdatum und die Uhrzeit mitgibt?
Liebe Grüße
Claudia
AW: @Sepp : Fehler
11.09.2011 17:00:07
Josef

Hallo Claudia,
auch das lässt sich abfangen, allerdings kommt der Fehler nicht weil der Ordner schon existiert, sondern weil du nicht die entsprechenden Rechte besitzt.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub copyDir()
  Dim objFSO As Object, objFolder As Object, objSubFolder As Object, objFile As Object
  Dim lngRet As Long
  Dim strSourceDir As String, strTargetDir As String
  Dim intModus As Integer
  
  On Error GoTo ErrExit
  
  strSourceDir = Range("A1").Text
  strSourceDir = IIf(Right(strSourceDir, 1) = "\", Left(strSourceDir, Len(strSourceDir) - 1), strSourceDir)
  strTargetDir = Range("B1").Text
  strTargetDir = IIf(Right(strTargetDir, 1) = "\", strTargetDir, strTargetDir & "\")
  intModus = Range("C1")
  
  If Dir(strSourceDir, vbDirectory) = "" Then
    MsgBox "Das Quellverzeichnis existiert nicht!", vbInformation, "Hinweis"
    Exit Sub
  End If
  
  lngRet = MakeSureDirectoryPathExists(strTargetDir)
  
  If lngRet = 0 Then
    MsgBox "Das Zielverzeichnis existiert nicht und kann auch nicht erstellt werden!", vbInformation, "Hinweis"
    Exit Sub
  End If
  
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  
  On Error Resume Next
  Do
    lngRet = objFSO.CopyFolder(strSourceDir, strTargetDir, True)
    If Err.Number = 70 Then
      Err.Clear
      strTargetDir = strTargetDir & Mid(strSourceDir, InStrRev(strSourceDir, "\") + 1) & _
        "_" & Format(Now, "yyyyMMddhhmmss") & "\"
      MakeSureDirectoryPathExists strTargetDir
    ElseIf Err.Number <> 0 Then
      GoTo ErrExit
    End If
  Loop While lngRet <> 0
  On Error GoTo ErrExit
  
  If intModus = 0 Then
    Set objFolder = objFSO.GetFolder(strTargetDir & Mid(strSourceDir, InStrRev(strSourceDir, "\") + 1))
    For Each objSubFolder In objFolder.Subfolders
      objFSO.DeleteFolder objSubFolder.Path, True
    Next
  ElseIf intModus = 1 Then
    Set objFolder = objFSO.GetFolder(strTargetDir & Mid(strSourceDir, InStrRev(strSourceDir, "\") + 1))
    For Each objSubFolder In objFolder.Subfolders
      For Each objFile In objSubFolder.Files
        objFSO.DeleteFile objFile.Path, True
      Next
    Next
  End If
  
  ErrExit:
  If Err.Number <> 0 Then
    MsgBox "Fehler beim Kopieren des Verzeicnises!" & vbLf & vbLf & Err.Number & vbLf & Err.Description, vbExclamation, "Hinweis"
  End If
  Set objFSO = Nothing
  Set objFolder = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: @Sepp : Fehler
11.09.2011 17:51:51
Claudia
Hallo Sepp,
vielen Dank für die Erweiterung.
Wo durch wird der Fehler denn ausgelöst?
sagte ich doch, fehlende Berechtigung! o.T.
11.09.2011 17:54:33
Josef
« Gruß Sepp »

Fehlende Berechtigung zum
11.09.2011 17:56:26
Claudia
Überschreiben?
Ich frage deshalb so blöd, weil beim ersten Mal das Makro funktioniert hat. Erst, wenn der Ordner vorhanden war, kam der Fehler.
AW: Fehlende Berechtigung zum
11.09.2011 18:06:43
Josef

Hallo Claudia,
vielleicht hat der Ordner den Schreibschutz vom übergeordneten Verzeichnis geerbt.

« Gruß Sepp »

Anzeige
OK, danke schön für Deine Geduld! :-)
11.09.2011 18:07:28
Claudia

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige