2015-10-20 1 views
1

Je travaille sur un projet dans VBA où je recherche un répertoire pour les fichiers d'une certaine date qui répondent également à d'autres critères, et tout cela fonctionne très bien. Ce que je suis bloqué, ce qui devrait être un problème trivial, c'est que lorsque j'essaie d'utiliser FileCopy pour copier le fichier dans un autre dossier, je continue d'obtenir une erreur d'accès au chemin/fichier. Cela me rend confus parce que je tire le chemin directement à partir du FileItem que j'utilise pour rechercher les critères, je suis la personne qui a créé les dossiers source et de destination, et j'ai placé les fichiers dans le dossier source. Des pensées?VBA FileCopy: fichier non trouvé problème

Sub ListFilesInFolder() 

    Dim counter As Integer 
    Dim theString1 As String, theString2 As String 
     theString1 = "ISA*00*" 
     theString2 = "ISA|00|" 
    Dim line As String, fileName As String 
    Dim datestring As String 
     'datestring = Format(FileItem.DateLastModified, "mm/dd/yyyy") 
    Dim today As String 
     today = Format(DateAdd("d", -2, Date), "mm/dd/yyyy") 
    Dim destinationFolder As String 
     destinationFolder = "C:\Users\kragan\Desktop\test\folder2" 
    Dim file As TextStream 
    Dim FSO As Scripting.FileSystemObject 
     Set FSO = New Scripting.FileSystemObject 
    Dim SourceFolder As Scripting.Folder 
     Set SourceFolder = FSO.GetFolder("C:\Users\kragan\Desktop\test\folder1") 
    Dim FileItem As Scripting.file 

    For Each FileItem In SourceFolder.Files 
    datestring = "10/18/2015" 
     If (datestring = today) Then 
      Do While (SourceFolder <> "") 
       Set file = FSO.OpenTextFile(FileItem) 
       counter = 0 

       Do While Not file.AtEndOfLine And counter < 1 
        line = file.ReadLine 

        If InStr(1, line, theString1, vbTextCompare) > 0 Or InStr(1, line, theString2, vbTextCompare) > 0 Then 
         fileName = "C:\Users\kragan\Desktop\test\folder1\" + FSO.GetBaseName(FileItem) + ".AETCLS" 

    'The line where I get the error: 
         FileCopy fileName, destinationFolder 

         file.Close 
         counter = counter + 1 
         Exit Do 
        End If 
       Loop 
      Loop 
     End If 
    Next FileItem 
    MsgBox ("done") 
End Sub 

Répondre

2

Vous devez spécifier le dossier de destination + nom de fichier destination (et non seulement le dossier de destination).

donc ça marchera:

FileCopy fileName, destinationFolder & "\" & FSO.GetBaseName(FileItem) & ".AETCLS" 

Vous supposaient sans doute cela va fonctionner comme une application de gestionnaire de fichiers, où donner le dossier de destination est assez ... :) Mais lors de la programmation, vous devez spécifier chemin de destination exactement tel qu'il est, c'est-à-dire incluant le nom du fichier.

Un de mes amis obtenait une erreur similaire lors de la création du répertoire newdir1\newdir2\newdir3. Cela ne fonctionnait pas malgré son meilleur effort. Mais la solution était de créer newdir1, puis il est devenu possible de spécifier newdir1\newdir2, puis finalement newdir1\newdir2\newdir3. Les opérations de fichier de programmation ne font pas le travail souvent vu dans les gestionnaires de fichiers, mais tout doit être spécifié en détail et exécuté dans les étapes élémentaires.

0

Merci pour votre aide. Ce que j'ai découvert, c'est que vous devez avoir le chemin de destination complet, y compris le nom du fichier, même s'il ne change pas. Résolu!