FileDialog seleziona tutto

di il
6 risposte

FileDialog seleziona tutto

Il codice che segue archivia dei file in una cartella e ne tiene traccia in una tabella che viene via via compilata.
Sub archivia()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fd As Office.FileDialog
Dim fs
Dim VarDest As String
Dim VarOrig As String
Dim VarEst As String
Dim VarPercorsoDA As String
Dim VarPercorsoA As String
Dim i As Integer
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Set db = CurrentDb
Set rs = db.OpenRecordset("documenti", dbOpenDynaset)
Set fs = CreateObject("Scripting.FileSystemObject")
VarPercorsoDA = "<mio percorso DA>"
VarPercorsoA = "<mio percorso A>""
With fd
    .AllowMultiSelect = True
    .InitialView = msoFileDialogViewDetails
    .InitialFileName = VarPercorsoDA
    .Title = "seleziona i file"
    If .Show = True Then
        For i = 1 To .SelectedItems.Count
            VarOrig = .SelectedItems(i)
            VarEst = Right$(VarOrig, Len(VarOrig) - InStrRev(VarOrig, "."))
            rs.AddNew
            VarDest = rs!IDDocumento & "." & VarEst
            rs!estensione = VarEst
            rs.Update
            fs.copyfile VarOrig, VarPercorsoA & VarDest
        Next
    End If
End With
rs.Close
db.Close
End Sub
Attualmente devo selezionare manualmente i file. Vorrei sapere se è possibile selezionarli tutti da codice.
Naturalmente consigli su come meglio impostare il codice proposto sono sempre graditi.

grazie
un caro saluto a tutti

6 Risposte

  • Re: FileDialog seleziona tutto

    Vuoi gestire tutti i file di una cartella? Usa la funzione Dir() in un ciclo
  • Re: FileDialog seleziona tutto

    Innanzitutto non serve FSO se devi recuperare i File in una Folder... anche se francamente sono scettico su come hai fatto...!
    
    Dim MyFile  As String
    Dim pathsource As String ' percorso con * per includere tutti i files ma lo aggiungi dopo
    Dim pathdestination As String ' deve includere il BackSlash finale.
    
    pathsource ="C:\Folder1\"
    pathdestination = "C:\Folder2\"
    
    MyFile = Dir$(pathsource & "*" )
    Do While MyFile <> ""
        rs.Addnew
        rs!estensione = MyFile
        rs.Update
        CopyFile pathsource & MyFile  , pathdestination & MyFile 
        MyFile = Dir$
    Loop
    Finito, mi pare più snello...

    Ora ti chiedo... se esegui quel codice 2 o 3 volte che succede...?
  • Re: FileDialog seleziona tutto

    Mi scuso se rispondo solo ora, sono appena tornato da un viaggio di lavoro.
    Ringrazio oregon e @Alex, che mi hanno dato l’opportunità di conoscere l’istruzione Dir$.

    @Alex ha scritto:


    Ora ti chiedo... se esegui quel codice 2 o 3 volte che succede...?
    Il codice funziona apparentemente bene anche se eseguito più volte. Certo che devo selezionare manualmente i file.
    Quale sarebbe o potrebbe essere l’insidia @Alex?
    A vantaggio di tutti propongo il mio codice modificato secondo i suggerimenti di @Alex e adattato alle mie esigenze. Di fatto cambio il nome del file copiandolo. Ho solo cambiato l’istruzione CopyFile con FileCopy, perché con la prima mi dava errore.
    Sub archivia() ' secondo @Alex
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim VarDest As String
    Dim VarOrig As String
    Dim VarEst As String
    Dim VarPercorsoDA As String
    Dim VarPercorsoA As String
    Set db = CurrentDb
    Set rs = db.OpenRecordset("documenti", dbOpenDynaset)
    VarPercorsoDA = "<mi percorso DA>"
    VarPercorsoA = "<mi percorso A>"
    VarOrig = Dir$(VarPercorsoDA & "*")
    Do While VarOrig <> ""
        VarEst = Right$(VarOrig, Len(VarOrig) - InStrRev(VarOrig, "."))
        rs.AddNew
        VarDest = rs!IDDocumento & "." & VarEst
        rs!estensione = VarEst
        rs.Update
        FileCopy VarPercorsoDA & VarOrig, VarPercorsoA & VarDest
        VarOrig = Dir$
    Loop
    rs.Close
    db.Close
    End Sub
    
    Ora funziona perfettamente e concordo sul fatto che è molto più lineare.
    Grazie ancora
  • Re: FileDialog seleziona tutto

    Se lo esegui 2 volte, non hai 2 inserimenti doppi in tabella...?
    Poi non capisco cosa devi selezionare a mano... quel codice, come da richiesta prente TUTTI i file..., basterebbe controllare quelli non già presenti ed inserire solo quelli...!
  • Re: FileDialog seleziona tutto

    Il primo codice da me proposto, apre una finestra di dialogo in cui propone tutti i file contenuti nella cartella indicata e permette di selezionarne manualmente uno o più. I file selezionati vengono poi copiati in una seconda cartella cambiandone il nome.
    Chiaro che se eseguo due volte il codice e seleziono gli stessi file, questi risultano doppi, ma questo non avrebbe senso.
    Quello che invece non riuscivo a fare, e che invece riesco a fare con il tuo suggerimento nel secondo codice da me proposto, è di copiare tutti i file contenuti nella cartella indicata senza bisogno di selezionarli uno a uno.
  • Re: FileDialog seleziona tutto

    Il fatto non abbia senso non ci piove, ma la soluzione di dire che non ha senso può bastare solo se sei tu che lo usa... se lo distribuisci ad utenti quello che per te non ha senso puntualmente viene fatto...
    Vedi tu poi lo scenario.
Devi accedere o registrarti per scrivere nel forum
6 risposte