z.B. so:
Option Explicit ' force variable declaration
Option Compare Text ' "aBc" = "Abc" -> True
Public Sub Test()
Dim objFso As Object 'Scripting.FileSystemObject
Dim strFolderSrc As String
Dim strFolderDst As String
strFolderSrc = "D:\SourceFolder"
strFolderDst = "G:\DestinationFolder"
'Scripting.FileSystemObject - late binding
Set objFso = CreateObject("Scripting.FileSystemObject")
If Not objFso.FolderExists(strFolderSrc) Then
Call MsgBox("Source folder '" & strFolderSrc & "' does not exist.", vbExclamation)
Exit Sub
End If
If Not objFso.FolderExists(strFolderDst) Then
Call MsgBox("Destination folder '" & strFolderDst & "' does not exist.", vbExclamation)
Exit Sub
End If
Dim rngCell As Excel.Range
With Worksheets("Fundus")
.Range("A1:B1").Font.Bold = True
.Range("A1:B1").Value = Array("[Filename]", "[CopiedFrom]")
'last free cell in column A
Set rngCell = .Cells(.Rows.Count, "A").End(xlUp).Offset(1)
End With
Dim objFileSrc As Object 'Scripting.File
For Each objFileSrc In objFso.GetFolder(strFolderSrc).Files
If "pdf" = objFso.GetExtensionName(objFileSrc.Name) Then
If Not FileAlreadyCopied(objFileSrc, objFso) Then
Call objFileSrc.Copy(strFolderDst)
'filename without file extension
rngCell.Value = objFso.GetBaseName(objFileSrc.Name)
'file path into the cell one to the right
rngCell.Offset(0, 1).Value = objFileSrc.ParentFolder.Path
'set next free cell to write into the next file name
Set rngCell = rngCell.Offset(1)
End If
End If
Next
Set rngCell = Nothing
Set objFileSrc = Nothing
Set objFso = Nothing
End Sub
Public Function FileAlreadyCopied(File As Object, Fso As Object) As Boolean
'<ToDo>
End Function
FileAlreadyCopied musst du noch implementieren.
Sprich in Spalte A nach dem Dateinamen suchen, wenn der gefunden wird, dann den Dateipfad mit dem Inhalt der Zelle daneben (also Spalte B) vergleichen. Wenn das auch übereinstimmt, dann FileAlreadyCopied = True setzen; falls nicht, dann weitersuchen - z.B: per Range.Find() oder du iterierst durch alle Zellen per For- oder ForEach-Schleife.
Grüße
PS: FileSystemObject (MSDN VBA-Referenz)
PPS: Allgemein gilt: Die MSDN (VBA) ist Dein Freund und Helfer und erste Anlaufstelle (am besten auf Englisch gestellt; die deutsche Übersetzung ist maschinelles ~lala).
|