2016-11-30 1 views
0

Bitte helfen Sie mit dem Code zum Kopieren von Dateien nacheinander in den Zielordner. Ich probierte mit "für jede Schleife, aber es kopiert alle Dateien auf einmal in den Zielordner. Ich bin neu zu VBA und wäre hilfreich, wenn jemand den Code für mich knacken könnte. Danke im Voraus. Hier ist der Code, den ich verwaltet habe zu kommen mit.Excel VBA - movefile Syntax

ich erhalte Laufzeit 53 Fehler, Datei nicht gefunden, e die folgenden Syntax-Hervorhebung.

FSO.movefile Source:="C:\Users\wazeer.ahamed\Documents\Outlookemails_Macro\" & Fname, Destination:="C:\Users\wazeer.ahamed\Documents\TcktIDfolder\" & Fname 

Sub Example1() 

'Extracting file names Dim objFSO As Object Dim objFolder As Object Dim newobjFile As Object  
Dim lastID As Long Dim myRRange As Range Dim Maxvalue As Integer  
Dim sFolder As String Dim dFolder As String 


Sub Example1() 

'Extracting file names 
Dim FSO 
Dim objFolder As Object 
Dim newobjFile As Object 
Dim FromDir As String 
Dim ToDir As String  

Dim lastID As Long 
Dim myRRange As Range 
Dim Maxvalue As Integer  
Dim Fname As String      

FromDir = "C:\Users\wazeer.ahamed\Documents\Outlookemails_Macro\" 
ToDir = "C:\Users\wazeer.ahamed\Documents\TcktIDfolder\"  
Fname = Dir(FromDir) 

If Len(FromDir) = 0 Then 
    MsgBox "No files" 
    Exit Sub 
End If  

Set myRange = Worksheets("Sheet1").Range("C:C")  
Maxvalue = Application.WorksheetFunction.Max(myRange)  
lastID = Maxvalue 

'finding the next availabe row  
erow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 

'Extracting file names 

'Create an instance of the FileSystemObject 
Set FSO = CreateObject("Scripting.FileSystemObject") 
'Get the folder object 
Set objFolder = FSO.GetFolder("C:\Users\wazeer.ahamed\Documents\Outlookemails_Macro") 

'loops through each file in the directory and prints their names and path   
For Each newobjFile In objFolder.Files 

    'print file name  
    Cells(erow, 1) = Fname  

    'print file path 
    Cells(erow, 2) = newobjFile.Path 

    'PrintUniqueID 
    Cells(erow, 3) = lastID + 1 

    FSO.movefile Source:="C:\Users\wazeer.ahamed\Documents\Outlookemails_Macro\" & Fname, Destination:="C:\Users\wazeer.ahamed\Documents\TcktIDfolder\" & Fname  
    Cells(erow, 5) = "file succesfully copied"     
Next newobjFile   

Set FSO = Nothing 
Set newobjFile = Nothing 
Set objFolder = Nothing    

End Sub  
+0

Sie verwenden Fname für den Dateinamen, aber Fname wird mit der Rückkehr von 'Dir' am Anfang der Prozedur initialisiert (und wird" C: \ Benutzer \ wazeer.ahamed \ Documents \ Outlookemails_Macro \ "sein) –

Antwort

0

ich denke, dass der Code einfacher und dynamisch sein können, wenn Sie spielen mit Ihrem eigene Excel-Datei

  • Verwenden Sie den "A1" -Bereich, um den Quellordner zu speichern.
  • Verwenden Sie den Bereich "B: B", um den Namen der Dateien anzugeben.
  • Verwenden Sie "C: C" Bereich, um die vorherigen Spalten zu verketten.
  • Verwenden Sie "D1" Bereich, um den Zielordner zu setzen.

Sub copyFiles() 
'Macro for copy files 
'Set variable 
Dim source As String 
Dim destination As String 
Dim x As Integer 
Dim destinationNumber As Integer 

destinationNumber = WorksheetFunction.CountA(ThisWorkbook.Sheets("Sheet1").Range("C:C")) 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

'Create the folder if not exist 
If Dir(ThisWorkbook.Path & "\" & ThisWorkbook.Sheets("Sheet1").Range("D1"), 16) = "" Then 
    MkDir ThisWorkbook.Path & "\" & ThisWorkbook.Sheets("Sheet1").Range("D1") 
End If 

'Run the loop to copy all the files 
For x = 1 To destinationNumber 
    source = ThisWorkbook.Sheets("Sheet1").Range("C" & x) 
    destination = ThisWorkbook.Sheets("Sheet1").Range("D1") 
    FileCopy source, destination 
Next x 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
End Sub 

Mit diesem können Sie die Wege der Ordner ändern und Dateinamen, wann immer Sie wollen. Ich habe FileCopy verwendet, um Ihre Dateien in der Quelle zu erhalten, aber wenn Sie sie löschen müssen, verwenden Sie besser eine andere Methode.