Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Private Sub Worksheet_Calculate()

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

[Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 18/06/14 13:34

ciao a tutti,
sono tornato per chiedere aiuto
ho un foglio con collegamenti dde e dopo letto molti post e testato molte cose, sono giunto alla conclusione che l'evento calculate è quello che fa x me.
di fatto mi servirebbe avviare una macro quando in una cella (risultato di una formula) il valore incrementa di 1 (0 nn fa niente mentre da 1 a max 10 avvia macro. i numeri della cella di riferimento possono solo incrementare)
in rete ho trovato questo che funziona con un loop infinito e non va bene

Private Sub Worksheet_Calculate()
code = Range("f1").Value
If Range("f1").Value = "1" Then
MsgBox "ciao"
End If
End Sub

ciao e grazie anticipatamente a tutti
gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Sponsor
 

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi ricky53 » 18/06/14 13:45

Ciao,
al volo ... prova con
Codice: Seleziona tutto
Private Sub Worksheet_Calculate()
    If Range("F1").Value >= 1 And Range("F1").Value <= 10 Then
        MsgBox "ciao"
    End If
End Sub


Si può utilizzare anche l'evento
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 18/06/14 14:01

x prima cosa , grazie :)
per quanto riguarda l' evento change, ti posso dire che nn funziona perchè con tale evento per calcolare il foglio devi farlo manualmente da tastiera.
invece per il tuo codice si presenta il medesimo problema che ho descritto nel post, ovvero il msgbox continua a looppare sullo schermo all' infinito probabilmente perche sono presenti link dde che refreshano il foglio. nn si potrebbe fare in modo di farlo apparire una sola volta?
gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi ricky53 » 18/06/14 14:10

Ciao,
ovviamente si devono gestire gli eventi !!!
Ed occorre conoscere quali azioni vengono fatte sul foglio in utilizzo
Ossia occorre l'istruzione che blocca gli eventi prova con
Codice: Seleziona tutto
Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
    If Range("F1").Value >= 1 And Range("F1").Value <= 10 Then
        MsgBox "ciao"
    End If
    Application.EnableEvents = True
End Sub

E' chiaro che tutto dipende dal resto del codice e dalle formule ?

Comunque anche con il change FUNZIONA, tutto dipende d quello che fai sul foglio !
Per attivare il "Calculate" cosa fai?
Premi "F9" o cambi il valore di una cella o ...
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 18/06/14 14:57

stesso problema. il msgbox compare ripetutamente per tutte le volte (credo) che nelle celle linkate a dde il valore cambia(ne sono tante).
la formula contenuta nella cella f1 è un semplice somma di una colonna.
x quanto riguarda il change come ti dicevo, l'ho provato ma purtroppo nn ricalcolando il foglio manualmente esso nn funziona. avevo utilizzato questo:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("f1").Value = "1" Then MsgBox "ciao1"
If Range("f1").Value = "2" Then MsgBox "ciao2"
If Range("f1").Value = "3" Then MsgBox "ciao3"
End Sub
funziona solo se inserisco qualcola nella cella e premo invio:(
gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi ricky53 » 18/06/14 15:03

Ciao,
il DDE fa cambiare le celle e quindi vengono attivati gli eventi.

Se invii un file di esempio arriviamo alla soluzione in modo certo e rapido.
Attenzione ai dati riservati.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 18/06/14 15:45

faccio un esempio qui di una riga del foglio1
a1= link a bloomberg real time del prezzo minimo
b1= mio prezzo limite
c1= =se(b1>a1;"1";"")
f1=somma della colonna cc


mentre Private Sub Worksheet_Calculate() l'ho inserito da vba nel foglio1. corretto?
gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi ricky53 » 18/06/14 16:54

Ciao,
come hai realizzato il link in "A1" ?

perchè utilizzi "1" tra apici ? In questo modo lo rendi "stringa" e NON numero. Toglili !

Il resto va bene.

A cosa ti serve la somma della colonna "C" ?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi scossa » 18/06/14 22:28

gio969 ha scritto:ho un foglio con collegamenti dde e dopo letto molti post e testato molte cose, sono giunto alla conclusione che l'evento calculate è quello che fa x me.


Secondo me sei giunto alla conclusione sbagliata: visto che si parla di DDE, suggerisco la lettura dell'help relativi ai metodi SetLinkOnData e LinkSources.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 19/06/14 09:34

per rispondere a ricky53, il link è un copia incolla di dati real time da bloomberg (ovvero una stringa) che chiaramente si aggiornano costantemente. il problema nn è bloomberg perchè ho provato anche su un altro sistema con stessi risultati. ho tolto anche gli apici il risultato è uguale. la colonna C è dove finiscono gli 1 che vengono sommati nella cella f1, cioè la cella che l' evento calculate dovrebbe "leggere".
per rispondere a scossa, non credo che le tue opzioni siano adatte alle mie esigenze perchè la "lettura" della cella che a me serve è un risultato di una formula, ovvero la somma degli eventuali numeri 1 contenuti nella colonna C (io ho fatto l' esempio con una riga ma in realtà ci saranno circa mille righe).
le mie conclusioni (parlo senza sapere programmare vba) sono che l'evento change nn "sente" la variazione (l'incremento) nella cella f1 fino a quando manualmente nn ricalcoli il foglio (scrivo in una cella e premo invio). quindi tale metodo nn va bene, perchè lo scopo è attivare una macro che invia una mail e chiaramente sul pc nn c'è nessuno:).
mentre per quanto riguarda l'evento calculate, che sembra funzionare perchè "sente" la variazione di f1, produce la controindicazione di inviare vagonate di mail perchè, secondo me, ad ogni variazione di prezzo dovuta ai link, l'evento "sente" il ricalcolo.
Non si potrebbe "dire" all' evento calculate una cosa del genere
se nella cella f1 trovi 0 nn fare niente
se nella cella f1 trovi 1 attiva macro una sola volta e poi annulla questa riga
se nella cella f1 trovi 2 attiva macro una sola volta e poi annulla questa riga
e cosi via fino a 10?

grazie ancora a tutti anticipatamente
gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi scossa » 19/06/14 12:50

gio969 ha scritto:per rispondere a scossa, non credo che le tue opzioni siano adatte alle mie esigenze ...

Credi male, ma senza il tuo file non posso dimistratelo.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 19/06/14 13:43

non voglio nn mettere il file, nn riesco a capire come si fa!! :) nn vedo opzione aggiungi file o carica file..
gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi ricky53 » 19/06/14 13:50

Ciao,

leggi QUI

oppure

utilizza un servizio di file hosting free come QUESTO



Cortesemente NON utilizzare il linguaggio degli SMS.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 19/06/14 13:59

gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi ricky53 » 19/06/14 14:38

Ciao,
non riesco a scaricare il tuo file.

Potrebbe dipendere dal sito che hai scelto ... o forse dal nostro FireWall.

Questa sera provo a casa.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi Anthony47 » 19/06/14 15:03

Dico la mia...
E' chiaro che l' evento Calculate capita in continuazione, quindi una macro che scatta su quell' evento scattera' in continuazione (tutte le volte che uno dei link dde segnala una variazione, se la macro non provoca a sua volta altri ricalcoli sul foglio).
Poiche' mi pare che tu voglia far scattare una macro tutte le volte che un titolo scende sotto un valore soglia, mi sembra anche debole esaminare la cella F1 (che potrebbe compensare tra titoli che salgono e titoli che scendono); bisognerebbe invece sondare il contenuto di ogni cella di colonna C.
Va anche impostato una isteresi per evitare che quotazioni al limite della soglia possano fa scattare in continuazione la macro (esempio, titolo GOOGL che va a 554.9, poi torna a 555.1 poi torna a 554.8; tutto nel giro di pochi secondi).

Cio' detto, mostro poco entusiasmo per l' utilizzo del Calculate, ma credo sia anche debole l' uso del SetLinkOnData, perche' gia' con 100 titoli la frequenza di aggiornamento dei link e' alta e (se il foglio e' sostanzialmente quello pubblicato) c' e' una corrispondenza 1:1 tra aggiornamento dati e Calculate.
Opterei invece per una macro OnTime che periodicamente (ogni 10 secondi? Ogni 30? Dipende "anche" dal tempo richiesto dal pc per il completamento della macro e l' invio della mail) controlla lo stato di ogni titolo e decide se l' evento va innescato o meno.
Tutto questo pero' dopo aver studiato il meccanismo di isteresi per evitare lo scatto in continuazione (situazione che comunque con la gestione OnTime diventa meno critica).
Immagino anche che l' obiettivo sia inviare 1 (una sola) mail con tutti i titoli andati ("moto a luogo", non "stato") sotto soglia.

Ciao a tutti.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 19/06/14 15:23

grazie a antony47 x l'interessamento. l' esempio che ho riportato si riferiva al last ma in futuro sarà applicato al px minimo. quindi significa che una volta segnato nn potrà mai tornare indietro, di conseguenza il numero dei titoli che "entreranno in prezzo" potrà soltanto aumentare e mai diminuire . quelli che a me interessano sono solo i primi 10 che chiaramente saranno ordinati in auto da macro. la soluzione che mi proponi mi va benissimo e l' intervallo può essere anche settato a 5 min.
grazie ancora
gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi Anthony47 » 19/06/14 23:50

Pero' sinceramente non ho capito su che cosa chiedi aiuto: tua domanda adesso e' "come si fa partire una macro ogni N minuti?"?
Se Si, allora lanci la tua macro (supponiamo che si chiami PIPPO) e come penultima istruzione prima di uscire inserisci
Codice: Seleziona tutto
Application.OnTime Now + TimeValue("00:05:00"), "PIPPO"  '<<< il formato che vedi in TimeValue è hh:mm:ss


Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi gio969 » 20/06/14 08:08

la richiesta è sempre la stessa :) la mia macro dovrà partire ad ogni incremento della cella f1 (da 0 fino a max 10) se poi nn sarà real time, ma come proponevi tu a intervalli prestabiliti, va bene uguale.
ciao e grazie
gio969
Utente Junior
 
Post: 40
Iscritto il: 31/05/12 11:20

Re: [Excel] Private Sub Worksheet_Calculate()

Postdi Anthony47 » 20/06/14 13:05

Allora:
1-Aggiungi in coda alla tua macro, prima dell' uscita, l' istruzione che ti ho dato ieri sera (Application.OnTime Now + etc etc)
2-Inserisci questa macro di WorkbookOpen
Codice: Seleziona tutto
Private Sub Workbook_Open()
    Call IlNomeDellaTuaMacro
End Sub
La devi inserire nel modulo vba ThisWorkbook/Questa_cartella_di_lavoro:
-da Excel, Alt-F11 per aprire l' editor delle macro
-nel frame di sinistra intitolato Progetto - VBAProject espandi il "VBAProject" riferito al tuo file di lavoro; vedrai l' elenco dei tuoi fogli, eventuali "Modulo" standard, ad esempio quello in cui hai inserito la tua macro, il modulo "ThisWorkbook"; doppioclick su ThisWorkbook
-copia il codice della Workbook_Open e incollalo nel frame vuoto di dx
-torna a Excel, salva il file, chiudilo e riaprilo
Da questo momento "la tua macro" partira' ogni nn ore:minuti:secondi come impostato nell' istruzione Application.OnTime Now + etc etc

C' e' anche il problema di fermare la schedulazione della macro; per questo ti suggerirei di leggere quest'altro messaggio: viewtopic.php?t=97447#p559514

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Private Sub Worksheet_Calculate()":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti