Condividi:        

Richiesta macro temporizzata

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

Richiesta macro temporizzata

Postdi enzofox » 03/10/10 14:10

Nell'occasione voglio salutare a tutti i menbri del forum
Passo alle due mie domande
1) Avrei bisogno di una macro temporizzata che, leggendo dei dati da una fonte DDE, mi elenca ogni 15 minuti,o variabile tipo 5, 15, 30 , in una colonna A per circa 4000 celle.
Siccome ho bisogno di Open- Max-Min-Close-Volumi, servirebbe il tutto per 5 colonne, nel modo che si possono elencare
A=Open B=Max C=Min D=Close E= Volumi.


2) Aprendo dei file txt, i quali mi danno i valori con separatori decimali con la virgola,avrei bisogno di convertirli
in automatico con separatori decimali con il punto Esempio io ho Fiat 10,21 mi serve convertitre in 10.21.

Vi ringrazio anticipatamente per gli aiuti che sono sicuro che arriveranno.Faccio una premessa non so scrivere un solo rigo di codice................
enzofox
Newbie
 
Post: 2
Iscritto il: 18/08/08 21:46

Sponsor
 

Re: Richiesta macro temporizzata

Postdi Anthony47 » 03/10/10 16:02

Ciao enzofox e benvenuto nel forum.
Abbiamo gia' avuto discussioni che trattavano della storicizzazione di dati ottenuti tramite dde link, ad esempio:
viewtopic.php?f=26&t=81686
viewtopic.php?f=26&t=84343
Il mio suggerimento e' che fai una macro che, tramite il metodo OnTime salva i dati ogni minuto, come descritto nel primo link sopra.

Per il secondo problema, quando apri il file txt gli fornsci le "istruzioni" per mappare ogni riga nelle celle excel; bene, nello step 3 di 3 premi Avanzate e potrai impostare anche quale e' il separatore decimale dei numeri.

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

Re: Richiesta macro temporizzata

Postdi enzofox » 03/10/10 20:12

Antonio nel ringraziarti della risposta,nonostante oggi è domenica, ti rendo noto che non è per scarsa volonta, ma proprio non sono capace di una sola iniziativa.Ho provato a rieleggere i vari passaggi fatti ne precedenti pront., ma nada de nada.A questo punto puoi dire ''a me che mi frega o che vuoi tu da me?'' hai ragione.
Volevo se ti è possibile una macro gia compilata.

Un saluto
enzofox
Newbie
 
Post: 2
Iscritto il: 18/08/08 21:46

Re: Richiesta macro temporizzata

Postdi Anthony47 » 04/10/10 15:14

La macro e' questa:
Codice: Seleziona tutto
Sub Restarta()
Sheets("Foglio1").activate   '<<< Il foglio dove si trovano i dati DDE
CellaFlag = "M1"     '<<<-- Cambiare se necessario
DeltaT = "00:15:00"  '<<< restart ogni 15 minuti; cambiare se necessario
'
Range("A2:E2").copy      '<<< Le celle con i dati da storicizzare
'Storicizza A2:E2 su Foglio2; cambiare se foglio diverso
Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, _
   Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

If Range(CellaFlag).Value = 0 Then
Range(CellaFlag).Interior.ColorIndex = xlNone
Exit Sub
End If
Application.OnTime Now + TimeValue(DeltaT), "Restarta"
Range(CellaFlag).Interior.ColorIndex = 3   '<<< 3=ROSSO; 4=Verde; 6=Giallo;7=Fucsia; 8=Celeste
'Range("N1").Value = Range("N1").Value + 1
End Sub

Questa presuppone che i dati dde siano in A2:E2 di Foglio1, e copia i dati in Foglio2, in coda ai dati preesistenti; puoi cambiare nella macro sia il nome del foglio di partenza che quello di destinazione, che le celle da storicizzare; basta rispettare la sintassi.

Uso:
Da excel fai Alt-F11: ti si apre l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di destra. Fai le modifiche che servono (nomi fogli, indirizzo di celle, frequenza di salvataggio).
Torna su excel; visualizza la barra degli strumenti Moduli e cerca l' icona del Pulsante. Disegna un pulsante sul tuo foglio e assegnagli la macro Restarta (ti fara' una domanda specifica mentre crei il pulsante).
Ora scrivi 1 in M1, poi premi il pulsante: la macro viene eseguita una volta e viene rischedulata per esecuzione dopo 15 minuti (magari per prova, nella macro usa DeltaT = "00:00:10", in modo da eseguirla ogni 10 secondi); vedrai la cella M1 colorata di Rosso ed N1 che incrementa ad ogni esecuzione della macro.
Quando vuoi fermare, cancella il contenuto di M1: alla prossima esecuzione il colore scomparira', per indicare che il processo e' finito.

Tutte queste prove da fare tassativamente su file di prova, che siano COPIA dei file effettivi di lavoro.

Spero che queste informazioni siano di qualche utilita'.

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

Re: Richiesta macro temporizzata

Postdi s3ss » 15/11/10 20:40

Salve a tutti e GRAZIE a tutti coloro che dedicano il proprio tempo ad aiutare gli altri.
Ma i miei più sentiti ringraziamenti li faccio a Antony, Flash e Alexandra... perchè è grazie a loro (gli altri non si offendano)... dicevo e grazie a loro che finalmente sono riuscito a fare cose che prima mi stressavano. (mi stressano anche ora ma un pò meno).
Cmq per non annoiarvi volevo chiedervi se mi davate un piccolo aiuto...
s3ss
Utente Junior
 
Post: 25
Iscritto il: 11/11/10 14:19

Re: Richiesta macro temporizzata

Postdi s3ss » 15/11/10 20:54

scusate ho fatto invia. Cmq dicevo ho modificato leggermente il codice perchè a me non serve temporizzata... ma serve al variare del valore del DDE

Codice: Seleziona tutto
Sub RestartaMOD()
Sheets("Foglio1").Activate   
CellaFlag = "G1"     

Range("C2:E2").Copy
Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

If Range(CellaFlag).Value = 0 Then
Exit Sub
End If
Range("G2").Value = Range("G2").Value + 1
End Sub


la riga che non so modificare è questa
Sheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

mi servirebbe che le celle copiate nel range(c2:e2).copy
venissero incollare dalla riga 12 in poi con range(c12:e12)

e poi perchè Applixation.CutCopyMode=False?

Grazie ancora
s3ss
Utente Junior
 
Post: 25
Iscritto il: 11/11/10 14:19

Re: Richiesta macro temporizzata

Postdi s3ss » 15/11/10 21:09

VI AMO
anche se non so come ma il foglio sta facendo quello che voglio MAGIA.

ho sostituito Cells(Rows.count,3) invece di Cells(Rows.count,1) e poi è bastato scrivere qualcosa nella riga 11 che l'accodamento comincia dalla riga 12

SIETE MAGHI

GRAZIEEEEEEEEEEE
s3ss
Utente Junior
 
Post: 25
Iscritto il: 11/11/10 14:19

Re: Richiesta macro temporizzata

Postdi s3ss » 15/11/10 21:50

lo so sto rompendo. Ma avrei un altra domanda da fare.
Perchè se cambio foglio smette di aggiornare l'accodamento.
mentre quando seleziono foglio1 ricomincia da dove si era fermato?
Mentre se porto in primo piano un altra applicazione ma con foglio1 attivato funziona.
Ma se invece appro due file excel che entrambi utilizzano il DDE non si capisce più niente.

:(
s3ss
Utente Junior
 
Post: 25
Iscritto il: 11/11/10 14:19

Re: Richiesta macro temporizzata

Postdi s3ss » 15/11/10 23:35

HO scoperto ANCH'IO che il forum ti da' un prototipo funzionante, non un prodotto finito...

http://www.pc-facile.com/forum/viewtopic.php?f=26&t=81686

Anthony se non ci fossi tu a farmi ridere a quest'ora sarei già fuso.
(Ho letto una 30ina di post e mi sta scoppiando la testa)
Forse domani se non mi vengono i tick potro dire di aver imparato qualcosa stasera.
E forse sarà meglio cominciare dall'inizio.

SCUSATE PER TUTTI I POST INUTILI CHE HO SCRITTO
s3ss
Utente Junior
 
Post: 25
Iscritto il: 11/11/10 14:19

Re: Richiesta macro temporizzata

Postdi Flash30005 » 16/11/10 00:05

Ciao S3ss e benvenuto nel Forum

Io non direi questo
s3ss ha scritto:SCUSATE PER TUTTI I POST INUTILI CHE HO SCRITTO


Stai mettendo a dura prova te stesso per imparare e... solo così si impara!
Bravo!!!!

Solo un consiglio:
quando raggiungi questo stato
s3ss ha scritto:Ho letto una 30ina di post e mi sta scoppiando la testa)

allontanati dal Pc fai una passeggiata, prendi aria fresca (respirala profondamente), pensa ad altro per una decina di minuti poi, sempre all'aperto, prova a ripensare a cosa non avevi capito o al perché non ti funzionava quella certa cosa...
Sono sicuro che troverai la soluzione ancor prima di tornare davanti al Pc. ;)

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: Richiesta macro temporizzata

Postdi Anthony47 » 17/11/10 02:15

Vedo che hai fatto da solo un sacco di cose, bravo.
s3ss ha scritto:Perchè se cambio foglio smette di aggiornare l'accodamento.
mentre quando seleziono foglio1 ricomincia da dove si era fermato?
Mentre se porto in primo piano un altra applicazione ma con foglio1 attivato funziona.
Ma se invece appro due file excel che entrambi utilizzano il DDE non si capisce più niente.

Vorrei capire se queste domande sono ancora attuali o sono state risolte dal messaggio che spiegava la differenza tra "prototipo funzionante" e "prodotto finito".

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

Re: Richiesta macro temporizzata

Postdi s3ss » 19/11/10 21:24

grazie per l'interessamente (W la monotonia)

mi spiego... il codice è il seguente

Modulo1:
Codice: Seleziona tutto
Sub Copia()
Cellaflag = "g1"
If Range(Cellaflag).Value = 0 Then
Exit Sub
End If
ThisWorkbook.Sheets("Foglio1").Range("C2:E2").Copy
ThisWorkbook.Sheets("Foglio1").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("F3").Value = Range("F3").Value + 1
End Sub


Foglio1(Foglio1):
Codice: Seleziona tutto
Sub DDE()
ActiveWorkbook.SetLinkOnData "DDESXT|AP!'EUREX;FDAX1210;TIME'", "copia"
End Sub
..............................................................................................
Private Sub cmdAvvia_Click()
DDE
End Sub


-se minimizzo excel nella barra delle applicazioni funziona.
-se metto in primo piano un'altra applicazione (per esempio la piattaforma della banca, word, o altro) funziona.
-MA se invece metto foglio2 dove per esempio ci sono i grafici, se ritorno a foglio1 ricomincia ad accodare, perchè per tutto il tempo in cui sono stato su foglio2 e come se avesse smesso di aggiornare l'accodamento. Spero di essermi spiegato.

Come posso fare per far accodare i dati anche quando cambio foglio?
s3ss
Utente Junior
 
Post: 25
Iscritto il: 11/11/10 14:19

Re: Richiesta macro temporizzata

Postdi Anthony47 » 20/11/10 00:02

Prova modificando in
Codice: Seleziona tutto
If ThisWorkbook.Sheets("Foglio1").Range(Cellaflag).Value = 0 Then

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

Re: Richiesta macro temporizzata

Postdi s3ss » 22/11/10 12:34

SEI UN GRANDE... funziona benissimo :) GRAZIEEEEEEEEEEE

SMACK (virtualmente parlando) ;)
s3ss
Utente Junior
 
Post: 25
Iscritto il: 11/11/10 14:19


Torna a Applicazioni Office Windows


Topic correlati a "Richiesta macro temporizzata":


Chi c’è in linea

Visitano il forum: Nessuno e 38 ospiti