sospendere elenco files



  • sospendere elenco files
    di marxitpa data: 30/09/2013 05:03:44

    Ho la seguente macro che crea l'elenco dei files presenti a partire da una cartella (indicata in A1) e sottodirectory.
    Fino a quando i files sono in numero ridotto è tutto OK.
    Il problema c'è quando i files sono molti e, magari, hai l'esigenza di spegnere il computer.

    Chiedo: E' possibile fare in modo che:
    * si possa interrompere la ricerca e salvare l'elenco?
    * mantenere il punto di interruzione per quando si riparte con la ricerca?

    Grazie
     
    Sub ShowFolderList(CARTELLA, rig, col)
    'CARTELLA=Cartella sorgente
    'rig=Riga del foglio di output
    'col=Colonna del foglio di output
       
        Dim fs, f, F1, s, sf
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set f = fs.getfolder(CARTELLA)
        Set sf = f.SubFolders
        Set fails = f.Files
        nomedisco = f.drive.volumename '**** etichetta del 
    
    disco
       
        '***** controllo tutti i files della cartella 
    
    *******
        For Each pf1 In fails
            If pf1.Name = "" Then GoTo avanti  '**se la 
    
    cartella non contiene nomi di file
            On Error GoTo pross
            nomedisco = f.drive.volumename
            Percorso = Right(pf1.parentfolder.Path, 
    
    Len(pf1.parentfolder.Path) - 2)
            NomeFile = pf1.Name
            estens = Right(NomeFile, 3)
            dimens = pf1.Size
            datacre = pf1.DateCreated 'data creazione File
            dataultacc = pf1.DateLastAccessed 'data ultimo 
    
    accesso al file
            dataultmod = pf1.DateLastModified 'data ultima 
    
    modifica al file
            Cells(rig, col + 1) = CARTELLA
            Cells(rig, col + 2) = NomeFile
            Cells(rig, col + 3) = estens
            Cells(rig, col + 4) = datacre
            Cells(rig, col + 5) = dimens
            Cells(rig, col + 6) = dataultacc
            Cells(rig, col + 7) = dataultmod
            rig = rig + 1
            Cells(1, 2) = "numfile=" & Str(rig - 2)
    pross:
        Next
    
    '****** controllo se la cartella contiene sottocartelle
    avanti:
        For Each F1 In sf
            If F1.Name = "" Then GoTo sotto ' *** se la 
    
    cartella non contiene sottocartelle
            On Error GoTo sotto
            Cells(1, 3) = CARTELLA & "" & F1.Name
           
            Call ShowFolderList(CARTELLA & "" & F1.Name, 
    
    rig, col) '***** chiamata ricorsiva
    sotto:
        Next
    End Sub
    
    
    
    '***** sub da associare ad un tasto rapido *****
    Sub Tastopremuto()
        Dim fs
        Set fs = CreateObject("Scripting.FileSystemObject")
        Range("A2:Z3000").ClearContents
        patte = Cells(1, 1)
        Call ShowFolderList(patte, 2, 2)
        MsgBox ("FINITO")
    End Sub



  • di marxitpa (utente non iscritto) data: 30/09/2013 19:39:16

    Con il tasto 'Esc' riesco ad interrompere la ricerca e quindi anche a salvare l'elenco dei files esaminati.

    E' possibile riuscire a memorizzare il punto di interruzione in modo che quando si riparte con la ricerca i nuovi files vengano aggiunti a seguire all'elenco salvato?



  • di Vecchio Frac data: 01/10/2013 21:08:43

    Potresti memorizzare (in una cella di appoggio) almeno ogni cambio di directory così da ricominciare da lì, e male che ti vada hai solo da scansionare l'ultima cartella di file non completamente letta.






  • di marxitpa data: 03/10/2013 05:05:45

    Grazie per la risposta,
    ho tentato sensa riuscirci.
    Potresti migliorare la macro?
    Cella d'appoggio W1.
    grazie



  • di Vecchio Frac data: 03/10/2013 09:46:27

    Quando si dice "mettere il sedere nelle pedate" ^_^
    Ora ci provo.





  • di Vecchio Frac data: 03/10/2013 13:37:19

    Comunque, ad ogni avvio di elaborazione, non si può prescindere dal rileggere, ogni volta e sequenzialmente, il contenuto del disco e delle cartelle. Quindi non c'è nessun vantaggio computazionale.
    Inoltre, anche se domani, diciamo, riprendessi a rileggere le cartelle dal punto in cui mi sono fermato oggi, il contenuto delle cartelle potrebbe essere cambiato e allora l'operazione non ha molta ragione di essere.

    Forse devi rassegnarti a:
    1- indicare una cartella specifica (per ridurre i tempi di elaborazione e quindi la necessità di stopparla)
    2- iniziare e terminare comunque l'elaborazione.





  • di marxitpa data: 03/10/2013 15:30:29

    grazie ...



  • di Vecchio Frac data: 03/10/2013 15:36:01

    Prego, ma cosa ne pensi delle mie conclusioni?





  • di marxitpa data: 03/10/2013 17:42:38

    Nulla da dire per quanto riguarda le tue considerazioni. Peccato però ...
    Ti spiego qual'è la mia esigenza e su cosa, passo passo, da inesperto (cercando suggerimenti a destra e a manca) sto cercando di lavorare.
    Un file in excel che:
    1 - mi elenchi tutti i files contenuti in un HD esterno (sono presenti documenti, immagini, video, etc) di dimensioni 40Gb;
    2 - in fase successiva, con altra procedura, successivamente faccio la stessa cosa co l'HD interno (partendo da C:)
    -------------
    In un'unico file (con il copia-incolla) metto assieme i due elenchi e procedo con individuazioni dei doppioni.
    A questo punto procedo con l'eliminazione dei doppioni o, se in dubbio, con lo spostamento momentaneo in una cartella a parte per successive verifiche.

    Ovviamente lavorando con moltissimi files, i tempi sono lunghissimi.
    Nessun problema se non ci sono soluzioni alternative: si lascia il computer acceso durante la notte e, appena sveglio, si procede.

    n.b.: ho avviato altra discussione, se interessa. per (prima della decisione eliminare-spostare in jpg) di poterle visionare.
    Magari ci sono programmi alternativi (più veloci), ma il 'gusto' è quello di fare il tutto con excel.

    Salutissimi e grazie.

    Se può interessare il file ... datemi indicazioni di come farvelo avere!



  • di Vecchio Frac data: 03/10/2013 22:06:17

    Se questa è l'esigenza (controllare i doppioni) allora non romperti la testa reinventando la ruota.
    Usa programmi già fatti e finiti, ce ne sono tanti e sono velocissimi, fanno quello che vuoi e anche di più.
    Io uso per esempio (non sia pubblicità, ma lo trovo fatto bene) FreeFileSync 4, cerca con Google (è free appunto).

    Leggo ora la tua frase...
    cit. "Magari ci sono programmi alternativi (più veloci), ma il 'gusto' è quello di fare il tutto con excel. "
    ---> Non c'è dubbio. Magari Excel non è neanche il programma più indicato. Ma se hai voglia e pazienza di provarci, ottima idea. Se invece devi essere produttivo, allora lascia perdere e affidati a un software più robusto.

    Per postare il file puoi allegarlo qui (ma dopo tre giorni viene rimosso dal sistema).





  • di marxitpa data: 04/10/2013 04:46:27

    saggio consiglio per utilizzo software già pronto e grazie per l'indicazione ma ...
    ... quando si ha niente da fare (a 67 anni devo impegnare il tempo) si cercano soluzioni alternative.

    Allego il file, per gli interessati, e sono graditi tutti i miglioramenti.



  • di marxitpa data: 04/10/2013 04:51:07

    ... mi spiace ma il file ha dimensioni superiori al consentito e non riesco ad inviarlo ...



  • di Vecchio Frac data: 04/10/2013 08:45:51

    cit. "quando si ha niente da fare (a 67 anni devo impegnare il tempo)"
    ---> grande, benvenuto nel club dei vecchietti allora :)

    Prova a zippare il file e rispedirlo.





  • di marxitpa data: 04/10/2013 09:40:09

    Ho utilizzato 7zip e ho inviato file.
    Miglioratelo ...



  • di Vecchio Frac data: 04/10/2013 10:23:48

    Il progettino funziona bene anche se bisogna entrare un po' nella logica :)

    Faccio fatica a seguire il flusso del codice.
    Generalmente non servono tutti quei moduli (ne hai creati ben 54! ne basta uno solitamente, dove inserire tutto il codice pubblico). Anche perchè moltissimi sono completamente vuoti e si perde un sacco di tempo a sfrondare.

    Per curiosità, come mai in apertura imposti un riferimento a BullZipPDF se prevedi comunque una routine per il salvataggio in PDF? (fermo restando che la versione Excel con cui è stato creato il file è la 2003 che non espone un metodo ExportAsFixedFormat).






  • di marxitpa data: 04/10/2013 11:01:55

    premessa ... non sono esperto in VBA e per cercare di ottenere qualche risultato faccio ricerca di codici a destra e a manca ... e poi cerco di adattarli alle mie esigenze.
    ... non mi fare domande 'difficili' perchè non saprei rispondere.
    L'essere sintetico non è il mio forte ... da 54 a 1 (non metto mano perchè farei danni).

    Aspetto che gli Esperti, se ritengono che il file possa tornare utile, lo migliorino.
    "come mai in apertura imposti un riferimento a BullZipPDF" ... non ti so dare risposta, non l'avevo (l'ho) notato. E poi, non ho esigenze di ultilizzarlo.



  • di Vecchio Frac data: 04/10/2013 11:11:10

    Se ti può interessare, ho ridotto le dimensioni del file da 12MB a 300KB, e si può fare di meglio (67KB senza preimpostare i colori, lasciando che sia il codice a farlo quando ha terminato).
    Proseguo con l'analisi ^_^





  • di marxitpa data: 04/10/2013 11:17:04

    Cavolo ... che 'dimagrimento' ... Mi dai la ricetta per far dimagrire così tanto me e mia moglie?
    ... sei un Grande.
    Certo che mi interessa il miglioramento ...
    ... e io controllerò di continuo l'imserimento dei file 'aggiornati'.
    grazie



  • di Vecchio Frac data: 04/10/2013 11:35:47

    C'è un errore fastidioso nella routine Salva_Copia.
    L'ho corretto come segue.
    Inoltre adesso, se la cartella di destinazione non esiste, viene creata.
     
    Sub Salva_Copia()
        On Error GoTo gest_err
        
        Application.DisplayAlerts = False
        Nome_Attuale = ActiveWorkbook.Name
        Percorso = [D1]
        NomeFile = Mid(Nome_Attuale, 1, Len(Nome_Attuale) - 4) + " " & Format(Date, "dd mmm yyyy") & ".XLS"
        ActiveWorkbook.SaveCopyAs Percorso & "" & NomeFile
        Application.DisplayAlerts = True
        
        Exit Sub
        
    gest_err:
        If Err.Number = 1004 Then MkDir [D1]
        Resume
    End Sub
    






  • di marxitpa data: 05/10/2013 10:02:08

    Nel file su cui sto lavorando e che ho allegato ho problemi con la macro Ordina.
    Problemi superati rettificando la macro come di seguito

     
    Sub Ordina()
    '
    ' Ordina Macro
    ' Macro registrata il 26/09/2013 da Marcello
    ''
        Cells.Select
        Range("P1").Activate
        Selection.Sort Key1:=Range("T2"), Order1:=xlAscending, Key2:=Range("U2") _
            , Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False _
            , Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
            xlSortNormal
        ActiveWindow.SmallScroll ToRight:=15
        Columns("S:S").Select
        Selection.Copy
        Columns("W:W").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Cells.Select
        Range("P1").Activate
        Application.CutCopyMode = False
    
    End Sub
    



  • di Vecchio Frac data: 05/10/2013 11:59:05

    Non c'ero ancora arrivato :)
    Comunque considera che puoi semplificare ricordando che generalmente non serve pre-selezionare un range per farci qualche operazione: diventa importante solo quando usi PasteSpecial.
     
    Sub Ordina()
    '
    ' Ordina Macro
    ' Macro registrata il 26/09/2013 da Marcello
    
        Range("P1").Sort Key1:=Range("T2"), Order1:=xlAscending, Key2:=Range("U2") _
            , Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False _
            , Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
            xlSortNormal
    
        'ActiveWindow.SmallScroll ToRight:=15      '<-- questa riga è inutile
    
        Columns("S:S").Copy 
        Columns("W:W").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                
        Application.CutCopyMode = False
    
    End Sub