Sviluppare funzionalita su Microsoft Office con VBA Estrarre file da archivi zip e smistarli in cartelle specifiche

Login Registrati
Stai vedendo 8 articoli - dal 51 a 58 (di 58 totali)
  • Autore
    Articoli
  • #8208 Score: 0 | Risposta

    luilomo
    Partecipante

      vecchio frac ha scritto:

      Dunque, una semplice funzione di log potrebbe essere questa; supponiamo di avere a disposizione la cartella C:\LOG; in un modulo inseriamo il codice:

      WOW.

      Provo a inserire e faccio qualche test.

      Grazie.

      PS: dal forum sto imparando tante cose. Un grazie ai moderatori e a tutti quelli che offrono la loro competenza.

       

      #8209 Score: 0 | Risposta

      luilomo
      Partecipante

        Ciao Vecchio Frac

         

        domanda:

         non è che tutti questi copy cut e paste rallentano il sistema?

        vedo che se cancello i dati dalla foglio Verifiche e avvio la sub importAllXls del foglio 1 alcune volte il monito sfarfalla e scompare anche il folgio excel (sivedono solo i menu di excel)

                    If lTot = 0 Then
                        'metto un riferimento e apro il file di origine
                        Set Wk = Workbooks.Open(Filename:=sPath _
                            & sFileName)
                        'metto un riferimento al file aperto di origine dati
                        Set sh = Wk.Worksheets("Monitoraggio sicurezza Ambienti")
                        'metto un riferimento al Range del foglio di origine che contiene i dati
                        Set rng = sh.Range("A1").CurrentRegion
                        sh.Range("A" & rng.Rows.Count).Select
                        Selection.Cut
                        sh.Range("AO" & rng.Rows.Count).Select
                        activesheet.Paste
                        
                        
                        cop = rng.Rows.Count - 1 'riferimento da dove copiare i dati
                        pas = rng.Rows.Count 'riferimento dove incollare o scrivere i dati
                        
                        sh.Range("A" & cop).Select
                        Selection.Copy
                        sh.Range("A" & pas).Select
                        activesheet.Paste
                        
                        
                        sh.Range("b" & pas).Select
                        'Selection = "COM"
                        Selection = "11111"
                        
                        sh.Range("c" & cop, "j" & cop).Select
                        Selection.Copy
                        sh.Range("c" & pas, "j" & pas).Select
                        activesheet.Paste
                        
                        sh.Range("K" & pas).Select
                        Selection = "Commenti"
                        
                        sh.Range("N" & pas).Select
                        Selection = "0"
                        
                        sh.Range("O" & pas).Select
                        Selection = "COMMENTI"
                        
                        sh.Range("S" & pas).Select
                        'Selection = "COM"
                        Selection = "1111"
                        
                        sh.Range("X" & cop, "AB" & cop).Select
                        Selection.Copy
                        sh.Range("X" & pas, "AB" & pas).Select
                        activesheet.Paste
                        
                        sh.Range("AD" & cop, "AF" & cop).Select
                        Selection.Copy
                        sh.Range("AD" & pas, "AF" & pas).Select
                        activesheet.Paste
                        
                        sh.Range("AN" & cop).Select
                        Selection.Copy
                        sh.Range("AN" & pas).Select
                        activesheet.Paste
                        
        
        #8210 Score: 0 | Risposta

        luilomo
        Partecipante

          Metto il video di cosa accade sento anche la ventola del PC che accellera e dei suoni come di messaggi windows ma senza alcun messaggio visionato. 😉

           

          carico il video in drive

          https://drive.google.com/open?id=12dxwv7Fwab-besLPj5R5742aYuK0L0xQ

          #8211 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            247 pts

            luilomo ha scritto:

            rallentano il sistema?

            Bè può essere anche se non sono poi così tanti, vedo, e comunque il codice "non fa la cosa giusta" cioè io utilizzerei una tecnica più leggera per inserire un contenuto in una cella:

            sh.Range("A" & cop).Select
            Selection.Copy
            sh.Range("A" & pas).Select
            activesheet.Paste

            può essere ascritto così:

            sh.Range("A" & pas) = sh.Range("A" & cop)

            Cioè assegni direttamente a una cella il valore di un'altra cella ed in questo modo eviti di forzare Excel a selezionare una cella, a copiarla, a riselezionare altra cella e a incollare l'originale.

            Dal video, suono e rumore li sento poco, ma vedo che la macchina sembra impegnata in un'operazione lunga e non ti lascia il controllo. Sarebbe per me interessante esaminare il progetto a fondo ma mi manca sempre il tempo di fare queste analisi... prova intanto a fare le modifiche per eliminare i diversi copia e incolla.

            #8583 Score: 0 | Risposta

            luilomo
            Partecipante

              Ciao vecchi frac,

              Eccomi nuovamente,

              mi scuso per le assenze ma non sempre posso aggiornare il lavoro con i tuoti suggerimenti (io leggo studio applico e provo)

              😉

              Ho implementato la funzione log in varie parti del programma e con scritture di vario testo.

              Ho tentato di dare un riferimo variabile al file nel senso che nel codice della funzione il path è fisso quindi se sposto il file da un pc ad un'altro o lo copio in altra posizione potrebbe non funzionare (in effetti va in dedug)

              Ecco il codice che ho modificato quanto ho spostato il file (sempre con riferimeto fisso)

              Function WriteLOG(txt As String)
              Const LogFile As String = "C:\Users\User\Documents\luis\pippo\ChekList_GC\Report_sett_2018\FILE PER CLIENTE_NOV_2018\DATI\LOG\LOGFILE.LOG"
              'Const LogFile As String = "C:\Users\Proprietario\Documents\Fujtsu_21_11_2018\luis\pippo\ChekList_GC\Report_sett_2018\FILE PER CLIENTE_NOV_2018\DATI\LOG\LOGFILE.LOG"
              Dim FileNum As Integer
                  FileNum = FreeFile
                  Open LogFile For Append As #FileNum
                  Print #FileNum, Now & ": " & txt
                  Close #FileNum
              End Function

              Questo è il percorso esatto del file log

              Const LogFile As String = "C:\Users\User\Documents\luis\pippo\ChekList_GC\Report_sett_2018\FILE PER CLIENTE_NOV_2018\DATI\LOG\LOGFILE.LOG"

              Ora vorrei far prendere la posizione del file excecl in cui risiede il codice

              "C:\Users\User\Documents\luis\pippo\ChekList_GC\Report_sett_2018\FILE PER CLIENTE_NOV_2018"

              e attaccarci l'ultimo pezzo

              "DATI\LOG\LOGFILE.LOG"

              Dal foglio ho adattato e inserito il seguente codice nella funzione ma non va

                  Dim wkMe As Workbook
                  Dim sPath As String
              'metto un riferimento a questo Workbook
                  Set wkMe = ThisWorkbook
              'metto nella variabile il percorso di questo file excel dove risiede la macro e ci aggiungo il pezzo del path del log
                  sPath = wkMe.path & "\DATI\LOG\LOGFILE.LOG"
                  Const LogFile As String = sPath`

              ho provto a cercare soluzioni ma non riesco a capire cosa non va.

              Help....

              #8601 Score: 1 | Risposta

              vecchio frac
              Senior Moderator
                247 pts

                luilomo ha scritto:

                ma non va

                E cioè? che errore ottieni?

                Forse, "Necessaria espressione costante" o qualcosa del genere? perchè il problema nel tuo codice è che la costante LogFile non può essere costruita con una variabile stringa. Deve essere costruita con un valore costante fisso:

                Dim wkMe As Workbook
                Dim sPath As String
                Dim LogFile As String
                    
                    'metto un riferimento a questo Workbook
                    Set wkMe = ThisWorkbook
                'metto nella variabile il percorso di questo file excel dove risiede la macro e ci aggiungo il pezzo del path del log
                    sPath = wkMe.Path & "\DATI\LOG\LOGFILE.LOG"
                
                    LogFile = sPath
                #8606 Score: 0 | Risposta

                luilomo
                Partecipante

                  vecchio frac ha scritto:

                  luilomo ha scritto:

                  ma non va

                  HAi dei poteri telepatici...

                  con il tuo suggerimento tutto ok. 

                  ORA FUNZIONA!!!!!!!

                  Una informazione generale:

                  Se le variabili dichiarate della funzione che viene richiamata in una certa posizione di una macro hanno lo stesso nome, quando riparte lesecuzione della macro restano valorizzate con il valore assegnato dalla funzione o riprendono il valore che avevano nella macro?

                  Esempio:

                  Dim wkMe As Workbook

                  Dim sPath As String

                  sono valorizzate e dichiarate nella MACRO 1. wkMe sempe come WorkBook mentre Spath varia a seconda di dove si trova nell'esecuzione della MACRO 1

                  In breve:

                  é opportuno chiamare le variabili nella funzione Log con nomi differenti?

                   

                  #8609 Score: 1 | Risposta

                  vecchio frac
                  Senior Moderator
                    247 pts

                    In VBA  le variabili dichiarate dentro una routine hanno una visibilità solo locale, cioè vivono e muoiono dentro quella routine.

                    Perciò puoi avere variabili con lo stesso nome e tipo dentro procedure diverse, e non si influenzano l'una con l'altra. C'è da dire che se una variabile può/deve essere comune a molte routine, si può dichiararla come Private in testa al modulo, sotto Option Explicit, e allora sarà visibile e disponibile a tutte le routine del modulo. E se è dichiarata Public sarà visibile anche a tutti gli altri moduli.

                  Login Registrati
                  Stai vedendo 8 articoli - dal 51 a 58 (di 58 totali)
                  Rispondi a: Estrarre file da archivi zip e smistarli in cartelle specifiche
                  Gli allegati sono permessi solo ad utenti REGISTRATI
                  Le tue informazioni: