Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[excel] On time sballato

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] On time sballato

Postdi luca2002for » 13/11/09 23:23

Cari excelliani e soprattutto caro Anthony, un saluto.

Sto scontrandomi con una macro molto semplice, ma che forse ha messo a nudo i limiti di excel.

E' un semplice copia-incollavalori che dovrebbe partire ogni secondo, ma che invece esegue le operazioni a singhiozzo,
(a seconda delle dimensioni del foglio per esempio lo fa 5 volte alla distanza di tempo "giusta" e una sesta aspettando invece 1 secondo e mezzo) facendo perdere il senso alla routine eseguita.

La macro è questa

Codice: Seleziona tutto
Sub CTRLORDINE()

    StrWs = ActiveSheet.Name
    Application.ScreenUpdating = False
    Sheets("CTRL").Select
    Range("A22:L40").Select
    Selection.Copy
    Range("A42").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B1").Select
    Application.CutCopyMode = False
    Range("A1").Select
    Sheets(StrWs).Select
    Application.ScreenUpdating = True
    Application.OnTime Now + TimeValue("00:00:01"), "CTRLORDINE"
End Sub


Non mi pare faccia cose che impegnino troppo il foglio....eppure il modo con cui procede non è lineare ma irregolare.

C'è chi tra di voi sa spiegarmi che cosa regola l'on time? Non credo sia l'orologio di windows (se no forse anche il tempo di sistema sarebbe sballato).

Forse sapendo da che "metronomo" excel prende il ritmo della schedulazione forse potrei azzardare delle ipotesi sul perchè ci sono queste aritmie.

Grazie per ogni suggerimento che possa aiutarmi.

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Sponsor
 

Re: [excel] On time sballato

Postdi Anthony47 » 14/11/09 03:19

Ciao Luca, bentornato.
Excel non e' un sistema che da' garanzia del realtime (come Windows, d' altra parte), giacche' il tempo richiesto da una operazione dipende da cosa sta' facendo di altro in quel momento il pc.

Potresti migliorare qualcosa rischedulando la macro all' inizio e non alla fine (così la svincoli dal tempo di esecuzione delle istruzioni) e migliorando il codice; sequenze come questa
Sheets("CTRL").Select
Range("A22:L40").Select
Selection.Copy
Range("A42").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
sono equivalenti a questa:
Codice: Seleziona tutto
Sheets("CTRL").range("A22:L40).Copy
Sheets("CTRL").range("A22:L40).PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Mentre queste le potrai eliminare:
Sheets("CTRL").Select , Range("B1").Select , Range("A1").Select , Sheets(StrWs).Select

Volendo puoi farti un' idea di come gira il tutto, accodando su due colonne libere il timer di avvio e fine di ogni ciclo di macro (qualcosa come Cells(Rows.count, 10).End(XlUp).Offset(1,0)=timer all' inizio della macro per mettere in col J il tempo di inizio, e una cosa analoga come ultima istruzione sulla colonna 11=K), cosi' da capire se il problema e' sulla durata o sulla frequenza.

Dovresti anche stare attento che e' facile trovarsi con la macro schedulata N volte; metti un contatore in una cella visibile e controlla con che frequenza si incrementa (il +1 lo devi ovviamente fare nella macro); io uso in genere un flag nel foglio di lavoro con cui arresto la schedulazione [tipo If [M1]=1 Application.OnTime Now + TimeValue("00:00:01"), "CTRLORDINE", se M1 e' la cella flag]; in questo modo arresto tutte le schedulazioni in corso, evitando di accumularle.

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] On time sballato

Postdi Flash30005 » 14/11/09 04:01

Proprio poco fa ho inviato a Gollum una macro per una Query web "dinamica"
Macro che forse potresti adattare alle tue esigenze
prova a leggere qui

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] On time sballato

Postdi luca2002for » 14/11/09 12:24

Caro Anthony,

Ti ringrazio della risposta come sempre intelligente ed efficace, che mi ha aperto la mente.

Ci sono tre cose che hai detto che mi hanno fatto molto riflettere.

1-Excel non e' un sistema che da' garanzia del realtime (come Windows, d' altra parte)
2-Il tempo richiesto da una operazione dipende da cosa sta' facendo di altro in quel momento il pc.
3-Potresti migliorare qualcosa.

Hai, con la consueta sintesi geniale, fotografato problema e possibili soluzioni.

Mi trovo davanti a un sistema per sua natura non preciso (excel e windows), che può essere ulteriormente disturbato da eventi occasionali, ma posso migliorare il mio foglio di lavoro affinché questo succeda il meno possibile.

Eliminare, quindi, tutto ciò che disturba e migliorare il mio foglio, sono gli obbiettivi.

Oggi ho quindi “sfrondato” al massimo il foglio (da 50 mega a 7 non è una cosa da poco) e ho deciso di fargli fare una serie di test cercando di “giocare” tra alcune variabili, relativa al funzionamento del computer, che, in teoria, possono incidere sulla performance.

Le variabili sono queste:

- quantità dei processi in avvio
- abilitazione/disabilitazione file di paging
- impostazione da task manager di excel come processo al alta priorità (o addirittura in tempo reale)
- uso contemporaneo o meno di altri programmi (explorer, messaggistica, altri programmi di office)
- da proprietà del sistema, prestazioni, utilizzo o meno della configurazione più premiante sotto il profilo prestazionale.

Premetto che sul foglio sono presenti una serie di controlli che mi danno in real time la misura della performance-tempo della macro che ho postato (in termini di a)-valore massimo della distanza tra due rilevazioni b)-quantità totale ed in percentuale rispetto alle secondi passati fino ad ora delle distanze > 1,2 secondi o < 0,8 secondi) c)-misurazione in centesimi di secondo media della somma degli scostamenti). Questo per dire che ho abbastanza sotto mano, in ogni momento, la misura della performance del foglio.

Così ho cominciato a fare test, facendo girare il foglio e cambiando le variabili.

Ma è successa una cosa inaspettata. Lo stesso foglio, alle stesse condizioni, su un percorso di prova di 500 secondi e sottoposto a 2 test consecutivi,

- nel primo test è andato magnificamente
- nel secondo test (e non era cambiato assolutamente niente da nessun punto di vista) ha avuto risultati molto scarsi e un’aritmia visibile a occhio nudo ogni 3 secondi).

Quindi mi sono fermato. Ho scoperto qualcosa anche se non so cosa. Ma è inutile fare test se essi non sono probanti perché danno risultati diversi ogni volta che vengono compiuti.

La mia idea è che ci sia un’applicazione da qualche parte che disturba excel, anche lei evidentemente in qualche modo “on time” (i disturbi e le aritmie sono ciclici, ogni 3 secondi) ma che non è costantemente attiva (se no non si spiegherebbe come mai il primo test è andato a buon fine ed il secondo no).

Per caso ti viene qualche ispirazione? Penso che in ogni caso l’extrema ratio, visto che le cose stanno così, sia formattare e installare poi solo lo stretto necessario (sperendo che tra queste cose non ci sia questa fantomatica applicazione che disturba l’on time di excel).
Ti farò sapere in ogni caso come vanno i test e colgo l’occasione per fare l’in bocca al lupo e le mi congratulazioni a Flash (che ringrazio e di cui leggerò la risposta) per il nuovo ruolo assunto all’interno di questo (splendido) forum.

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Re: [excel] On time sballato

Postdi Anthony47 » 14/11/09 12:51

Nella sezione Sistemi Operativi Windows penso ti potranno dare suggerimenti su come migliorare la performance del sistema.
A titolo informativo, puoi anche tenere sotto controllo il consumo di Cpu tramite task manager, teneno presente che questo parametro non e' l' unico indicativo della velocita' della macchina (un esempio banale: mentre fa swap in memoria virtuale, la cpu si rilassa ma i processi rallentano alla grande); ma magari scoprirai che certe parti del tuo foglio consumano piu' cpu che altri; non sorridere: se sullo schermo ad esempio hai dei grafici vedrai la cpu andare su, se li hai fuori dallo schermo ndra' giu'... E' solo un esempio di come le cose variano pesantemente con poco.

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] On time sballato

Postdi Flash30005 » 15/11/09 02:19

Ciao Luca e grazie per l'augurio ;) (spero solo di essere all'altezza....)

Ho testato la tua macro e... "non fa una piega"
dalla barra di stato la dicitura "Pronto" non presenta aritmie
ho voluto provare la macro che avevo postato nel link suggerito (codice preso dalla guida di excel) e ho ottenuto lo stesso risultato (con tutti i difetti che ha la funzione Timer e il loop) però ho notato un miglioramento (la dicitura "Pronto" sembrava quasi fissa) aggiungendo l'opzione calcolo manuale all'inizio del ciclo e ripristinandolo alla fine
Codice: Seleziona tutto
    Sub CTRLORDINE()
inizio:
    StrWs = ActiveSheet.Name
    Application.ScreenUpdating = False
    Application.Calculation = xlManual   '<<<<< aggiunto
    Sheets("CTRL").Select
    Range("A22:L40").Select
    Selection.Copy
    Range("A42").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B1").Select
    Application.CutCopyMode = False
    Range("A1").Select
    Sheets(StrWs).Select
    Application.ScreenUpdating = True
    PauseTime = 1
    Start = Timer
    Do While Timer < Start + PauseTime
        DoEvents
    Loop
Calculate         '<<<<<<<<<<<<<<< aggiunto
    GoTo inizio
 '   Application.OnTime Now + TimeValue("00:00:01"), "CTRLORDINE"
Application.Calculation = xlCalculationAutomatic      '<<<<< aggiunto

End Sub


I suggerimenti di Anthony, riguardo la non selezione di altri fogli durante il processo, sono sempre molto validi e se per te non è un'esigenza visualizzare il foglio attivo, diverso da "CTRL", al momento dell'avvio della macro è bene che tu li metta in pratica modificando la macro che ho postato e che ho lasciato nella sua integrità.

Fai sapere come è andata sul Pc con "problemi"

Ciao

P.s. se l'opzione calcolo manuale è risolutiva cancella tutto il codice relativo al Timer/loop e ripristina anche l' OnTime in quanto è una funzione sicuramente più adeguata per l'utilizzo che ne fai
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] On time sballato

Postdi luca2002for » 16/11/09 12:05

Grazie delle risposta e dei consigli Flash :-)

Ho messo in pratica i Tuoi suggerimenti e quelli di Anthony relativi alla parte VBA del foglio, ma non ho avuto
apprezzabili miglioramenti (in certi test effettuati la performance è addirittura peggiorata).

Allora, preso da frustrazione (tenuto conto che copie del file che giravano discretamente a ottobre e "ripescate"
adesso per sottoporle a test, ora vanno nettamente peggio), ho ritenuto che fosse qualcosa che ho installato da
ottobre a ora a causare il problema. Quindi ho formattato e installato un versione molto "light" della mia macchina
(solo windows, driver scheda madre e scheda video ed excel).

Risultato: sempre incremento a "singhiozzo" delle celle....

Ho fatto, allora, un'altra prova. Lanciato un test con excel aperto ma piattaforma java (quella da cui prendo i dati
DDE) chiusa. Il miglioramento è stato notevolissimo....

Quindi probabilmente il problema sta nel fatto che se piattaforma java ed excel sono aperte insieme questo reca "da
qualche parte" fastidio a excel nella corretta rischedulazione della macro on time.

Se questo è il problema la soluzione trovata in fase test è inapplicabile. Non posso lavorare con la piattaforma chiusa perchè a quel punto non avrebbe neanche senso adoperare excel.

Almeno adesso posso, però, cercare di trovare qualche informazione circa questa (verosimilmente) infausta interazione
tra excel e java.

Grazie mille :-) ....proseguo le ricerche
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Re: [excel] On time sballato

Postdi luca2002for » 16/11/09 14:14

Da un ultimo test, posso aggiungere che (se il fatto può costituire un indizio significativo per qualcuno)
anche a piattaforma di java chiusa, la distanza temporale (espressa in secondi) tra l'esecuzione
di una macro e l'altra ha questo tipo di andamento:

Codice: Seleziona tutto
1,13
1,12
1,13
0,59


(Cioè passano 1,13 secondi dall'esecuzione n a quella n+1 e poi passano 1,12 dall'esecuzione n+1
a quella n+2, ecc. fino ad arrivare all'ultimo intervallo di poco più di mezzo secondo. Poi il ciclo si
ripete).

Grazie mille

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Re: [excel] On time sballato

Postdi Flash30005 » 17/11/09 01:25

Ho notato che i fogli di excel con i copia e incolla successivi (anche sugli stessi campi) comportano un "appesantimento" del foglio e diminuzione della velocità di esecuzione è come se le celle pur essendo sostituite da un altro dato mantenessero la "memoria".
Sono rimasto stupefatto quando per pulire un foglio ho usato .Clear invece che .ClearContents, la velocità di esecuzione è stata notevolmente migliorata (il clear cancella veramente tutto).
Nel tuo caso proverei a mettere una "pulizia" del campo destinazione prima di copiare/incollare l'intero range
con il codice clear dove indicato
Codice: Seleziona tutto
 
 Range("A42:A60").Clear      '<<<<< qui
 Range("A22:L40").Select
    Selection.Copy
    Range("A42").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False


Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] On time sballato

Postdi Anthony47 » 17/11/09 01:28

In aggiunta ai commenti di Flash (messaggio precedente)...
Non hai spiegato quando memorizzi il timer e quando scheduli la macro, e in ogni caso sarebbe stato piu' util avere il valore di timer e non il delta; questo perche' la schedulazione e' sempre "al secondo piu' prossimo". Quindi una delle possibili interpretazioni e' che segni il timer all' inizio macro, rischeduli a fine macro; significa che la macro dura circa 0.12 secondi; la quarta o la quinta volta il secondo viene calcolato per difetto e questo porta a quello 0.59 secondi. I quattro cicli descritti hanno preso 3.97 sec, solo 0.03 sec di differenza da teorico.

La piattaforma java e' quella che gestisce i link dde, ovvio che ha un impatto, che tra l' altro e' proporzionato al numero di formule che usano tale tipologia di link e, se hai utilizzato il metodo SetLinkOnData, anche da quanti cambiamenti ai dati di origine hai avuto in quel frangente.

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Scoperta (forse) importante

Postdi luca2002for » 17/11/09 12:04

Grazie mille delle risposte!

Ho fatto una scoperta mentre facevo un foglio di lavoro nuovo (pensando che il "bug" fosse nel foglio piuttosto che in una supposta carente performance di excel).

Se è vero che
"La funzione ADESSO apporta la modifica solo quando si ricalcola il foglio di lavoro o si esegue una macro contenente la funzione. L'aggiornamento non viene effettuato continuamente".


http://office.microsoft.com/it-it/excel/HP052091971040.aspx

allora c'è qualcosa nel mio foglio di lavoro (oppure in excel) che non va.

Mettendo la funzione ADESSO() in una cella, ho infatti notato che a foglio "fermo" (senza esecuzione di macro), e senza che io lo tocchi (inserendo dati per esempio). l'ora nella cella in cui ho inserito la funzione continua (seppure in maniera non fluida, ad intervalli di 1-2 secondi) a girare!

Questo sintomo mi pare importante. Non solo perchè è la prima volta che vedo un fenomeno del genere (faccio da anni fogli di excel con la funzione "adesso" e in effetti ciò che si dice nel sito di Microsoft è vero: cioè l'ora rimane "congelata" e non si aggiorna finchè non si apportano modifiche al foglio). Ma anche perchè questa ora che si aggiorna potrebbe essere la testimonianza di un "qualcosa" che in qualche modo "attiva" excel (come se appunto un utente modificasse in ogni momento il foglio, attivando a sua volta il funzionamento dell'orologio).

Se trovo questo qualcosa e riesco ad eminarlo, ho la netta impressione che il foglio girerà (se non alla perfezione) molto meglio.

Mi rimetto al lavoro per vedere di rispondere nella maniera più precisa ai Vostri quesiti, ma ho intanto postato perchè forse questo sintomo potrebbe essere la vera spiegazione di tutti i problemi di imprecisione di on time che ho sperimentato.

Questo anche perchè i fogli che giravano ad ottobre (50 mega contro i 7 di adesso, con macro identiche) erano all'epoca molto più precisi, ma riaperti adesso dimostrano già dopo poche celle di arrancare in modo intollerabile.

Torno a fare test, grazie ancora per i suggerimenti e l'aiuto ;)

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

No..scusate

Postdi luca2002for » 17/11/09 12:25

Scusatemi ho scritto un stupidaggine....

L'orologio di adesso si aggiorna perchè c'è il collegamento DDE.

Quindi l'applicazione che tiene "attivo" l'aggiornamento dell'orologio è quella :oops:

Devo cercare altre strade, scusate se vi ho fatto perdere tempo.

Riprendo a fare il nuovo foglio di lavoro (la mia idea è che ci sia qualche "bug" da qualche parte nel vecchio che non riesco a trovare, quindi tanto vale ricrearlo ex novo sperando di non ripetere anche nel nuovo il bug del vecchio).

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Re: [excel] On time sballato

Postdi Anthony47 » 17/11/09 16:24

Ma non ricordi dopo quale evento il tutto si e' messo a salterellare? la piattaforma da cui importi i dati, e' in casa (quindi sai se ci sono state delle modifiche) o e' di un provider esterno (e allora non saprai mai...)?
E usi o no SetLinkOnData per attivare macro sui cambiamenti dei dati in input?
Non hai detto se rischeduli alla fine (quindi col ritardo dell' esecuzione) o all' inizio della tua macro (quindi teoricamente piu' "al ritmo").

Non sono vere domande, ma solo spunti per macerarsi sulla situazione.
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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] On time sballato

Postdi Flash30005 » 17/11/09 16:59

Anthony47 ha scritto:...Non sono vere domande, ma solo spunti ....


All'anima di spunti... :eeh:
hai fatto i Raggi X al problema :lol:

Una cosa che mi balena è:
stai usando sempre la stessa versione di excel (credo 2003) oppure sei passato ad office 2007?
Da prove fatte il 2007 per far "girare" una macro, a parità di condizioni, impiega circa 3 volte il tempo del 2003, per via della compressione degli oggetti.

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Macerazione in corso

Postdi luca2002for » 17/11/09 23:30

hehe "macerarsi"....ben detto.

Tutti belli spunti, graditi e per i quali ringrazio.

Non ricordo da quando il tutto ha cominciato a "salterellare". Ma per tagliare la testa al toro ho formattato, un paio di giorni fa, e adesso vivo con il software essenziale, proprio per capire se poteva essere stata qualche improvvida installazione (per esempio avevo provato e installato 4-5 programmi per avere l'ora esatta al secondo) a causare il problema. Ma col pc "light" le cose non sono cambiate.

Flash, uso (se non erro proprio su un tuo consiglio) excel 2003. Avevamo parlato del tema qualche mese fa e da allora sono ancora più affezionato all'accoppiata windows XP + office 2003.

Non uso setlinkondata (francamente non so esattamente cosa sia). L'unica macro importante del foglio è quella che ho postato e si attiva solo al trascorrere del tempo. Qualche anno fa avevo provato a seguire la strada dell'attivazione della macro al cambiamento della cella (con cella di partenza DDE) e avevo interessato proprio questo forum, ma poi, un pò per difficoltà tecniche e un pò per cambiamento di idee e strategie, ho preso un'altra strada.

Per quanto riguarda il momento della schedulazione della macro in realtà per motivi che sono connessi con l'architettura del foglio, mi serve che si situi alla fine del processo di calcolo. Devo dire che, a parte questo, ho fatto il lavoro di pulizia nel codice suggeritomi da Anthony.

Ammetto di essere ancora in alto mare. Oggi ho provato a far girare il foglio su un computer "terzo" (Intel core duo E 8400, 4 giga di RAM, Windows Vista, Office 2007) e i risultati sono stati appena leggermente migliori di quelli ottenuti con il mio pc.

Ops, sul'altro spunto di Anthony...la piattaforma java è esterna e gestita dal altri quindi (giustissima osservazione) può darsi che siano state fatte modifiche (ultimamente) che ne abbiano appesantito l'interazione con excel. Ho provato a sentire il fornitore del servizio ma occorrerà un pò di tempo prima che mi mandi un risposta definitiva al quesito per mezzo dell'area tecnica.

Qui ho inserito l'immagine della performance del foglio (una decina di minuti)

http://www.flickr.com/photos/44744297@N05/4112707649

Si vede come i "salti" siano abbastanza discontinui e la distanza tra macro e macro sia spesso >1,5 secondi o <0,5. La discontinuità più "ciclica" di cui ho parlato in un mio precedente post ce l'ho se faccio partire il foglio con piattaforma java chiusa.

Insomma....non sono ancora venuto a capo del problema. Ho reso il pc (formattazione) e il foglio ("sfrondamento" con passaggio da 50 a 7 mega, ripulitura delle macro) più leggeri. Ho verificato che il mio pc dovrebbe non avere problemi tali di hardware da giustificare questo tipo di ritardi. Ho fatto prove di performance disabilitando il file di paging e forzando le impostazioni per favorire la performance.

Ma...è qui è il problema...non ho ancora capito dove sta il problema. Vi ringrazio della consueta ma sempre stupefacente gentilezza con cui aiutate noi utenti inesperti, ma mi dispiace anche abusare della vostra pazienza se io per primo non riesco ad individuare con certezza l'origine del guaio. Farò delle ricerche sui meccanismi che presiedono al controllo dell'ora di excel e Vi terrò informati. Probabilmente è lì l'inghippo. Certo, da un punto di vista puramente logico questo mistero è un bel ginepraio perchè gli indizi non convergono su niente (pc, excel, java, mio foglio) ma si disperdono, facendo pensare ora ad una causa e ora ad un'altra.

Vi terrò informati :) grazie per il momento della gentilezza e competenza

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Re: [excel] On time sballato

Postdi Anthony47 » 18/11/09 02:12

SetLinkOnData e' il metodo per attivare una macro al cambiamento del valore di un link dde.

Il grafico ha una strana particolarita': si direbbe che alti e bassi si compensano (cioe' un alto e' seguito da un basso di delta comparabile). Secondo me potremmo avere un' idea piu' precisa memorizzando per una decina di minuti il timer a inizio e fine macro, in due colonne adiacenti; poi si calcolera' il ritardo tra una schedulazione e un' altra (riga2-riga1) e la durata di esecuzione (colonna1-colonna2). Se fai questa prova imposta pero' il delta di schedulazione su 3 secondi , e rischedula come prima istruzione, poi come seconda memorizzi il timer di inizio.

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] On time sballato

Postdi luca2002for » 18/11/09 19:02

Caro Anthony, grazie ancora per il continuo interessamento.

Ho fatto i test (100 misurazioni con macro a 3 secondi, per un totale di 5 minuti di celle).

Nel Test 1 http://www.flickr.com/photos/44744297@N05/4115484116/

ho tenuto chiusa la piattaforma java. L’andamento della schedulazione (ancorché a zig-zag come giustamente hai osservato) ha una certa regolarità, confermata dai valori di distanza in secondi tra una esecuzione e l’altra. Qui di seguito le prime 10 rilevazioni.

2,75
3,25
2,72
3,23
2,74
3,25
2,72
3,25
2,72
3,25

Nel Test 2 http://www.flickr.com/photos/44744297@N05/4114717817/

(sempre a 3 secondi) ho invece aperto in contemporanea la piattaforma java (e attivato il collegamento DDE). Il risultato è un grafico (sempre sballato) ma con un andamento più irregolare.
Si alzano anche, in valore assoluto, le distanze dei valori rispetto all’”ideale” 3.
Qui le prime 10 rilevazioni.

2,96
2,94
3,03
3,27
2,69
3,45
3,00
2,56
3,25
2,86


Temo che da questi dati non si possa dedurre un gran che..tranne che forse il metodo on-time non è contraddistinto da precisione. La prima rilevazione dimostra infatti che anche com il computer poco impegnato (java chiuso e CPU oscillante tra l’1 e il 4%) le rilevazioni non "battono” mai sui tre secondi ma sempre un po’ prima o un po’ dopo…

Grazie ancora

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Re: [excel] On time sballato

Postdi Anthony47 » 18/11/09 20:23

Temo che da questi dati non si possa dedurre un gran che..tranne che forse il metodo on-time non è contraddistinto da precisione. La prima rilevazione dimostra infatti che anche com il computer poco impegnato (java chiuso e CPU oscillante tra l’1 e il 4%) le rilevazioni non "battono” mai sui tre secondi ma sempre un po’ prima o un po’ dopo…
Non so che cosa ti aspettavi, ma mi pare che il comportamento sia piu' che decoroso; assodato infatti che lo scheduling e' fatto "al secondo intero" e che tu attivi la macro in un momento imprecisato dell' intervallo tra un secondo esatto e quello successivo, avrai sempre una incognita di +/-0.5 sec, cosa che risulta dai grafici, da cui si deduce pure che quanto perso in un ciclo si recupera nel ciclo successivo (notare l' assoluta simmetria tra un ciclo e il successivo; ma questo potrebbe non succedere se la cpu fosse impegnata in altre applicazioni, infatti gia' attivando la piattaforma java le irregolarita' aumentano).
D'altra parte anche quando non fa niente la cpu qualcosa fa, e far partire un task non e' una cosa che si risolve in un battibaleno anche se il task e' gia' in memoria.
Tieni anche presente che se scheduli alla fine della macro, allora aumenti l' irregolarita', perche' alle incognite devi aggiungere il tempo di esecuzione della macro, che ti faranno perdere 1 clock ogni tanto.

Piu' di questo non so dire, salvo che si potrebbe anche provare a memorizzare in una variabile pubblica l' orario di scheduling (Public StartOrario as double) e il prossimo scheduling farlo su StartOrario + 1 sec; oppure avviare 5 scheduling a +1, +2, +3, +4 e +5, poi a ogni ciclo schedulare a StartOrario + 5.

Ma a questo punto la domanda sorge spontanea: quando e come fermi il tutto?

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] On time sballato

Postdi luca2002for » 18/11/09 21:16

si potrebbe anche provare a memorizzare in una variabile pubblica l' orario di scheduling


Grazie della risposta.

in effetti io probabilmente (se ho capito bene) questo lo faccio già. Infatti in testa a tutte le macro c'è una auto-open che prevede la "partenza" della macro alle 09:05:24

Codice: Seleziona tutto
Application.OnTime TimeValue("09:05:24"), "modulo1.CTRLORDINE"


Quindi teoricamente la macro dovrebbe partire al secondo esatto (per la precisione mi riferisco alla macro che parte tutte le mattine e non a quelle dei test e relativi grafici qui postati per la quale effettivamente il discorso del tempo X tra un secondo e l'altro è valido perchè la aziono tramite un pulsante).

(Tant'è che leggendoTi mi era venuta l'ispirazione di scrivere
Codice: Seleziona tutto
Application.OnTime TimeValue("09:05:24,00", "modulo1.CTRLORDINE"
per "obbligare" excel a tenere sempre il passo di un secondo).

Ma, in ogni caso non è che io mi aspettassi dal foglio la precisione assoluta. E' che tra dati calcolati nel giro di 1,5 secondi (come ipotesi purtroppo spesso verificatasi di "massima" distanza tra due celle) e dati calcolati nel giro di mezzo secondo (come minimo di distanza) ci sono differenze tali da far perdere significato al loro confronto.

Ma proprio perchè il problema è in qualche modo "nuovo" (con il foglio più pesante un mese fa non mi accadeva, o meglio questa problematica non era così "pesante") evidentemente o ho combinato qualcosa io oppure la macchina che sto usando si è deteriorata. E' l'ultima alternativa alla quale posso lavorare, quantomeno per ripristinare lo status ante.

Ti ringrazio ancora, questo è l'unico posto che io conosca dove persone esperte prendono realmente a cuore i casini che noi neofiti riusciamo a creare, anche in termini di poca chiarezza nell'esposizione dei problemi o di idee mirabolanti che però alla prima verifica si dimostrano sbagliate :lol:

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Re: [excel] On time sballato

Postdi Flash30005 » 18/11/09 22:31

Luca,
segui tutti i consigli di Anthony (un vero esperto in questo settore)
io posso solo riportare alcune mie esperienze con i fogli di excel:
lo stesso programma ad un certo punto impiegava sempre più tempo ad effettuare l'elaborazione fino a che non riuscivo più ad accedere al foglio: all'apertura del file, clessidra, messaggio errore della Microsoft e inevitabile era la combinazione dei tasti CTRL+Alt+Canc.
Ho risolto salvando le macro in una nuova cartella e adottando altri accorgimenti che riporto qui di seguito.
Quindi, se puoi, riversa tutte le macro in una nuova cartella con fogli "vergini" senza alcuna formattazione (o la minima necessaria) evita la formattazione condizionale di qualsiasi cella, cancella sempre, tutto ciò che scrivi e riscrivi con la macro, usando Range(TuaArea).Clear (non ClearContent) e fai il test avviando la macro.

Al momento non so darti altri consigli
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[excel] On time sballato":


Chi c’è in linea

Visitano il forum: Marius44 e 77 ospiti