Descrizione :
Un mio esempio pratico di utilizzo DDE da Excel VBA completo di generatore DDE ( VB6 ) per simulazioni.
+ Articolo :
Tempo fa ho creato questo esempio per un Forum, dopo un buon bombardamento di richieste da parte di utenti che ( purtroppo per loro ) devono avere a che fare con il DDE in Excel.
Per chi non sapesse di cosa sto parlando, DDE sta per "Dynamic Data Exchange" :
http://en.wikipedia.org/wiki/Dynamic_Data_Exchange
L'esempio simula un generatore di valori, che ho scritto in VB6, dal momento che VB6 ha un supporto nativo al DDE, e un progetto Excel che "ascolta" e registra i dati DDE in arrivo...
Chiaramente il punto su cui focalizzare l'attenzione è il lato-Excel della tecnica in quanto, nel caso reale, i dati arriveranno tipicamente da links remoti e non da un generatore/simulatore locale.
--> Listener_DDE.xls :
WorkBook Excel con il codice VBA essenziale per ricevere i dati DDE e inoltre per verificare se e quando i dati arrivano effettivamente.
L'essenziale per il Listener_DDE.xls è che ci sia un Foglio "DDE" e un Modulo VBA.
Su Foglio "DDE" ho inserito due CommandButton ( del tipo ActiveX, come sempre ), cmd_attivadde e cmd_disattivadde.
La loro funzione, come suggeriscono i nomi, è di attivare/disattivare l'ascolto di eventuali dati DDE in arrivo.
Il codice per il Foglio "DDE" è il seguente :
Private Sub cmd_attivadde_Click() ApplicaFormuleDDE 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 Private Sub ApplicaFormuleDDE() 'A1 Sheets("DDE").Range("A1").FormulaR1C1 = "=GeneratoreValori_DDE|Form1!txt_dati01" End Sub Private Sub cmd_disattivadde_Click() 'A1 Sheets("DDE").Range("A1").FormulaR1C1 = "" End Sub
"SuArrivoDatiDDE", come si nota è il nome della Routine, passato come stringa al Metodo SetLinkOnData.
Per questo ho creato un Modulo VBA e vi ho inserito il codice seguente :
Public Sub SuArrivoDatiDDE() Sheets("DDE").Range("B1").FormulaR1C1 = Sheets("DDE").Range("A1").Text End Sub
La Public Sub SuArrivoDatiDDE() è la Routine in cui inserire le varie operazioni da eseguire sui dati DDE in arrivo.
In questo caso l'unica operazione eseguita è la copia dell'ultimo valore ricevuto da A1 a B1.
Ovviamente si possono inserire istruzioni di copia in righe e colonne, registrazione dati in file di testo, inserimenti a DB, grafici e quant'altro...
--> GeneratoreValori_DDE.exe :
L'applicazione VB6 che genera, in questo caso, una semplice serie di valori numerici crescenti, ed è costituita da una sola Form ed alcuni semplici controlli.
Un'immagine rende subito l'idea della struttura :
ComboBox --> cmb_secondi
CommandButton --> cmd_attivainviodde
CommandButton --> cmd_disattivainviodde
TextBox --> txt_dati01
Timer --> Timer1
Il codice completo del Progetto / Form VB6 di GeneratoreValori_DDE è il seguente :
'**************************************************** '***** Generatore Dati DDE Locale ******************* '***** MARCOGG 2011 ********************************* '**************************************************** ' Impostare a Design le seguenti proprietà su Form1 : ' LinkMode = 1 - Source ' LinkTopic = Form1 Private num As Long Private Sub cmb_secondi_Click() Timer1.Interval = CInt(cmb_secondi.Text) * 1000 End Sub Private Sub Form_Load() Dim i As Integer For i = 1 To 60 cmb_secondi.AddItem (i) Next i cmb_secondi.ListIndex = 0 End Sub Private Sub cmd_attivainviodde_Click() cmb_secondi.Enabled = False Timer1.Enabled = True End Sub Private Sub cmd_disattivainviodde_Click() cmb_secondi.Enabled = True Timer1.Enabled = False End Sub Private Sub Timer1_Timer() num = num + 1 txt_dati01.Text = num End Sub
Naturalmente potrei avere un Generatore VB6 con N controlli che generano N valori, anche su tempi diversi e il WorkBook-Listener potrebbe avere le corrispondenti N Celle che li ricevono...
--> Run :
1. Lanciare in esecuzione GeneratoreValori_DDE.exe e Listener_DDE.xls.
2. Selezionare sul Generatore l'intervallo in secondi desiderato tra un invio dati DDE e il successivo, e poi Click su "Attiva Invio Dati DDE".
3. Sul WorkBook, Click su "Attiva Ascolto DDE".
A questo punto c'è tutto l'essenziale per approfondire ed eseguire test, e ovviamente per completarlo e complicarlo a piacere.
+ Fine Articolo.
0 commenti:
Posta un commento