2013-05-31 3 views
0

J'ai le code suivant que j'ai utilisé pour ouvrir le dernier fichier CSV modifié, et ont littéralement juste changé le nom du chemin et l'extension, mais il ne fonctionne pas maintenant, apprécierait des pointeurs où je me trompe:ouvrir la dernière feuille de calcul Excel modifiée en utilisant vba

code J'utilise:

Sub ReceiptTest() 

    On Error Resume Next 
    With Application.FileSearch 
    .LookIn = "\\K123456\shared\IT Public\ReceiptsETE\Archive\": .Filename = "*.XLS*" 
    .Execute msoSortByLastModified, msoSortOrderDescending 
    For FF = 1 To .FoundFiles.Count 
    If FileDateTime(.FoundFiles(FF)) > LastModDate Then 
    LastModDate = FileDateTime(.FoundFiles(FF)) 
    lmf = .FoundFiles(FF) 
    End If 
    Next 
    End With 
    Workbooks.Open (lmf) 

    End Sub 

Merci

+0

est-ce que vous l'exécutez réellement dans xl03? 'Application.FileSearch' ne fonctionne pas à partir de xl07 – brettdj

+0

oui, je cours en xl03 –

Répondre

0

Je ne peux pas tester votre code comme je suis en utilisant Execl 2010 et Application.FileSearch est pas pris en charge.

J'utilise ceci pour trouver le dernier fichier modifié ...

Sub GetLatestFile() 

Dim strFolder As String 
Dim strFile As String 
Dim latestFile As String 
Dim dtLast  As Date 

' assign variables 
    strFolder = "C:\" 'The end of this path must have a \ on it 
    strFile = Dir(strFolder & "\*.*", vbNormal) ' Any File 
' strFile = Dir(strFolder & "\*.xls*", vbNormal) ' Excel Files 
' strFile = Dir(strFolder & "\*.csv", vbNormal) ' CSV Files 

' loop through files to find latest modified date 
    Do While strFile <> "" 
     If FileDateTime(strFolder & strFile) > dtLast Then 
      dtLast = FileDateTime(strFolder & strFile) 
      latestFile = strFolder & strFile 
     End If 
     strFile = Dir 
    Loop 

    MsgBox latestFile 

End Sub 
+0

merci pour cela, j'ai modifié le strFolder pour refléter le chemin dont j'ai besoin, et quand je lance le code, mais la boîte de message qui apparaît est vide .... des pensées? En outre, comment voulez-vous ouvrir le dernier fichier modifié –

1

Si vous essayez d'ouvrir un fichier CSV, votre nom de fichier doit être .csv, pas xls. Voici comment je le fais. Vous devez définir une référence à Microsoft Scripting Runtime. Il fonctionne même lorsque vous mettez à niveau à partir de 2003

Sub OpenCSV() 

    Dim sFldr As String 
    Dim fso As Scripting.FileSystemObject 
    Dim fsoFile As Scripting.File 
    Dim fsoFldr As Scripting.Folder 
    Dim dtNew As Date, sNew As String 

    Const sCSVTYPE As String = "Microsoft Office Excel Comma Separated Values File" 

    Set fso = New Scripting.FileSystemObject 

    sFldr = "C:\Documents and Settings\dick\My Documents\QBExport\" 

    Set fsoFldr = fso.GetFolder(sFldr) 

    For Each fsoFile In fsoFldr.Files 
     If fsoFile.DateLastModified > dtNew And fsoFile.Type = sCSVTYPE Then 
      sNew = fsoFile.Path 
      dtNew = fsoFile.DateLastModified 
     End If 
    Next fsoFile 

    Workbooks.Open sNew 

End Sub 
+0

Merci, mais je veux réellement ouvrir un fichier .xls pas .csv –

0

Ok, je suis arrivé que cela fonctionne en utilisant le code de Conman ci-dessus avec quelques modifications (j'apporté des modifications à son code et ils seront pris en compte s'ils sont approuvés). Voici son code avec ces changements:

Sub GetLatestFile() 

Dim strFolder As String 
Dim strFile As String 
Dim latestFile As String 
Dim dtLast  As Date 

' assign variables 
    strFolder = "C:\your\file\path\goes\here\" 'the path of the file drop folder (you need the final "\" on the directory 
    strFile = Dir(strFolder & "\*.xls*", vbNormal) ' Excel Files 
' strFile = Dir(strFolder & "\*.csv", vbNormal) ' CSV Files 
' strFile = Dir(strFolder & "\*.*", vbNormal) ' Any File 

' loop through files to find latest modified date 
    Do While strFile <> "" 
     If FileDateTime(strFolder & strFile) > dtLast Then 
      dtLast = FileDateTime(strFolder & strFile) 
      latestFile = strFolder & strFile 
     End If 
     strFile = Dir 
    Loop 

    MsgBox latestFile 

End Sub 

Vous pouvez également définir strFolder en utilisant un dialogue de fichier et passer dans le sous-dessus. Voici un exemple:

Sub ChooseFolder() 
    Dim fd As Office.FileDialog 
    Dim strFolder As String 

    Set fd = Application.FileDialog(msoFileDialogFolderPicker) 
    With fd 
     If .Show Then 
      strFolder = .SelectedItems(1) 
     End If 
    End With 

    GetLatestFile strFolder 

End Sub 

Sub GetLatestFile(strFolder As String) 

Dim strFile As String 
Dim latestFile As String 
Dim dtLast  As Date 

' assign variables 
    strFolder = strFolder & "\" 
    strFile = Dir(strFolder & "\*.xls*", vbNormal) ' Excel Files 
' strFile = Dir(strFolder & "\*.csv", vbNormal) ' CSV Files 
' strFile = Dir(strFolder & "\*.*", vbNormal) ' Any File 

' loop through files to find latest modified date 
    Do While strFile <> "" 
     If FileDateTime(strFolder & strFile) > dtLast Then 
      dtLast = FileDateTime(strFolder & strFile) 
      latestFile = strFolder & strFile 
     End If 
     strFile = Dir 
    Loop 

    MsgBox latestFile 

End Sub 

Je viens de tester les deux mandrins de code et ils fonctionnent pour moi. Faites-moi savoir si vous ne pouvez pas les faire travailler.

Questions connexes