Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Macro per 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

Postdi Anthony47 » 19/06/06 23:31

Ridico la mia:
" ..... non dimentichiamo subito un Application.EnableEvents = False per non andare in palla per interrupt annidati...." altrimenti l' evento riscatta appena nel tuo codice modifichi una cella.
E poi, se vuoi eseguire i tuo codice solo quando A1 cambia, allora in testa al tuo codice (ma dopo Application.EnableEvents = False ...) verifica se A1 e' cambiato (continui l' esecuzione) o no (esci subito; ultima istruzione prima dell' End Sub: Application.EnableEvents = True). Anche su questo ti avevo dato gia' due righe di codice poco sofisticato ma funzionante.

Per quanto riguarda l' ultima tua questione (delle 13:35), posso solo rilevare che forse hai trascritto male IsEmpty, che e' una funzione vba se scritta isempty (altrimenti e' niente).

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: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Grazie Anthony

Postdi luca2002for » 20/06/06 07:33

Grazie mille :-) solo che da quanto ho capito il codice da te proposto rimane vincolato all'utilizzazione del metodo ontime.
E i rischi di imprecisione, dovuti a tale metodo (come ti dicevo nella mia prima risposta alla tua gentile proposta di soluzione) sono troppo alti.

In effetti ora, col il sistema trovato sul sito microsoft ( cioè la sub Linklist, che ho postato un paio di messaggi fa ) sono quasi alla soluzione.

Mi basterebbe una piccola modifica nel codice che facesse cercare ad excel le celle DDE che cambiano in modo diverso.

Cioè non in tutto il foglio ma solo in una cella (per ipotesi la A1).

Forse la riga da modificare è proprio la prima, quando dice

Codice: Seleziona tutto
Links = ActiveWorkbook.LinkSources(xlOLELinks)


Se fosse possibile mettere al posto di ActiveWorkbook (che credo indichi l'ampiezza della ricerca) qualcosa che, "tradotto dal VBA all'italiano" significhi "cerca solo in A1", sarei a posto.

Secondo te si può? :-)

Grazie mille per ora e buona giornata

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Postdi Anthony47 » 20/06/06 09:56

Se hai una macro che parte su un evento (qualsiasi evento, non solo OnTime), ribadisco che e’ praticamente indispensabile mettere un Application.EnableEvents = False per bloccare ulteriori eventi; in coda alla macro metterai un Application.EnableEvents = True per riabilitarli.

L’ ultimo codice pubblicato (17-6, 10:59) e’ basato su Sub Worksheet_Change, ebbene questa e’ una macro che parte su evento; seguendo la discussione non vedo altro codice in sperimentazione.

Potrei essere rimasto indietro, anzi certamente sono indietro perche’ non capisco a quale macro si riferisce il codice postato stamattina (Links = ActiveWorkbook.LinkSources(xlOLELinks)) .

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: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

La macro è questa :-)

Postdi luca2002for » 20/06/06 10:16

Scusa, è vero, sono stato troppo ellittico.

Mi riferivo alla macro da me postata (16/06/06 16:30 Oggetto: Forse ho trovato....) e tratta dal sito microsoft all’indirizzo http://support.microsoft.com/default.as ... t%3B172832

il cui codice è

Codice: Seleziona tutto
 Sub LinkList()
   Dim Links As Variant
   ' Obtain an array for the links to Excel workbooks
   ' in the active workbook.
   Links = ActiveWorkbook.LinkSources(xlOLELinks)
   ' If the Links array is not empty, then open each
   ' linked workbook. If the array is empty, then
   ' display an error message.
   If Not IsEmpty(Links) Then
       For I = 1 To Ubound(Links)
           ActiveWorkbook.SetLinkOnData Links(i), "LinkChange"
       Next I
   Else
       MsgBox "This workbook does not contain any links " & _
       "to other workbooks"
   End If
End Sub


Ora, con questa macro io ho risolto il problema. Funziona a meraviglia e non chiedo di meglio.
Unico motivo di non soddisfazione:

la macro cerca i cambiamenti di valore il tutto il foglio e questo fa andare in tilt il tutto.

Nella mia (ahimè) grave ignoranza di VBA credo che la riga deputata all’individuazione del range in cui cercare il cambiamento di valore di una cella DDE sia la seguente: (è in pratica la prima riga della macro su citata):

Codice: Seleziona tutto
 Links = ActiveWorkbook.LinkSources(xlOLELinks)


La mia domanda è:

E’ possible modificare quella riga di comando in modo che la ricerca fatta da excel si limiti alla cella A1 del foglio 1 (per ipotesi) e non sia allargata a tutta la cartella di lavoro?

Ripeto, la macro sub Linklist funziona alla perfezione. Non mi serve altro se non un “restringimento” del suo campo di azione.

Grazie mille Anthony (ho visto l’ora della precedente risposta….grazie anche per questo)..hihi a mezzanotte passata ancora su excel per rispondermi. Grazie.

Scusami se sono impreciso nel linguaggio, spero col Vostro aiuto di migliorare e so che queste imprecisioni complicano la possibilità per voi di capire cosa vogliamo noi neofiti.

Siete mitici in questo forum :-)

….a dopo
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Postdi Alexsandra » 20/06/06 10:48

Prova questo codice
Codice: Seleziona tutto
Sub LinkList()
 Dim Links As Variant
 Links = ActiveWorkbook.LinkSources(xlOLELinks)
 If Not IsEmpty(Links) Then
 For I = 1 To Ubound(Links)
  ActiveWorkbook.SetLinkOnData Links(i)
 Next I
  macro 1
 Else
End If
End Sub
Dò per scontato che in un foglio hai il collegamento DDE e riempi un altro foglio importando tutti i tuoi dati.
Con il ciclo For riempi il 2° foglio di dati e teoricamente finito il ciclo lanci la macro. Provalo così e fammi sapere.

Altra cosa la funzione Ubound, tu non devi fare calcoli con i tuoi dati vero.
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Alexsandra » 20/06/06 14:56

Possiamo "Imbrogliare" Excel :lol: :lol: :lol:
Foglio 2 = da A1 a A........ hai i tuoi dati trasferiti in DDE
Cambia il valore della cella A1 ma succede quello che hai postato prima.

Domanda. La colonna B del foglio 2 è Libera? in pratica usi solo la colonna A ?
altrimenti posta quante colonne usi importate da DDE
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Anthony47 » 21/06/06 09:15

Io non ho capito quando parte la macro LinkList(), chi me lo dice?

Ciao e grazie,
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: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

La macro Linklist

Postdi luca2002for » 21/06/06 09:37

Ciao Anthony e grazie perchè continui ad interessarti del mio problema :-)

Dunque le cose stanno così:

la macro Linklist parte in automatico all'apertura del foglio.

In un'altra macro auto_open ho infatti messo
Codice: Seleziona tutto
Call Linklist


Collegata al verificarsi della condizione prevista dalla macro Linklist, c'è un'altra macro (che io chiamo Macro1) che fa un lavoro di copia e incolla, sostanzialmente.

Per ottenere questo risultato ho inserito nel codice della Linklist il richiamo alla macro1

Codice: Seleziona tutto
Sub LinkList()
   Dim Links As Variant
   Links = ActiveWorkbook.LinkSources(xlOLELinks)
   If Not IsEmpty(Links) Then
       For I = 1 To UBound(Links)
           ActiveWorkbook.SetLinkOnData Links(I), "Macro1"
       Next I
   Else
       MsgBox "This workbook does not contain any links " & _
       "to other workbooks"
   End If
End Sub


(qui sopra c'è la versione modificata da me della Linklist. Come puoi notare c'è "Macro1" nella quinta riga).

In questo modo le cose vanno "quasi" alla perfezione.

Cioè, quando la cella contenente il DDE nel Foglio1 (la A1) cambia valore, effettivamente le 2 macro (Linklist che parte in automatico con auto_open e la Macro1) fanno il loro mestiere egregiamente :-)

Il problema è che se io (come è normale che io faccia) aggiungo altre celle contenenti DDE nella cartella (anche cambiando foglio) accade che:

la macro Linklist "scatta" (e scatta, quindi, anche la Macro1) tutte le volte che una qualsiasi di queste celle contenenti DDE cambia di valore.

Risultato da me non voluto, perchè vorrei che, pur essendoci nel foglio più celle DDE, la Linklist (e di conseguenza la Macro1) partissero soltanto al cambiamento della DDE contenuta in A1 (e non anche di tutte le altre).

Insomma, mi occorrerebbe un modo (se esite, ma probabilmente non esiste) di modificare la sub Linklist nel senso di :

farle cercare il cambiamento del valore non di "tutte" le celle contenenti DDE ma solo di 1 cella, cioè

la cella A1 del Foglio1 :-)

Grazie ancora per l'interessamento, adesso, grazie anche all'aiuto di Alex, sto provando una strada alternativa (che si basa sul metodo setLinkOndata), purtroppo, finora, per mia incapacità di addattare la macro alle mie esigenze, infruttuosamente.

Chi la dura la vince :-)

Grazie ancora, a dopo.

Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Postdi Anthony47 » 21/06/06 13:19

Credo di aver capito qualcosa…
Dovremmo lavorare sull’ istruzione ActiveWorkbook.SetLinkOnData Links(I), "Macro1" , togliendola dal ciclo For (che attiva la connessione a Macro1 su sutti i links esistenti nel workbook) e facendola lavorare solo sul link settato in A1.

La sintassi e’ ActiveWorkbook.SetLinkOnData Nome_link, Procedura

Se tu sai il Nome_Link (qualcosa che somiglia a: Programma|Documento!Link) il gioco e’ fatto:

Codice: Seleziona tutto
Sub LinkList()
    ActiveWorkbook.SetLinkOnData “Nome_Link”, "Macro1"   
End Sub


Se INVECE NON SAI il nome link, allora ce lo procuriamo:

Nella Sub LinkList() attuale, sulla riga dopo l’ istruzione For I = 1 To UBound(Links) aggiungi WW = Links(I) e poi metti un break sull’ istruzione successiva (ActiveWorkbook.SetLinkOnData etc etc; per mettere il break, click sulla riga e dai F9; per togliere idem).

A questo punto mandi in esecuzione LinkList, e al break leggi il valore della variabile WW (ci vai sopra col cursore, dopo qualche secondo compare il contenuto); se c’ e’ un unico link impostato, quello che vedi e’ il Nome_Link che devi scrivere nella Sub LinkList() di 3 righe che ti ho dato prima. Comunque fai continuare la macro (tasto F5, oppure F8 che fa passo-passo e cambia poco) e controlla i valori successivi di WW (se ci sono altri link, ovviamente) in modo da essere piu’ che certi del Nome_Link da utilizzare.
Alla fine riscrivi in toto la Sub LinkList() su 3 righe e prova.


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: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sì ! Sì ! Sì ! Sì !

Postdi luca2002for » 21/06/06 14:31

FUNZIONA :-))))))))))))))))))

Alex e Anthony siete mitici, semplicemente!

Alex perchè si è arrovellata e ha setacciato la rete scovando (non so sinceramente come) l'istruzione giusta (e il sito giusto) http://investireoggi.it/forum/viewtopic ... f348ade61b
Poi dicono..intuito femminile :-)

Anthony perchè in tre righe di codice ha trovato come risolvere il dilemma, il pratica by-passando il falso problema della cella A1 e invece concentrandosi sul codice DDE come elemento identificativo idoneo a far sì che "solo con riferimento alla cella contenente quel codice" la macro partisse.

Per chi volesse approfondire io ho trovato interessante anche questa proposta

http://www.willowsolutions.com/talk/view_msg.asp?id=61

Insomma ....Whew! :-)

Grandissimi!

Mi avete levato uno scoglio enorme.

Codice: Seleziona tutto
 Grazie ragazzi :-)


Luca
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

Postdi Alexsandra » 21/06/06 14:48

Benissimo. :D
Sarebbe opportuno che postassi il codice che ti ho lincato,visto che in rete ci sono pochissime informazioni sul DDE,ne trarrebbe vantaggio tutto il forum.

Ho visto che è un pò lungo,eventualmente posta quello che hai usato magari è utile a qualche altro utente.

