Condividi:        

[Excel] Importazione dati 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

[Excel] Importazione dati DDE

Postdi foreights » 14/08/06 16:26

Salve,
sono nuovo del forum. Sono comunque molto interessato ai vari temi oggetto di discussione e, pertanto, mi leggerete spesso ;)
Dunque, il mio problema riguarda l'importazione di dati DDE. Mi sono letto tutto quello che si è scritto, in merito, sia qui che altrove. Credo di aver risolto del tutto il mio problema, tranne una piccola cosa che proprio non riesco a spiegarmi.

Questa è la situazione:

nel foglio1 cella A1 ho il collegamento DDE
nel foglio1 cella C1 ho una stringa che può essere TRUE oppure FALSE

nel modulo 1 ho le routine più avanti indicate. La logica di funzionamento è (o almeno, dovrebbe essere) la seguente.
La routine auto_open definisce la cella c1 del foglio1 come variabile booleana. Se questa è vera, ed in concomitanza con l'acquisizione del successiovo dato DDE, fa partire la macro1 - che visualizza il messaggio 'La cella DDE è cambiata' - altrimenti richiama la routine test3 - che visualizza il messaggio 'premuto il tasto stop'.
Il problema è questo. Quando apro la cartella di lavoro che contiene il foglio1 il sistema visualizza il messaggio relativo al valore che la variabile booleana aveva nel momento in cui excel è stato chiuso l'ultima volta. E da quel momento non sente più il cambiamento della cella c1. Lo sentirà nuovamente alla chiusura di excel e successiva riapertura.
Chi mi può aiutare?
Grazie e a buon rendere.
Codice: Seleziona tutto
Sub auto_open()
Dim bRunNow As Boolean
    With ActiveWorkbook
        bRunNow = .Worksheets("Foglio1").Range("c1").Value
        If bRunNow Then
        .SetLinkOnData "IWDDE|STOCK_PRICE!'229947?contractPrice'", "macro1"
        Else
        .SetLinkOnData "IWDDE|STOCK_PRICE!'229947?contractPrice'", "Test3"
        End If
    End With
End Sub
Codice: Seleziona tutto
Sub Test3()
MsgBox "premuto il tasto stop!", vbOKOnly, "Messaggio"
End Sub
Codice: Seleziona tutto
Sub Macro1()
MsgBox "La cella DDE è cambiata", vbOKOnly, "Messaggio"
End Sub
foreights
Utente Junior
 
Post: 46
Iscritto il: 12/08/06 15:10
Località: Roma

Sponsor
 

Postdi Alexsandra » 14/08/06 17:04

Abbiamo già affrontato questo argomento, prova a leggerti questo Post c'è il codice riassunto per il trasferimento dei dati in DDE, vedi se riesci a risolvere il problema.
Eventualmente ritorna a postare che vediamo assieme come risolvere

Ciao e benvenuto nel forum
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi foreights » 14/08/06 19:27

Grazie Alexsandra per l'accoglienza.

In realtà il post che mi suggerisci di leggere è proprio quello che mi ha dato maggiori informazioni ed occasioni di crescita su questo argomento.
Il problema è che ora non riesco proprio ad andare avanti.
Come ripeto, il sistema funzionerebbe ...
... se non fosse necessario dover ogni volta riavviare excel per consentirgli di leggere il nuovo valore della cella c1.

Proprio non capisco.
Grazie.
foreights
Utente Junior
 
Post: 46
Iscritto il: 12/08/06 15:10
Località: Roma

Postdi Alexsandra » 15/08/06 08:41

Avendo posto la macro in Auto open questa si avvia solo quando apri il tuo file,dovresti spostarla.
Puoi metterla in un modulo e in Worksheet_Calculate mettere un timer che ti lanci la tua macro ogni tot. di secondi.
Oppure mettere un pulsante e associarlo al lancio della tua macro.

Non sò che uso ne fai del tuo file per cui non saprei cosa consigliarti come soluzione ottimale,specifica cosa fai con il file e dimmi se le soluzioni sopra esposte ti possono andar bene
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Anthony47 » 15/08/06 15:53

Ciao foreights,

La tua macro Sub auto_open() assegna 2 macro diverse ad un cambio dati dovuto al collegamento DDE, a seconda del flag in C1: Macro1 se C1 >0, oppure Test3 se viceversa C1=0. Ambedue queste macro si attivano solo su un cambio dati via DDE. E’ quello che volevi fare? A giudicare dal codice delle macro direi di no.
Tutto questo viene settato all’ apertura del file e non piu’ modificato, quindi quello che dici, “E da quel momento non sente più il cambiamento della cella c1”, e’ normale.

Se, come penso, tramite C1 vuoi attivare / disattivare la macro di gestione del cambio valore via DDE (cioe’ attivare/disattivare la tua Macro1) potresti usare Worksheet_Change, cioe’ qualcosa del tipo

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim bRunNow As Boolean
If Target.Address <> "$C$1" Then Exit Sub
    With ActiveWorkbook
        bRunNow = .Worksheets("Foglio1").Range("c1").Value
        If bRunNow Then
        .SetLinkOnData "IWDDE|STOCK_PRICE!'229947?contractPrice'", "macro1"
        Else
        .SetLinkOnData "IWDDE|STOCK_PRICE!'229947?contractPrice'", ""
        MsgBox "premuto il tasto stop!", vbOKOnly, "Messaggio"
        End If
End With
End Sub


Questa macro parte tutte le volte che il foglio subisce un cambiamento per input da tastiera, verifica se la cella modificata e’ C1, se SI e C1 <> 0 setta (o conferma) l’ aggancio a Macro1() in caso di modifica dei dati DDE, se invece C1 =0 cancella l’ aggancio a macro1() e fa uscire un MsgBox.

La macro Test3() la puoi eliminare.

Facci sapere.

Torno al mare, BUON FERRAGOSTO a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19440
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi foreights » 29/08/06 10:51

Grazie Anthony47,
scusa se rispondo solo ora ma in questi giorni non ho potuto accedere alla rete e quindi sono stato del tutto out.

Nel frattempo, con il mio notebook off line, ho provato comunque a risolvere il problema aggirando l'ostacolo. Al momento ho quasi risolto.

Comunque, come spesso succede quando ci si addentra in ambiti complessi come quello del VBA, nel frattempo sono incorso in altri problemi: alcuni risolti ed altri no. Quelli che non sono riuscito a risolvere, ancora una volta, li ho aggirati con altre soluzioni.
Ora che sono nuovamente on line, comunque, proverò a postare (in altro thread, ovviamente), gli ostacoli che non sono riuscito a superare (o che sono stato costratto ad aggirare).

Devo dire, tuttavia, che l'essere costretto ad affrontare da solo i problemi mi ha fatto comunque fare un notevole passo avanti (almeno credo)!

Mi leggo con calma la tua risposta: sono sicuro che anch'essa contribuirà a farmi crescere un altro po'.

Ancora grazie.

:)
foreights
Utente Junior
 
Post: 46
Iscritto il: 12/08/06 15:10
Località: Roma


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Importazione dati DDE":


Chi c’è in linea

Visitano il forum: Nessuno e 66 ospiti