Condividi:        

Macro Visual Basic 6.3 e dde Excel XP

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

Macro Visual Basic 6.3 e dde Excel XP

Postdi pesciolino235 » 22/04/08 22:18

salve, ho un problemino che mi sembra molto banale,ma che non mi fa dormire da diverse nottate..
..ho creato un foglio excel con collegamenti dde per ricevere dati di borsa, e se li apro manualmente tutto funziona correttamente , mentre quando li faccio partire da macro ( in visual basic 6.3) i collegamenti non riescono ad aggiornarsi e mi danno come risultato #N/D
la procedura e' la seguente : (apro file excel con i collegamenti dde, li aggiorno, salvo il file excel e lo chiudo)
ho provato ad inserire qualche formula per bloccare temporaneamente la macro in modo da far aggiornare i dati Application.Wait (Now + TimeValue("00:00:15")) ma non si aggiornano mai
ho provato anche ad aggiornarli con
Calculate
ma non ne vuole sapere di aggiornarsi prima che sia finita la macro
ho visto che in questo forum siete molto bravi, spero illuminiate pure me, grazie anticipatamente....
pesciolino235
Newbie
 
Post: 4
Iscritto il: 22/04/08 15:31

Sponsor
 

Re: Macro Visual Basic 6.3 e dde Excel XP

Postdi Anthony47 » 22/04/08 23:46

Ciao pesciolino235 e benvenuto nel forum.
Tutti i problemi diventano banali "dopo" che se ne trova una soluzione.

pesciolino235 ha scritto:la procedura e' la seguente : (apro file excel con i collegamenti dde, li aggiorno, salvo il file excel e lo chiudo)

Una cella con link dde dovrebbe aggiornare il suo contenuto in modo asincrono tutte le volte che i dati cambiano all' origine.

ho provato ad inserire qualche formula per bloccare temporaneamente la macro in modo da far aggiornare . .

. . ma non ne vuole sapere di aggiornarsi prima che sia finita la macro

Non capisco di che macro tu parli (che obiettivi ha, come e' stata organizzata, quando si lancia e cosi' via) e perche' sia cosi' lunga da dover provare a bloccarla temporaneamente (comunque l' istruzione wait non interrompe l' esecuzione della macro); infine non ho capito se i collegamenti danno esito #N/D o si aggiornano alla fine della macro.

Prova quindi a descrivere piu' in dettaglio questi aspetti e magari posta anche la macro di cui parli.
Ciao, fatti sentire.
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro Visual Basic 6.3 e dde Excel XP

Postdi pesciolino235 » 23/04/08 11:29

grazie mille per la tempestiva risp. (^_^)
scusa se sono stato poco dettagliato, ora provo a spiegarmi meglio..
ho registrato una piccola macro che mi apre un foglio excel con dei collegamenti dde alla mia piattaforma di tradingonline per reperire i dati da salvare..
(premetto una cosa..la cartella ok.xls non la posso tenere aperta ma la devo chiudere in quanto in questa cartella ci sono 50 collegamenti dde--->uno per ogni titolo-->e' il max consentito dalla mia banca-->in un secondo tempo poi vorrei aprire un'altro foglio con altri 50 collegamenti dde-->...il tutto poi lo vorrei ripetere ogni 120 sec.)

Sub dde_intraday_01()
Scelta rapida da tastiera: CTRL+i

Workbooks.Open Filename:="D:\_dde_\ok.xls", UpdateLinks _
:=3 (con questo comando dovrebbe gia' aggiornarmeli..ma eseguendo la macro restano #N/D)
Windows("ok.xls").Activate
Calculate
Application.Wait (Now + TimeValue("00:00:15"))
Sheets("foglio1").Select
Rows("5:5").Select
Selection.Copy
Sheets("foglio2").Select
Rows("11:11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub

se apro ok.xls manualmente i dde funzionano e mi danno dei numeri ( e non #N/D)
ho prorio notato che e' l'esecuzione della macro che non permette in qualche modo l'aggiornamento,infatti se blocco a meta' l'esecuzione della macro i dati da #N/D si trasformano in numeri... e' possibile bloccare temporaneamente la macro(basterebbero un paio di sec..) per poi farla riprendere sempre in automatico? grazie ancora
pesciolino235
Newbie
 
Post: 4
Iscritto il: 22/04/08 15:31

Re: Macro Visual Basic 6.3 e dde Excel XP

Postdi Anthony47 » 23/04/08 13:51

Vediamo...

Prova per favore queste tre ipotesi di soluzioni (sono interessato ai risultati di tutte e tre!):
Codice: Seleziona tutto
Sub dde_intraday_01A()
'Scelta rapida da tastiera: CTRL+i

Workbooks.Open Filename:="D:\_dde_\ok.xls", UpdateLinks:=3 '(con questo comando dovrebbe gia' aggiornarmeli..ma eseguendo la macro restano #N/D)
Windows("ok.xls").Activate

ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources  '<<< AGGIUNTA

Calculate
Application.Wait (Now + TimeValue("00:00:15"))
Sheets("foglio1").Select
Rows("5:5").Select
Selection.Copy
Sheets("foglio2").Select
Rows("11:11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub


Codice: Seleziona tutto
Sub dde_intraday_01B()
'Scelta rapida da tastiera: CTRL+i

Workbooks.Open Filename:="D:\_dde_\ok.xls", UpdateLinks:=3 '(con questo comando dovrebbe gia' aggiornarmeli..ma eseguendo la macro restano #N/D)
Windows("ok.xls").Activate

DoEvents  '<<< AGGIUNTA

Calculate
Application.Wait (Now + TimeValue("00:00:15"))
Sheets("foglio1").Select
Rows("5:5").Select
Selection.Copy
Sheets("foglio2").Select
Rows("11:11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub



Codice: Seleziona tutto
Sub dde_intraday_01C()
'Scelta rapida da tastiera: CTRL+i

Workbooks.Open Filename:="D:\_dde_\ok.xls", UpdateLinks:=3 '(con questo comando dovrebbe gia' aggiornarmeli..ma eseguendo la macro restano #N/D)
Windows("ok.xls").Activate
'ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources  '<<< Vedi Nota
Calculate
Application.OnTime Now + TimeValue("00:00:15"), "CloSave"
End sub

Sub CloSave()
Sheets("foglio1").Select
Rows("5:5").Select
Selection.Copy
Sheets("foglio2").Select
Rows("11:11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub


Le prime due sono simili a parte l' istruzione <<<Aggiunta.
Sulla terza, se non funzionasse, prova a scommentare l' istruzione marcata "<<< Vedi nota" (devi togliere l' apostrofo iniziale).

Poi per favore fai sapere i risultati di tutte e tre le prove (compreso se necessario anche la variante della "Nota").

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

Re: Macro Visual Basic 6.3 e dde Excel XP

Postdi pesciolino235 » 24/04/08 14:05

ciao Anthony47,
ho provato tutte e 3 le tue modifiche, purtroppo l'esito e' sempre il medesimo, va ok fino alla fine ma si copiano sempre
#N/D ...
ripensando.. x aggirare il problema non si potrebbe aprire il file e fare 2 macro.. una che apre il file, l'altra che parte 10 sec. dopo la fine dell'altra...
please fammi sapere se hai qualche altra idea ..io comincio ad averne pochine... grazie
pesciolino235
Newbie
 
Post: 4
Iscritto il: 22/04/08 15:31

Re: Macro Visual Basic 6.3 e dde Excel XP

Postdi Anthony47 » 24/04/08 16:40

Intanto la versione 01C e' composta da 2 macro, di cui la seconda viene lanciata dopo 15 secondi, ma secondo le mie aspettative anche la 01B aveva buone prospettive di riuscita.
Non avendo il tuo ambiente, per la parte di servizi dde, a questo punto posso solo andare a intuito.

Concentriamo le residue energie sulla versione 01C.

1) Hai fatto anche la prova scommentando l' istruzione "'ActiveWorkbook.UpdateLink etc etc"?

2) Non so quale e' il comportamento teorico del link dde all' apertura del file; cioe' non so se i dati vengono subito caricati nelle celle o se questi vengono caricati man mano che cambiano all' origine.
Quindi:
-fai in modo che dopo l' apertura del file venga visualizzato Foglio1 nella parte dove ci sono i link dde; se necessario metti queste 2 istruzioni subito prima di Calculate:
Sheets("Foglio1").select
Range("A1").activate

-inserisci un tot di link dde su titoli ad alto volume di scambio
-allunga il ritardo fino a 2 minuti, modificando la componente "TimeValue("00:00:15")" in "TimeValue("00:02:00")"
-controlla visivamente cosa succede a questi titoli prima della chiusura del file: partono #N/D e poco alla volta cambiano, o cosa?

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

Re: Macro Visual Basic 6.3 e dde Excel XP

Postdi Anthony47 » 24/04/08 19:35

Ancora una domanda: mi confermi che quando hai fatto le prove hai eliminato la macro precedente sostituendola con la nuova, cioe' avendo una sola Sub dde_intraday_01X nel progetto?
La domanda piu' esplicita e': siamo sicuri che hai lanciato le macro 01A, 01B e 01C, o c' e' il rischio che hai lanciato sempre la "versione di partenza", l' unica che si lancia con Contr-i?

Perdona se mi vengono certi dubbi...
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro Visual Basic 6.3 e dde Excel XP

Postdi pesciolino235 » 25/04/08 13:18

so che te l'avranno gia' detto, ma caro Anthony47 sei un genio!
la chiave e' stata
Application.OnTime Now + TimeValue("00:00:15"), "CloSave"
al primo tentativo ieri mi ha dato uno strano errore, dovuto al solo fatto che avevo piu' macro aperte e li mi si bloccava xke' probabilmente mi cercava "CloSave" in altra posizione , ma cambiando il nome e' andato perfettamente ad aggiornarsi come volevo... e per fortuna che ci sei te..aggiungo!!
ora passo al livello successivo.. cioe' quello di aprire altri fogli con collegamenti dde... (ne posso aprire solo 50 per volta)
a volte qui mi nasce un problema: dopo aver aperto il primo foglio con i relativi collegamenti, e dopo averlo richiuso nel secondo foglio che apro mi da degli errori dovuto al fatto che riconosce ancora in memoria i primi 50 collegamenti dde... ma non mi capita sempre..devo capire il perche'...
c'e' per caso un comando che resetta tutto come fosse aperto il foglio excel per la prima volta?
quando capitano sti errori, anche se chiudo excel e lo riapro in memoria tiene sempre il primo foglio..ed e' l'unico che si aggiorna, mentre per i successivi collegamenti mi da problemi.. per risolvere devo riavviare il pc.. ma non e' una buona soluzione ^_^
ora provo a creare il resto del programma,se per favore hai qualche idea son qui che ti aspetto,grazie ancora
pesciolino235
Newbie
 
Post: 4
Iscritto il: 22/04/08 15:31

Re: Macro Visual Basic 6.3 e dde Excel XP

Postdi Anthony47 » 26/04/08 00:23

Bene bene...
Sarei anche interessato al risultato della versione 01B, quindi cerca di ripetere la prova con 01B quale unica macro nel progetto.

Per il problema degli errori quando chiami i file successivi per me piu’ che un problema di excel e’ un problema di link che rimangono attivi tra il tuo pc e il server dde; e’ una opinione che non e’ supportata da nessuna prova perche’ non ho un ambiente idoneo.
Fai una prova in questo modo:
ti crei con Notepad un file PROVA.bat che salvi direttamente sotto C:\ e in cui metti:
Codice: Seleziona tutto
ipconfig /renew
ipconfig /flushDNS
ipconfig /registerdns


Poi nella macro, subito dopo il titolo e prima di Workbooks.Open inserisci
Codice: Seleziona tutto
Shell("C:\PROVA.bat")
Application.Wait (Now + TimeValue("00:00:10"))


Il .bat esegue una pulizia della configurazione tcp/ip sul Pc; lavora su Xp, non conosco la sintassi per SO piu’ recenti, e non ricordo quella per SO piu’ vecchi!
Ovviamente se non funziona cancellerai l’ istruzione Shell.

Per quanto riguarda l’ ulteriore automazione per aprire piu’ files in sequenza, ti rimanderei a questo topic:
viewtopic.php?t=61079
Guarda la prima risposta data all’ utente, in particolare la sezione 1; con quelle istruzioni (vedi nota) avrai nella variabile NomeFile il nome completo (path piu’ nome) dei file, uno dopo l’ altro, pronti per essere usati nella istruzione Workbooks.Open Filename:=NomeFile (al posto di Workbooks.Open Filename:="D:\_dde_\ok.xls")
Nota: nella seguente istruzione devi togliere la virgola finale!
Codice: Seleziona tutto
NomeFile = .FoundFiles(i),


Ora, se funzionasse anche la 01B siamo a cavallo perche’ bastera’ inserire il codice della 01B dentro la macro che trovi nell’ altro topic, modificare Workbooks.Open come detto sopra e con questo facciamo il lavoro su tutti i files.
Se invece siamo costretti a lavorare con la 01C + CloSave allora devi fare un intervento un po’ piu’ pesante, perche’ non puoi usare il ciclo For / Next per looppare su tutti i file; ma prima di scendere in dettagli aspetto la tua risposta al test della 01B. In ogni caso leggi il topic che ti ho linkato sopra.

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


Torna a Applicazioni Office Windows


Topic correlati a "Macro Visual Basic 6.3 e dde Excel XP":


Chi c’è in linea

Visitano il forum: Anthony47 e 39 ospiti