› Sviluppare funzionalita su Microsoft Office con VBA › Estrarre file da archivi zip e smistarli in cartelle specifiche
-
AutoreArticoli
-
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.
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
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
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.
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....
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
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?
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.
-
AutoreArticoli