Ciao Luca

PS. adesso non hai più problemi con il tasto code vero? :lol: :lol:
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi luca2002for » 21/06/06 17:11

Dunque, ricapitolando e sperando che questo lavoro possa tornare utile a qualcun altro :-) provo a sintetizzare gli aspetti salienti di questa discussione.
L’obiettivo è quello di rilevare il cambiamento di valore di una cella contenente DDE al fine di sfruttare questo evento per collegarlo ad altri (es. l’esecuzione in automatico di una macro).
Per rilevare il cambiamento di valore in una cella contenente DDE, le macro normalmente utilizzate (che funzionano egregiamente quando i cambiamenti derivano da immissioni manuali di dati)
non sortiscono effetti Parlo soprattutto di questo tipo di routine
Codice: Seleziona tutto
Sub Worksheet_SelectionChange(ByVal Target As Range)
oppure di
Codice: Seleziona tutto
Sub Worksheet_Change(ByVal Target As Range)
Di questo problema è al corrente Microsoft, che infatti propone una macro specifica per ovviare ai relativi inconvenienti. Il codice è scaricabile da quì

E la macro si chiama sub Linklist
Codice: Seleziona tutto
 Sub LinkList()
   Dim Links As Variant
   ' Obtain an array for the links to Excel workbooks
   ' in the active workbook.
   Links = ActiveWorkbook.LinkSources(xlOLELinks)
   ' If the Links array is not empty, then open each
   ' linked workbook. If the array is empty, then
   ' display an error message.
   If Not IsEmpty(Links) Then
       For I = 1 To Ubound(Links)
           ActiveWorkbook.SetLinkOnData Links(i), "LinkChange"
       Next I
   Else
       MsgBox "This workbook does not contain any links " & _
       "to other workbooks"
   End If
End Sub
A questa macro ne viene collegata un’altra
Codice: Seleziona tutto
 Sub LinkChange()
   MsgBox "linked"
End Sub
che “parte” tutte le volte che una cella contenente DDE nella cartella di lavoro cambia contenuto.
In pratica, chi vuole far partire una macro al cambiamento di una qualsiasi cella DDE deve semplicemente copiare il codice della prima macro (Linklist) e sostituire il codice
della seconda (Linkchange) inserendo quello che gli serve.

Il funzionamento di queste due routine è perfetto.
Ma può darsi che l’utilizzatore di excel abbia bisogno di far partire la seconda macro non al cambiamento di qualsiasi cella DDE, ma al cambiamento di una specifica cella.
A questo scopo sono utilizzabili diverse strade,La prima, è rinvenibile Quì

e si compone, in realtà di due codici:
Codice: Seleziona tutto
 Private Sub Worksheet_Calculate()
ControlloNotifica 'richiama la macro in questione
'sull'evento Calculate del WorkSheet
End Sub
Codice: Seleziona tutto
Sub ControlloNotifica()
Set WBook_Attuale = ThisWorkbook
Dim MioTesto As String
MioTesto = "Codice_DDE’*1"
'WBook_Attuale.SetLinkOnData "Formula di riferimento al titolo", "Macro richiamata"
WBook_Attuale.SetLinkOnData MioTesto, "Macro1"
End Sub
In pratica il cambiamento della cella DDE (il cui codice è stato da me generalizzato come esempio nella riga Mio testo = ‘Codice_DDE’ e il cui valore è leggibile semplicemente selezionando la cella in cui è contenuto, in modo che appaia, dopo un segno di = nella barra della formula) determina la partenza della macro “Macro1”.La seconda strada è quì

permette anche di fermare l’update e il relativo lancio della macro (qui esemplificata da un msgbox, al posto del quale può essere messo qualsiasi altro tipo di routine, all’occorrenza).
Per fare funzionare il tutto occorre inserire “TRUE” nella cella C1 (e par fermare tutto “FALSE”).
Codice: Seleziona tutto
 Dim bRunNow As Boolean
Codice: Seleziona tutto
 Sub Test1()
With ActiveWorkbook
bRunNow = .Worksheets("Foglio1").Range("C1").Value
If bRunNow Then .SetLinkOnData " Codice_DDE’", "Test2" Else .SetLinkOnData " Codice_DDE’", ""
End With
End Sub
Codice: Seleziona tutto
 Sub Test2()
MsgBox "StockUpdated.", vbOKOnly, "Set Link On Data"
End Sub
Codice: Seleziona tutto
 Sub ButtonTest()
Test1
End Sub
(le istruzioni, in inglese, sono sul sito ;-) )
(Anche qui ho esemplificato scrivendo “Codice_DDE’” al posto del codice reale DDE contenuto nella cella).

La terza strada, velocissima, proposta da Anthony prevede una macro che (Anthony) che ne fa attivare un’altra (Macro1) tutte le volte che una cella contenente DDE (immaginiamo sempre, a livello esemplificativo, che la sua formula sia = Codice_DDE’) cambia il suo contenuto.
Codice: Seleziona tutto
Sub Anthony()
    ActiveWorkbook.SetLinkOnData "Codice_DDE’", "Macro1"
End Sub
Codice: Seleziona tutto
Sub Macro1()
MsgBox "La cella DDE è cambiata", vbOKOnly, "Messaggio"
End Sub
Codice: Seleziona tutto
 Sub auto_open()
Call Anthony
End Sub
Naturalmente, se si vuole attivare una macro che faccia qualcosa di più o di diverso che mostrare un msgbox al variare della cella DDE avente quel particolare codice (nell’esempio ho usato “Codice_DDE’”, ma va messo quello specifico del DDE) , basterà sostituire il contenuto di codice della routine Macro1 con quello che, nel caso specifico, si vuole utilizzare.

Spero che il riepilogo, dopo questa lunga ma utilissima discussione, possa servire a chi incontra gli stessi problemi che ho avuto io con la manipolazione delle celle DDE. Per informazioni ulteriori sulle prime due soluzioni proposte (e anche per attingere direttamente alle relative fonti), consiglio di visitare i siti che ho postato.

Grazie ancora, a dopo
luca2002for
Utente Senior
 
Post: 116
Iscritto il: 07/05/06 09:32

POTETE APPROFONDIRE?

Postdi osva2003 » 04/07/06 18:39

CARI AMICI DEL FORUM DDE
HO LETTO E SEGUITO CON INTERESSE I VS. INTERVENTI A RIGUARDO DI COME CATTURARE UN CODICE DDE.
DEVO DIRE , DA NEOFITA, CHE MI HA FATTO GRANDE SCUOLA.
COMPLIMENTI A TUTTI.
HO CERCATO DI METTERE IN PRATICA LA SOLUZIONE ULTIMA , LA PIU' SEMPLICE. ORA PERO' MI TROVO ARENATO DOPO NUMEROSI TENTATIVI.
OVVERO:
VOLENDO CREARE UNA MACRO CHE MI CATTURI IL NUMERO VARIANTE ESPRESSO DAL CODICE DDE E CHE QUINDI LO COPIA E INCOLLA DISPONENDO TUTTI I NUMERI GENERATI SU UNA RIGA IN UN LOOP INFINITO (CHE VORREI INTERROMPERE A PIACERE) MI TROVO IN DIFFICOLTA'. HO PROVATO, MA MI VERGOGNO AD INVIARE IL CODICE.
POTREBBE QULACUNO DARMI ALMENO UN IMPUT. VORREI UNA MACRO VBA CHE DOVREBBE SEMPLIFICARE LE COSE. LA FATICA MIA CONSISTE, E SEMBRERA' "PUERILE", NELL' USARE CORRETTAMENTE IL CODICE IN QUANTO ANCORA INESPERTO, MA PERO' RIESCO CERTAMENTE AD INTERPRETARLO E CAPIRLO QUANDO LO VEDO.
GRAZIE A TUTTI
OSVA2003
osva2003
Utente Junior
 
Post: 16
Iscritto il: 04/07/06 17:43

Postdi Alexsandra » 04/07/06 22:57

Scrivere in maiuscolo significa urlare.
guardati il post di luca2002 e vai a vederti anche i link che ha segnalato.
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

ringraziameto

Postdi osva2003 » 05/07/06 09:47

ok ho capito
grazie a tutti e a risentirci presto
osva2003
Utente Junior
 
Post: 16
Iscritto il: 04/07/06 17:43

Re: ringraziameto

Postdi Alexsandra » 05/07/06 11:00

osva2003 ha scritto:ok ho capito
grazie a tutti e a risentirci presto
Mi spiace ma credo che tu non abbia capito.
Il topic è stato molto intenso anche con diversi contatti privati per arrivare ad una soluzione, consultazione in rete su una marea di siti etcc... un bel lavoraccio insomma.
Ho invitato Luca2002 a fare una sintesi di tutto il procedimento e di inviarmela per un controllo ed in seguito è stato effettuata la pubblicazione del post per coloro che hanno problemi simili col DDE.
Il mio invito è rivolto alla consultazione dei link postati perchè tu possa appurare se il codice che troverai e i consigli possono risolvere il tuo problema.
Non sò se lavori su righe,su colonne o come hai impostato il tuo file,pertanto la consultazione dei link ha questo scopo se poi i problemi rimangono è necessario che tu posti il file per poter trovare una soluzione adeguata in quanto l'argomento è abbastanza delicato
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi osva2003 » 09/07/06 09:46

Ho lavorato attentamente sulle indicazioni che mi hai passato ed ho ripassato tutto facendo prove su prove.
Di fatto ho proceduto partendo dalla conclusione di Luca2002 andando indietro nei vari interventi e consultando i siti segnalati.
Sono riuscito a mettere a frutto quasi tutto ma ho qualche problemino.
Non riesco a capire se dipende dal codice (ma non mi pare) o da altri fattori di impostazione.
Come posso fare per avere qualche dritta .....
grazie
osva2003
Utente Junior
 
Post: 16
Iscritto il: 04/07/06 17:43

Postdi Alexsandra » 09/07/06 09:55

Anche se l'argomento è simile,probabile che il contesto in cui lo usi sia diverso.
Ti consiglio di aprire un nuovo topic tutto tuo ed esponi il problema il più dettagliatamente possibile e su quello ci ragioniamo.

ciao
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Re: Grandioso, però....

Postdi aleprem » 15/07/06 10:00

PROVA COSI:
in A1 lascia la formula DDE,
in A2 scrivi la formula =A1+0
e poi collega la macro con A2
oppure, se vuoi collegare la macro con A1:
scrivi la formula DDE in una cella quasiasi, per esempio A10
in A1 scrivi la formula = A10+0
luca2002for ha scritto:Grazie Ale e Anthony.
In effetti con il codice proposto da Alexandra (su quello di Anthony ci sto un pò studiando) le cose funzionano, ma solo se il cambiamento di valore della cella dipende da una mia immissione manuale.

(Cioè, per esempio metto 2 al posto di 3 nella cella A1 e la macro parte regolarmente).

Se però invece la cella varia non per mia immissione manuale ma perchè è collegata DDE ad un dato che varia (quindi senza che io la tocchi) non parte niente :-(

Ho provato ad aggiungere un "+0" alla fine della formula DDE (per far credere ad excel che si tratti di un numero e non di una formula), ma niente.

Ho anche provato a tenere nella A1 non la casella col DDE ma semplicemente un incolla-collegamento....niente :-(

Non capisco cosa potrebbe essere, se non il fatto che excel, quando la cella cambia diciamo "per motivi esterni", non capisce che cambia.

Come potrei farglielo capire?

Grazie mille, anche per i msgbox.
aleprem
Newbie
 
Post: 1
Iscritto il: 15/07/06 09:47

Postdi Anthony47 » 15/07/06 10:32

Ciao aleprem,
fai riferimento ad un messaggio del 16-6, ma il problema fu risolto il 21-6.

Comunque se il tuo suggerimento mira a sfruttare l' evento Worksheet_Change, ricorda che questo evento non scatta su cambiamenti provocati da formule.
Luca ha poi sfruttato l' istruzione SetLinkOnData, che attiva una macro sui cambiamenti prodotti tramite dde; vedi suo messaggio del 21-6 di riepilogo.

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: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Macro per importazione dati DDE":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti