Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Macro per Storicizzazione DDE

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

Macro per Storicizzazione DDE

Postdi faaliopa » 18/08/09 11:26

Salve a tutti e scusate il disturbo,
non sono molto pratico di Macro Excel ma avrei l'esigenza di storicizzare dati provenienti da celle dde.
Per maggior completezza ho sulla prima riga del Foglio1 da A1 a A50 tutte celle DDE con numeri che variano ogni secondo.
Vorrei riuscire a creare una macro in modo che ogni secondo fossero scritti questi valori sulle righe in basso.
Es: in A2(a1 al t=0sec) , in A3( a1 al t=1sec) ecc ecc ecc cosi per tutte e 50 celle.
Qualora fosse possibile vorrei aggiungere 2 comandi in modo da:
1) interrompere e cancellare quanto scritto a partire dalla seconda riga ovviamente
2) riniziare a scrivere sempre dalla seconda riga.
Grazie e aspetto fiducioso.
faaliopa
Newbie
 
Post: 9
Iscritto il: 18/08/09 11:07

Sponsor
 

Re: Macro per Storicizzazione DDE

Postdi Anthony47 » 18/08/09 22:19

Ciao faaliopa e benvenuto nel forum.
Vedi se questa discussione ti chiarisce su come avere una macro rischedulata ogni X secondi: viewtopic.php?f=26&t=52172

Se le celle con i collegamenti dde sono nelle celle A1:A50 non capisco perche' vuoi usare le stesse celle per storicizzare il contenuto di A1; sul codice della macro pertanto mi astengo mentre spieghi bene come sono i dati e come vuoi storicizzarli.
Avrei anche da ridire sulla frequenza di rischedulazione, che mi pare eccessiva per la tipologia di dati, ma questa e' facilmente modificabile col codice del topic che ho linkato.

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: Macro per Storicizzazione DDE

Postdi faaliopa » 18/08/09 23:43

Grazie Anthony47,
correggo l'inesattezza e ringrazio anticipatamente:
le celle con collegamento dde sono A1:AX1 (50 celle sulla prima riga) e vorrei storicizzarle subito sotto per ogni secondo quindi con delta t = 1 sec in modo da avere A2:AX2 (t=0 sec) , A3:AX3 (t=1 sec) , A4:AX4 (t=2 sec) ecc ecc
per maggior precisione questi dati mi servirebbero per cicli di 5 minuti quindi con massimo 300 righe...

Ringrazio ancora e complimenti per il sito e per il forum!!
faaliopa
Newbie
 
Post: 9
Iscritto il: 18/08/09 11:07

Re: Macro per Storicizzazione DDE

Postdi Anthony47 » 19/08/09 23:37

Come impostare la macro per la sua ripetizione l' ho scritto nel post precedente. Ho previsto la presenza di una "cella flag" libera, in cui scrivi 1 o 0 per indicare Ripeti o Non_ripetere la macro (ho usato M1), e opzionalmente di una cella contatore che incrementi a ogni ripetizione (ho usato N1).
Poiche' penso sia poco pratico mettere la "cella flag" in AZ1 (prima cella libera su riga 1), suggerisco di inserire una riga aggiuntiva prima delle tue formule, che cosi' si troveranno in A2:AX2 e saranno copiate da A3 in basso; cosi' potrai usare M1 e N1 come gia' impostato nella macro.

Con le ultime informazioni fornite, e dando per assodato che le celle da copiare sono traslate su riga 2, modificherai la macro che ti ho linkato eliminando l' istruzione Calculate e al suo posto inserirai questa:
Codice: Seleziona tutto
Range("A2:AX2").Copy Destination:=Activesheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

Fai sapere dove arrivi, 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: Macro per Storicizzazione DDE

Postdi faaliopa » 20/08/09 10:52

Grazie mille anthony47 funziona alla grande.
Sarebbe possibile introdurre un metodo con il quale non scrive all'infinito ma a determinate condizioni cancella tutto cio che ha scritto e riparte da A3:AX3??
Spiego meglio: il dde in A2 varia da valore 0 a massimo 40 e puo' darsi che in 0 ci resti 20 secondi cosi' da avere 20 celle consecutive nella colonna A con valore 0. Poi piano piano il dde in A2 cresce fino a diventare massimo 40 (ma non e' fisso il valore comunque e' sempre positivo maggiore di 0) e poi torna con valore 0 e cosi' via ciclicamente.
E' possibile avere un metodo con il quale ogni volta che A2 passa da un valore positivo maggiore di 0 a 0 lui cancelli cio' che ha scritto prima(e' fondamentale che cancelli e non che riscriva sopra man mano) e rinizi a scrivere da A3:AX3 e cosi' via?

Grazie mille sei un grande!!!
faaliopa
Newbie
 
Post: 9
Iscritto il: 18/08/09 11:07

Re: Macro per Storicizzazione DDE

Postdi Anthony47 » 20/08/09 11:57

Per fare quello che chiedi:
-usiamo una nuova "cella flag" in O1 per indicare la scelta di azzerare e ripartire in caso di valore in A2 che torna a Zero;
-inserisci queste istruzioni subito prima di quella che ti ho dato ieri sera:
If Range("A2") = 0 And Cells(Rows.Count, 1).End(xlUp).Value > 0 And Range("O1") > 0 Then
Range("A3:AX" & Rows.Count).ClearContents
End If
In questo modo, se A2 assume il valore o, e se l' ultimo dato campionato era maggiore di 0, e se la cella O1 e' posizionata su >0, allora il range gia' scritto viene azzerato e riparte la storicizzazione.

Potrebbe esserti utile riguardare questa discussione di luca2002for, che tratta di come far partire una macro quando cambia un valore ottenuto tramite dde: viewtopic.php?t=46965; potrebbe aiutarti a impostare diversamente il tuo processo di raccolta dati.

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: Macro per Storicizzazione DDE

Postdi faaliopa » 20/08/09 14:02

Ciao e grazie ancora Anthony come al solito ormai.
Senti sto avendo con la macro di ieri alcuni problemi :
praticamente lui copia le celle ogni delta t a mio piacimento ma le copia con il collegamento dde e quindi ho tutte righe uguali... a me serviva che copiasse solo i valori (numeri) ogni delta t per storicizzarli. cosi mi cambiano e si fa solo una copia dei dde quindi tutte righe uguali..
ciao e grazie
faaliopa
Newbie
 
Post: 9
Iscritto il: 18/08/09 11:07

Re: Macro per Storicizzazione DDE

Postdi Anthony47 » 20/08/09 15:46

Eh gia'...
Non dobbiamo fare Copy/Paste ma Copy/Paste-special/Value.
Quindi invece di Range("A2:AX2").Copy Destination:=Activesheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) userai:
Codice: Seleziona tutto
Range("A2:AX2").Copy
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, _
   Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 Application.CutCopyMode = False

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: Macro per Storicizzazione DDE

Postdi faaliopa » 23/08/09 11:14

Caro Anthony47 grazie mille funziona alla grande,

solamente un'altra cosa: perche' la macro non viene eseguita solamente sul foglio del proprio file ma se apro un'altra pagina excel esegue la macro sulla pagina excel attiva???
E' come se la macro mi seguisse e smette apparentemente di lavorare apro altri file..
grazie mille
faaliopa
Newbie
 
Post: 9
Iscritto il: 18/08/09 11:07

Re: Macro per Storicizzazione DDE

Postdi Anthony47 » 23/08/09 19:57

Hai scoperto che il forum ti da' un prototipo funzionante, non un prodotto finito...
La macro che hai costruito lavora sull' Activesheet, cioe' il foglio attivo: qualsiasi Foglio di qualsiasi Workbook; per trasfomarlo in prodotto finito devi "semplicemente" irrobustirla per farla lavorare anche in situazioni meno semplici; tanto per cominciare devi sempre esplicitare il nome del Workbook e il nome del foglio su cui operare, sia nelle fasi di verifica delle impostazione delle "celle flag" sia quando decidi di copiare i dati.
Una certa semplificazione te la offre la proprieta' Thisworkbook, che restituisce sempre il riferimento al file che contiene la macro (quindi al file con i link dde), mentre per il foglio userai la proprieta' Sheets("NomeFoglio") invece di ActiveSheet, sia quando espressamente citato, sia quando manca un riferimento al foglio e quindi viene interpretato ActiveSheet come default.
Quindi, ad es. non Range("A2:AX2").Copy ma Thisworkbook.Sheets("Nomefoglio"). Range("A2:AX2").Copy

Rivedi la macro con queste lineeguida, e se hai domande posta ancora.

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


Torna a Applicazioni Office Windows


Topic correlati a "Macro per Storicizzazione DDE":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti