Condividi:        

divisione a cronometro

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

divisione a cronometro

Postdi raimea » 29/04/12 18:31

ciao a tutti. 8)
sto cercando di realizzare una macro che mi esegua una divisione ad intervalli di 1 min ( ogni 60 sec.).

nel foglio - cronometro - in D6 scrivo un numero che mi indica i minuti,
tale num deve essere diviso per il num in cella F6 e scrivere il risultato in G6.

poi dopo ogni 60 sec in E6 viene riportato il num dei minuti rimanenti , dividendo ora il num in E6/F6
e si oggirna il num in G6

la macro partira' con il puls start e si dovrebbe poter fermarla premendo stop
sperando di essere stato abbastanza chiaro, vi allego il file.
cia e grazie


https://rapidshare.com/files/3181448231/masa.undr.3_5_-_Copia.rar
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Sponsor
 

Re: divisione a cronometro

Postdi Flash30005 » 29/04/12 20:03

Prova questa
Codice: Seleziona tutto
Public NMin As Integer
Sub Pulsante1_Clic()
[G6] = [D6] / [F6]
NMin = 0
Restarta
End Sub

Sub Restarta()
If NMin = [D6] Then Exit Sub
[E6] = [D6] - NMin
[G6] = [E6] / [F6]
Calculate
NMin = NMin + 1
Application.OnTime Now + TimeValue("00:01:00"), "Restarta"
End Sub

Sub Pulsante2_Clic()
NMin = [D6]
End Sub


Per i pulsanti1 e 2 _Clic
vai sul pulsante e assegna macro
incolli il rispettivo codice
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: divisione a cronometro

Postdi raimea » 29/04/12 20:19

:-? forse la macro e' ok ma sbaglio ad applicarla.

al puls start ho assegnato macro --> Sub Pulsante1_Clic()
al puls stop ho assegnato --> Sub Pulsante2_Clic()

quando premo 1na volta start tutto ok e in E6 mi riporta correttamente i min come in cella D6 e fa la divisione.
ma poi E6 rimane sempre uguale non decresce mai come vorrei di 1 min ogni 60 secondi.
con relativo aggiornamento della divisione E6/ F6
ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi Flash30005 » 29/04/12 21:28

Spero che abbia inserito nel modulo anche la macro "Restarta" !?

'...
'...

Comunque allego il file

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: divisione a cronometro

Postdi raimea » 30/04/12 05:40

tutto ok
ho trovato il mio errore.
si' avevo copiato tutto, ma messo in coda in un modulo mettendo le dichiarazioni non in testa,
non all'inizio del modulo
Codice: Seleziona tutto
Public NMin As Integer

le ho spostate li' ed ora e' ok.
grazie. ;)
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi raimea » 30/04/12 06:21

azz :?:
ho notato che metre il cronometro funziona ,la macro e' attiva, e naturalm. il fglio rimane aperto,
MA sul monitor sto lavorando su un altro foglio excell, la macro del cronometro mi va in errore e mi fa la divisione
usando le caselle del foglio momentaneamente aperto a video.
si puo risolvere ? :idea:
grazie ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi Flash30005 » 30/04/12 08:57

Sulla funzione OnTime hai post da leggere a volontà
questo è uno di quelli
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=94739&p=544958&hilit=ontime#p544958

Ottenuto sul Cerca con chiave di ricerca "OnTime"


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: divisione a cronometro

Postdi raimea » 30/04/12 17:55

:( ci sto provando in tutti i modi maaaaa...
ho letto :
Se lavori con piu' file e' possibile che quando scatta un "OnTime" quel file non sia attivo; devi pertanto sempre qualificare nelle istruzioni della macro il file a cui le istruzioni si riferiscono.
In pratica invece di Sheets(CntSh) bastera' usare ThisWorkbook.Sheets(CntSh)

ma non riesco a inserire correttamente al punto , nel modo giusto
sono arrivato a questo:
Codice: Seleziona tutto
Sub Restarta()
If ThisWorkbook.Sheets(CntSh).NMin = [D6] Then Exit Sub  ' <<<<< errore...

[E6] = [D6] - NMin
[G6] = [E6] / [F6]
Calculate
NMin = NMin + 1
Application.OnTime Now + TimeValue("00:01:00"), "Restarta"
End Sub

ma non va. :undecided:
ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi Zer0Kelvin » 30/04/12 18:25

Ciao.
Devi fare in modo che TUTTI i riferimenti siano relativi a ThisWorkBook.
Se nella macro indichi [D6] e basta, la macro andrà a leggere o modificare la cella D6 del foglio attivo nel WorkBook attivo.
prova a racchiudere i riferimenti all'interno di un'istruzione with...end with
Codice: Seleziona tutto
Sub Restarta()
with ThisWorkbook.Sheets(CntSh)  '<===
If NMin = [D6] Then Exit Sub 

[E6] = [D6] - NMin
[G6] = [E6] / [F6]
Calculate
NMin = NMin + 1
end with '<===
Application.OnTime Now + TimeValue("00:01:00"), "Restarta"
End Sub
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: divisione a cronometro

Postdi raimea » 30/04/12 18:31

ok, ho provato a sost la macro sopra ma mi si blocca qui:
With ThisWorkbook.Sheets(CntSh) '<===

--> indice non incluso nell'intervallo

che sbaglio ora ?
grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi Flash30005 » 30/04/12 21:18

Sostituisci l'inera macro compresa la dichiarazione "Public"
Codice: Seleziona tutto
Public NMin As Integer, WCont As Worksheet
Sub Pulsante1_Clic()
Set WCont = Sheets("Cronometro")
WCont.[G6] = WCont.[D6] / WCont.[F6]
NMin = 0
Restarta
End Sub

Sub Restarta()
If NMin = WCont.[D6] Then Exit Sub
WCont.[E6] = WCont.[D6] - NMin
WCont.[G6] = WCont.[E6] / WCont.[F6]
WCont.Calculate
NMin = NMin + 1
Application.OnTime Now + TimeValue("00:01:00"), "Restarta"
End Sub

Sub Pulsante2_Clic()
NMin = WCont.[D6]
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: divisione a cronometro

Postdi raimea » 01/05/12 05:48

:) ok
funziona ma cosi' non ci sarei' arrivato
continuavo a provare di risolvere con --> ThisWorkbook.Sheets(CntSh)
grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi raimea » 01/05/12 18:30

la macro funziona ma corre troppo :lol:
non mi da nessun errore ma i calcoli vengono eseguiti
non ogni minuto ma piu frequentemente,
(non capisco con che criterio), si potrebbe inserire qualche controllo che
verifichi se sono passati 60 sec prima di aggiornare i vari coalcoli ?
grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi Flash30005 » 01/05/12 20:36

:?:
Application.OnTime Now + TimeValue("00:01:00"),
Questo codice dovrebbe essere idoneo per 1 minuto
se c'è un errore di tempo qui
qualsiasi controllo fatto dalla stessa "macchina" che genera questo sfasamento sarebbe inutile
occorrerebbe un controllo esterno
(persona con cronometro) :D

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: divisione a cronometro

Postdi Anthony47 » 02/05/12 01:58

Il fatto e' che nulla, nel codice, impedisce di scedulare Restarta una seconda, e una terza, ... volta; col risultato che il calcolo si effettua due, tre, etc volte al minuto.
Dichiarare tra le public una FlExec as Boolean, poi modificare in Restarta
Codice: Seleziona tutto
If NMin >= WCont.[D6] Then FlExec=False : Exit Sub
e contemporaneamente variare
Codice: Seleziona tutto
Sub Pulsante1_Clic()
if FlExec=True then Exit Sub   '<< ADD
Flexec =true                          '<< ADD
Set WCont = Sheets("Cronometro")


Poi aspetti che TUTTE le schedulazioni si fermino (metti "0" in D6, aspetti almeno un minuto) e riprovi.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: divisione a cronometro

Postdi raimea » 02/05/12 06:21

okk :)
ora la macro si e' stabilizzata non corre piu' ,
l'ho controllata con un cronometro esterno ed e' ok,
unica accortezza che dopo aver premuto stop si deve aspettare almeno 1 min prima di farla
ripartire ma questo e' ok, grazie.

ora volevo aggiungere un qualcosa per capire visivamente quando la macro e' in funzione,
avrei pensato di visualizzare in G9 i secondi che si decrementano ad ogni minuto cioe' scrivo
60 e quando faccio partire la macro iniziano a decrementare poi riparte da 60-->0 fino a
quando non premo stop.

cosa dovrei aggiungere ? :?:

vi riporto la macro che sto usando ora ed e' ok
(ho solo modificato qualche cella di riferim rispetto alla macro originale)

Codice: Seleziona tutto
Public NMin As Integer, WCont As Worksheet, FlExec As Boolean

Codice: Seleziona tutto

Sub Pulsante1_Clic()
If FlExec = True Then Exit Sub
FlExec = True

Set WCont = Sheets("Cronometro")
ActiveSheet.Unprotect
 
WCont.[G6] = WCont.[p6] / WCont.[F6]
WCont.[e9] = WCont.[90] - WCont.[e6]
NMin = 0
Restarta
End Sub

Sub Restarta()
If NMin >= WCont.[p6] Then FlExec = False: Exit Sub
WCont.[e6] = WCont.[p6] - NMin
WCont.[G6] = WCont.[e6] / WCont.[F6]
WCont.[e9] = WCont.[90] - WCont.[e6]
WCont.Calculate
NMin = NMin + 1
Application.OnTime Now + TimeValue("00:01:00"), "Restarta"
End Sub

Sub Pulsante2_Clic()
NMin = WCont.[p6]
End Sub


grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi Flash30005 » 02/05/12 07:32

Mi sono accorto che la macro si ferma a (rimanenti) 1 minuto e non a 0 minuti e ho quindi apportato delle modifiche oltre a inserire il contatore secondi quindi in Public va aggiunta una variabile "IniT"
Codice: Seleziona tutto
Public FlExec As Boolean
Public NMin, IniT As Integer, WCont As Worksheet

in Restarta
Codice: Seleziona tutto
Sub Restarta()
IniT = Int(Timer)
'If NMin >= WCont.[D6] Then FlExec = False: Exit Sub  '<<<<<<<<<<< commentato perché fermava la macro a 1 minuto
WCont.[E6] = WCont.[D6] - NMin
If WCont.[E6] = 0 Then FlExec = False: Exit Sub  '<<<<< aggiunta questa riga codice che ferma a zero
WCont.[G6] = WCont.[E6] / WCont.[F6]
WCont.Calculate
Call TTimer  '<<<<<<<<<<<<< aggiunta riga codice che conta i secondi con apposita macro
NMin = NMin + 1
Application.OnTime Now + TimeValue("00:01:00"), "Restarta"
End Sub


Macro per i secondi
Codice: Seleziona tutto
Sub TTimer()
If WCont.[E6] <= 0 Then Exit Sub
[G9] = 60 - (Int(Timer) - IniT)
Application.OnTime Now + TimeValue("00:00:01"), "TTimer"
End Sub


Modificato comando Stop
Codice: Seleziona tutto
Sub Pulsante2_Clic()
WCont.[E6] = 0
NMin = WCont.[D6]
FlExec = False
End Sub


Ciao

Edit ore 9:00 - Modificato Comando Stop
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: divisione a cronometro

Postdi raimea » 02/05/12 07:56

ho fatto le varie modifiche
ora mi si blocca subito qui:
Codice: Seleziona tutto
Sub Restarta()
IniT = Int(Timer) '<<< mi si blocca qui mi da errore run tim 6
WCont.[E6] = WCont.[D6] - NMin
If WCont.[E6] = 0 Then FlExec = False: Exit Sub
WCont.[G6] = WCont.[E6] / WCont.[F6]
WCont.Calculate
Call TTimer  'serve a vedere scendere secondi
NMin = NMin + 1
Application.OnTime Now + TimeValue("00:01:00"), "Restarta"
End Sub

di questo mi ero accorto
Mi sono accorto che la macro si ferma a (rimanenti) 1 minuto e non a 0 minuti

ma non volevo fare troppo il pignolo comunque grazie anche di questa correzzione 8)
grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: divisione a cronometro

Postdi Flash30005 » 02/05/12 08:03

si perché avendo dichiarato IniT integer va in errore quando il timer supera 32.000
quando l'ho provata io era più presto
(sai che timer corrisponde ai secondi dalla mezzanotte, vero?)
quindi devi dichiarare, in Public, IniT As Long
Codice: Seleziona tutto
Public NMin As Integer, WCont As Worksheet, IniT As Long


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: divisione a cronometro

Postdi raimea » 02/05/12 08:13

:-?
(sai che timer corrisponde ai secondi dalla mezzanotte, vero?)

no non lo sapevo...


ho sistemato le intestazioni
Codice: Seleziona tutto
Public NMin As Integer, WCont As Worksheet, IniT As Long


ma ora la macro non parte piu'.... mette subito zero in E6...

Codice: Seleziona tutto
Sub Pulsante1_Clic()
If FlExec = True Then Exit Sub
FlExec = True

Set WCont = Sheets("Cronometro")
ActiveSheet.Unprotect
 
WCont.[G6] = WCont.[p6] / WCont.[F6]
WCont.[e9] = WCont.[90] - WCont.[E6]
NMin = 0
Restarta
End Sub

Sub Restarta()
IniT = Int(Timer)
WCont.[E6] = WCont.[D6] - NMin  <<<< qui va scritto P6
If WCont.[E6] = 0 Then FlExec = False: Exit Sub
WCont.[G6] = WCont.[E6] / WCont.[F6]
WCont.Calculate
Call TTimer  'serve a vedere scendere secondi
NMin = NMin + 1
Application.OnTime Now + TimeValue("00:01:00"), "Restarta"
End Sub

Sub TTimer()
If WCont.[E6] <= 0 Then Exit Sub
[G9] = 60 - (Int(Timer) - IniT)
Application.OnTime Now + TimeValue("00:00:01"), "TTimer"
End Sub

Sub Pulsante2_Clic()
WCont.[E6] = 0
NMin = WCont.[D6]
FlExec = False
End Sub


trovato il piccolo errore
Sub Restarta()
IniT = Int(Timer)
WCont.[E6] = WCont.[D6] - NMin <<<< qui va scritto P6
ora funziona grazie...
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "divisione a cronometro":


Chi c’è in linea

Visitano il forum: Nessuno e 26 ospiti