reef
...
In risposta ad un utente su un altro 3D, in caso interessasse.
DOMANDA: "Ciao Reef anche io avrei necessità di prendere i dati a 15 min dal dde di fineco in particolare ftse mib e fib questo per aggiornare in tempo reale i miei grafici ciclici su excel"
RISPOSTA
Ti passo le indicazioni per avere su un foglio ("DDE") i dati incrementali che arrivano ogni 5 sec e in un secondo foglio ("Storici") le chiusure ad un intervallo di tempo definito.
Con questa organizzazione puoi calcolarti banalmente anche i max e i min all'interno del time frame.
ISTRUZIONI
Devi creare un foglio che chiamerai DDE
Poi crei un pulsante "ATTIVA DDE" che colleghi a qusto codice:
==========================
Private Sub cmd_attivadde_Click()
Sheets("DDE").Range("b8").FormulaR1C1 = "=FDF|Q!'FIBZ0.NaE;Last"
Dim SorgentiDDE As Variant
SorgentiDDE = ActiveWorkbook.LinkSources(xlOLELinks)
Dim i As Integer
If Not IsEmpty(SorgentiDDE) Then
For i = 1 To UBound(SorgentiDDE)
ActiveWorkbook.SetLinkOnData SorgentiDDE(i), "SuArrivoDatiDDE"
Next i
Else
MsgBox "Nessuna Sorgente DDE Rilevata", vbExclamation, "Errore"
End If
End Sub
=================
Quando clicchi "ATTIVA DDE" nella cella B8 viene riportato il collegamento DDE, e vedi il dato che si aggiorna in tempo reale. Controlla il codice del dato "FDF|Q!'FIBZ0.NaE;Last" (FIB dicembre) che sia quello giusto, ora non posso testarlo.
Nella cella B9 metti la formula "=B8"
Per comodità fai anche un pulsante "DISATTIVA DDE" collegato a questo codice, serve a bloccare il flusso quando devi lavorarci su, altrimenti non capisci più nulla:
==================
Private Sub cmd_disattivadde_Click()
Sheets("DDE").Range("b8").FormulaR1C1 = ""
End Sub
==================
Fai un secondo foglio che chiamerai "Storici" che verrà automaticamente alimentato con i dati storici ogni 15 min, se vuoi altri TF devi cambiare la formula collegata al flag "fstor" e oldmin (al posto di 15 metti i minuti che vuoi). Puoi usare qualsiasi intervallo temporale.
Scrivi questa funzione nel modulo VBA del foglio:
========================
Public Sub SuArrivoDatiDDE()
Dim sTx As String
Static fstor, oldmin, oraold
'Ogni 5 sec salva il dato nella cella successiva
t = Time
riga = Second(t) \ 5
resto = Second(t) Mod 5
Sheets("DDE").Range("A11").FormulaR1C1 = oraold
ora5sec = TimeSerial(Hour(t), Minute(t), Second(t) - resto)
If (ora5sec > oraold) Then
Sheets("DDE").Range("A" & riga + 12).FormulaR1C1 = ora5sec
Sheets("DDE").Range("b" & riga + 12).FormulaR1C1 = Sheets("DDE").Range("b9").Value
oraold = ora5sec
End If
If (fstor = 1) And (Minute(t) \ 15 <> oldmin) Then fstor = 0
If fstor = 0 Then
riga = (Hour(t) - 8) * 60 + Minute(t)
If riga < 2 Then riga = 2
Sheets("Storici").Range("A" & riga).FormulaR1C1 = ora5sec
Sheets("Storici").Range("b" & riga).FormulaR1C1 = Sheets("DDE").Range("b9").Value
fstor = 1
oldmin = Minute(t) \ 15
End If
End Sub
===================
Già così dovresti avere tutto.
Se c'è altro chiedi pure. In bocca al lupo
DOMANDA: "Ciao Reef anche io avrei necessità di prendere i dati a 15 min dal dde di fineco in particolare ftse mib e fib questo per aggiornare in tempo reale i miei grafici ciclici su excel"
RISPOSTA
Ti passo le indicazioni per avere su un foglio ("DDE") i dati incrementali che arrivano ogni 5 sec e in un secondo foglio ("Storici") le chiusure ad un intervallo di tempo definito.
Con questa organizzazione puoi calcolarti banalmente anche i max e i min all'interno del time frame.
ISTRUZIONI
Devi creare un foglio che chiamerai DDE
Poi crei un pulsante "ATTIVA DDE" che colleghi a qusto codice:
==========================
Private Sub cmd_attivadde_Click()
Sheets("DDE").Range("b8").FormulaR1C1 = "=FDF|Q!'FIBZ0.NaE;Last"
Dim SorgentiDDE As Variant
SorgentiDDE = ActiveWorkbook.LinkSources(xlOLELinks)
Dim i As Integer
If Not IsEmpty(SorgentiDDE) Then
For i = 1 To UBound(SorgentiDDE)
ActiveWorkbook.SetLinkOnData SorgentiDDE(i), "SuArrivoDatiDDE"
Next i
Else
MsgBox "Nessuna Sorgente DDE Rilevata", vbExclamation, "Errore"
End If
End Sub
=================
Quando clicchi "ATTIVA DDE" nella cella B8 viene riportato il collegamento DDE, e vedi il dato che si aggiorna in tempo reale. Controlla il codice del dato "FDF|Q!'FIBZ0.NaE;Last" (FIB dicembre) che sia quello giusto, ora non posso testarlo.
Nella cella B9 metti la formula "=B8"
Per comodità fai anche un pulsante "DISATTIVA DDE" collegato a questo codice, serve a bloccare il flusso quando devi lavorarci su, altrimenti non capisci più nulla:
==================
Private Sub cmd_disattivadde_Click()
Sheets("DDE").Range("b8").FormulaR1C1 = ""
End Sub
==================
Fai un secondo foglio che chiamerai "Storici" che verrà automaticamente alimentato con i dati storici ogni 15 min, se vuoi altri TF devi cambiare la formula collegata al flag "fstor" e oldmin (al posto di 15 metti i minuti che vuoi). Puoi usare qualsiasi intervallo temporale.
Scrivi questa funzione nel modulo VBA del foglio:
========================
Public Sub SuArrivoDatiDDE()
Dim sTx As String
Static fstor, oldmin, oraold
'Ogni 5 sec salva il dato nella cella successiva
t = Time
riga = Second(t) \ 5
resto = Second(t) Mod 5
Sheets("DDE").Range("A11").FormulaR1C1 = oraold
ora5sec = TimeSerial(Hour(t), Minute(t), Second(t) - resto)
If (ora5sec > oraold) Then
Sheets("DDE").Range("A" & riga + 12).FormulaR1C1 = ora5sec
Sheets("DDE").Range("b" & riga + 12).FormulaR1C1 = Sheets("DDE").Range("b9").Value
oraold = ora5sec
End If
If (fstor = 1) And (Minute(t) \ 15 <> oldmin) Then fstor = 0
If fstor = 0 Then
riga = (Hour(t) - 8) * 60 + Minute(t)
If riga < 2 Then riga = 2
Sheets("Storici").Range("A" & riga).FormulaR1C1 = ora5sec
Sheets("Storici").Range("b" & riga).FormulaR1C1 = Sheets("DDE").Range("b9").Value
fstor = 1
oldmin = Minute(t) \ 15
End If
End Sub
===================
Già così dovresti avere tutto.
Se c'è altro chiedi pure. In bocca al lupo