CONTATORE PER MACRO ESEGUITA
Hai un problema con Excel? 
CONTATORE PER MACRO ESEGUITA
di Ciccius_prime (utente non iscritto) data: 04/04/2014 12:06:12
buongiorno a tutti...la premessa è sempre quella...mi piacerebbe mettere in "codice" le idee che frullano per la testa...
avrei la necessita di contare quante volte viene eseguita la stessa macro da pulsante e di utilizzare di volta in volta questo contatore all'interno di un foglio creato con la macro eseguita...
in sostanza un progressivo di fogli creati da inserire in una cella del foglio stesso.(D107)
prima domanda: esiste un evento "macro eseguita" che sia possibile individuare??? per dire ogni volta che viene eseguita questa macro aggiornami la variabile nr...(nr = nr + 1)
seconda domanda: alla fine del mese dovrei resettare il valore della variabile e ripartire dal principio...
spero di aver esposto bene il mio quesito... ovviamente ringrazio anticipatamente e attendo fiducioso.
grazie a tutti.
ciccius
di totygno71 (utente non iscritto) data: 04/04/2014 12:16:40
ciao ciccius
potresti utilizzare una cella come contatore che si incrementa ad ogni esecuzione.
di ciccius_prime (utente non iscritto) data: 04/04/2014 12:34:36
il mio problema è proprio incrementare la variabile "nr" contatore ad ogni esecuzione della macro "crea copia"...
la parte principale della macro è indicata nel codice seguente...ho provato a inserire all'interno di questa macro il codice nr = nr +1...risultato nr rimane "annidato" alla sub... e quindi non utile allo scopo.
il folgio "Form" si compila con i dati inseriri nel foglio "RACC"...
spero di esservi d'aiuto
Sub crea_distinta()
'
' crea_distinta Macro
' associamo alla variabile data il valore della casella corrispondente
data = Sheets("RACC").Range("C8")
nr = Sheets("Form").Range("D107")
'
'
'
On Error Resume Next
Sheets("F").Visible = True
Sheets("Form").Select
Sheets("Form").Copy before:=Sheets("F")
Sheets("Form (2)").Select
Sheets("Form (2)").Name = data
'
' CAMPO DATA
'
Sheets(data).Range("C13") = data
...omissis....
Range("D107") = nr |
di Lucas87 data: 04/04/2014 12:36:32
Credo anch'io che la soluzione sia una cella di appoggio da usare come contatore.
Per la seconda domanda:
oltre alla cella con il contatore devi usarne un'altra che compili con
Month(Date)
che restituisce il mese della data in cui viene usata la macro.
All'apertura del file, poi, fai confrontare la cella con il mese (cioè l'ultima volta che è stata avviata la macro) con il mese della data odierna, se sono diversi il mese è cambiato e la cella con il contatore viene azzerata
di ciccius_prime data: 04/04/2014 12:46:40
probabilmente sono duro a capire io...avere una cella di appoggio significa inserire il nr progressivo in quel foglio creato?...
la mia macro crea delle copie di un foglio che si compila automaticamente e le rinomina con la data che serve a distinguerlo da quelli che verranno creati in seguito, ogni volta che creo una copia deve avere un progressivo numerico mensile.
da inesperto ho pensato che se avessi una variabile che si aggiorna ogni volta che viene eseguita la macro potrei assegnare quel valore alla cella di riferimento nel foglio creato, al tempo stesso potrei utilizzare la stessa variabile "nr" quando avro necessità a inizio mese di cancellare le copie create il mese precedente...tipo cancellami nr("nr") fogli tra "I" e "F"..
i foglio che uso per compilare "Form" è sempre quello utilizzando una sorta di "azzera" ogni volta che devo cominciare una nuova distinta.... spero di essermi spiegato
di totygno71 (utente non iscritto) data: 04/04/2014 13:10:15
cit "ogni volta che creo una copia deve avere un progressivo numerico mensile. "
bene nella macro inserisci all'inizio del codice:
Sheets("Form").Range("D107") = Sheets("Form").Range("D107") +1 'in realtà puoi fare a meno della variabile nr
in questo modo ogni volta che viene eseguita la macro il valore viene incrementato di 1 e puo essere assegnato al foglio copia che stai creando-
Ad inizio mese come suggeriva Lucas la cella "D107" del foglio "Form" assumerà il valore 0
Non capisco come mai non riesci a rac'capezzolo'arti ^_^
di ciccius_prime data: 04/04/2014 13:25:59
hai ragggione... come sempre la soluzione è più semplice di quello che si crede.... provato già la tua soluzione...ovviamente funziona... mi resta solo da creare una altra macro per "inizio mese" che mi assegna "0" alla casella di "form"...
GRAZIE....
per la questione "inizializza mese" dovrei cancellare le distinte create tra i fogli nascoti "I" e "F"... c'è un modo per evitare di cancellare anche questi fogli-limiti.... tipo cancella tutto tra after"I" e before "F...???
grazie come sempre!
di totygno71 (utente non iscritto) data: 04/04/2014 13:54:02
Per eliminare i fogli che non ti interessano puoi usare un ciclo...
Dim WS As Worksheet
For Each WS In Worksheets
'istruzioni per eliminare da scegliere quella più vantaggiosa ma dipende da caso a caso
'potrebbe essere di cancellare tutti i fogli tranne il foglio "Form"
'allora puoi scrivere
if ws.name<> "Form" then
ws.delete
end if
next
di ciccius_prime data: 08/04/2014 11:29:09
grazie toty...
in merito a questa ultima richiesta (eliminare fogli mese)...mi spareste indicare un codice per identificare i fogli da eliminare per esempio prendendo all'interno del nome il mese???
altrimenti avevo pensato:
opzione 1: di nominare i fogli con la famosa cella progressiva di inizio post e cancellare una sorta di selezione allargata di fogli da "1" a "nr" .... chiedo lumi sulla fattibilità...
opzione 2: cancellarli tutti quelli compresi tra "I" ed "F" e successivamente ricreare questi ultimi ....
attendo fiducioso soluzioni....grazie in anticipo
di totygno71 (utente non iscritto) data: 08/04/2014 12:04:49
Le tue ipotesi sono entrambe percorribili bisogna capire quale è la miglio in funzione del tuo file...
Quanti sono i fogli che non vanno eliminati? E quanti quelli da eliminare?
di ciccius_prime (utente non iscritto) data: 08/04/2014 12:20:34
praticamente dovrei eliminare i fogli (rinominati con la data) creati nel mese...
per utilizzare i dati creo un riepilogo mensile con la somma dei fogli singoli creati tra un foglio "I" e uno "F" (opportunamente nascosti a regime) ...all'inizio del mese dovrei eliminare questi fogli e di conseguenza azzerare il ripeilogativo....
sguggolando ho trovato questa soluzione... (guarda sotto)...dovrei aggiustare il tiro per il mio file... in quanto i fogli da selezionare sono compresi tra un foglio inizio e uno fine e non sono tutti i fogli dopo il 2 come il codice seleziona...
mi sto convincendo che quando rinomino i fogli devo utilizzare il progressivo e non la data... credo che mi aiuti nel prosieguo...
we will see
Sub Macro1()
Dim arr As Variant
arr = Array()
For i = 2 To Sheets.Count
ReDim Preserve arr(i - 2)
arr(i - 2) = Sheets(i).Name
Next i
Sheets(arr).Select
End Sub |
di ciccius_prime (utente non iscritto) data: 10/04/2014 14:56:39
up...magari in prima pagina salta piu all'okkio:D
di totygno71 (utente non iscritto) data: 11/04/2014 08:05:25
Non hai risposto alle mie domande quindi come faccio ad aiutarti?
di ciccius_prime data: 11/04/2014 08:10:47
alla fine ho risolto come avevi detto tu toty... un ciclo che mi "salva" i fogli che devono restare ed elimina tutti gli altri... il conteggio fa 9 a 5/6.... ma funziona,,,ed è quello che risolve il problema...
un ultima cosa giusto per sfizio...
invece di usare "and" per elencare piu condizioni...non c'è un modo per fare un elenco...tipo...Ws.name<> "Form" ,"riepilogo", "etc"...ho provato in più modi ma non sono riuscito a venirne a capo e la soluzione è stata quella di ripetere la condizione per ogni foglio utilizzando "and"...(if Ws.name<> "Form" and Ws.name<> "riepilogo" and Ws.name<> "etc" then...)
scusate la mia ignoranza cosmica... e grazie a chi vorra aiutarmi a snellire ancora il codice che ripeto è già funzionante grazie a toty.
Vuoi Approfondire?