Condividi:        

elenco 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

elenco dati DDE

Postdi larzillo » 21/09/15 09:04

salve
ho excel 2013, ricevo dati da iwbank il numero max di titoli che posso scaricare in DDE è circa 50.
in realta ho la necessità di avere in real time sul foglio di excel max 10-15 titoli che debbo poter variare nel tempo
quello di cui ho bisogno è la possibilità di realizzare uno o più elenchi anche di 100 titoli con una casella e/o pulsante a fianco che io posso attivare(ottenendo i dati in DDe) e disattivare per non superare i limiti(di scaricamento in DDE) imposti dal fornitore per i titoli che di volta in volta sono interessato a valutare.
attualmente sono costretto di volta in volta che ho bisogno di valutare un titolo di scaricarmi con copia incolla i dati in DDE nella cella che mi interessa e poi cancellarli per passare ad altra valutazione , tutto questo perche il fornitore non mi consente di superare in contemporanea un certo numero di attivazioni in DDe
spero di essermi spiegato , preciso che non ho nessuna conoscenza di programmazione e una approssimativa conoscenza di excel
grazie
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Sponsor
 

Re: elenco dati DDE

Postdi Anthony47 » 21/09/15 12:11

Ciao larzillo, benvenuto nel forum.
Per poter dire qualcosa bisognerebbe avere il layout dei tuoi dati, la parte che sfrutta il collegamento dde; prova ad allegare uno screenshot da cui si vedano anche le coordinate delle celle (viewtopic.php?f=26&t=103893&p=605488#p605488).

Ti aspettiamo...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: elenco dati DDE

Postdi larzillo » 21/09/15 14:53

Immagine

questa è uno degli elenchi che ho , come si vede le righe di fianco agli strike non sono tutte riempite dai dati in DDE perche il fornitore mi limita il numero di DDE che posso avere in real time , per cui scarico solo quelli che posso , se ne voglio vedere altri che non sono evidenziati , devo prima cancellare dei dati, e poi ne posso inserire altri,
vorrei invece avere l'elenco completo(inattivo) e attivare con un pulsante/flag quelli che voglio vedere in real time , senza fare come ora di cancellare e copiare/incollare i nuovi dati da vedere.
non sono riuscito a capire se i dati in DDE è possibile copiarli nella cella e attivarli all'occorrenza , oppure una volta collegati alla cella (copia/incolla, dal sito del fornitore)si attivano indipendentemente da controlli che posso usare io, (caso in cui il problema non è risolvibile), oppure ciò è possibile ,ma non so come fare...
non so se mi sono spiegato...
grazie per l'attenzione
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi larzillo » 21/09/15 16:37

forse ti serviva questa...
Immagine
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi Anthony47 » 21/09/15 23:19

Non sono un trader e quindi non ho capito alcune cose che hai detto.
Se la colonna strike fosse un titolo e le altre colonne sono ottenute con dei link dde allora in prima battuta:
-a sinistra della colonna strike segna 1 per i titoli che vuoi seguire e 0 o vuoto per quelli che vuoi ignorare.
-poi prova a impostare le formule come =Se(CellaCon1o0=1;laFormulaDDE;"Titolo Ignorato")

In questo modo FORSE ti potrebbe bastare mettere 1/0 accanto al titolo per seguirlo.

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

Re: elenco dati DDE

Postdi larzillo » 23/02/16 14:39

causa probl personali , riprendo ora chiedendo prima scusa ad Anthony47 per non aver risposto alla sua indicazione.
ho provato ad usare la formula che mi hai postato , va bene e funziona , però, il DDE (nella formula)funziona come se fosse sempre attivo indipendentemente dalla immissione dell'1 nella cella, che mi rende disponibile il dato per altre operazioni nel foglio. E' evidente che dovendo compilare elenchi di titoli (strike) piu ampi dei soli 20-25 che la banca mi rende disponibili in real time, questa strada non va bene.
ho verificato invece che inserendo gli strike in moduli ,excel non li riconosce come collegamenti DDE , li vede solo dopo aver lanciato la macro che mi incolla i dati nelle relative celle, quindi in questo modo posso inserire tutti i collegamenti che mi servono senza problemi. di seguito una macro esempio con 5 strike che controllo con dei pulsanti
Codice: Seleziona tutto
Sub inserisciDDE1700()
   
       Sheets("OptionPage").Select
       
       Cells(32, 24).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19312106?bestBidPrice'"
       Cells(32, 25).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19312106?bestAskPrice'"
       Cells(33, 24).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19310211?bestBidPrice'"
       Cells(33, 25).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19310211?bestAskPrice'"
       Cells(34, 24).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19311411?bestBidPrice'"
       Cells(34, 25).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19311411?bestAskPrice'"
       Cells(35, 24).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19312655?bestBidPrice'"
       Cells(35, 25).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19312655?bestAskPrice'"
       Cells(36, 24).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19310583?bestBidPrice'"
       Cells(36, 25).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19310583?bestAskPrice'"
End Sub


Codice: Seleziona tutto
Sub eliminaDDE1700()
 Sheets("OptionPage").Select
       
       Range("X32:Y36").ClearContents

End Sub


Ora quello che vorrei è una macro dove elenco tutti gli strike che voglio osservare.Poi devo poter
immettere in un range di celle contigue( es C5:H5, foglio 2 ) un valore (strike)che mi attivi la macro selezionando solo lo strike (valore) immesso nella cella e copiandomi i relativi dati (DDE) nelle celle del foglio(option page) come la macro postata sopra.
tutto sempre visivamente rimanendo sul foglio2 dove ho immesso il valore)
in ultimo se nella cella dove ho imputato il valore(foglio2) , successivamente ne imputo un altro i dati precedenti (DDE scritti nella option page )) vengano cancellati .
Al momento ho adattato questa soluzione per attivate la macro dopo imputazione valore (strike)in un range di celle(istruzione inserita nel foglio di lavoro)

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Cdati = "C5:I5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target = 1 Then Call inserisciDDE1900
End If
End Sub


1)con questa istruzione pero , una volta imputato lo strike (foglio2 ,in una cella qualsiasi del range) excel si porta sulla pagina dove inserisce la macro attivata(optionpaga) e resta li senza tornare al foglio che mi interessa(foglio2), devo tornarci io e trovo i dati correttamente leggibili.
2)successivamente digitato un altro valore nella cella, dove ho inserito il primo valore in foglio2, , i dati richiamati dalla precedente richiesta restano attivi nella optionpage, a me serve che si cancellino per limitare lo scarico in DDE dalla banca per non oltrepassare i limiti imposti dalla stessa
questa soluzione , mi sembra , che richieda la preparazione di un modulo/ macro per ogni singolo strike(valore)
oltre a prevedere If target tante volte quanti sono gli strike/moduli /macro che deve cercare , ammesso che sia possibile perche potrbbe essere necessario inserire un 100inaia di If....
spero che riesca a trovarmi delle soluzioni almeno per i punti 1 e 2 per il resto è un
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi Anthony47 » 23/02/16 23:50

Bentornato.
Quanto al problema 1, dovrebbe funzionare questa modifica (dimostrata sulla inserisciDDE1700)
Codice: Seleziona tutto
Sub inserisciDDE1700()

With Sheets("OptionPage").
    .Cells(32, 24).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19312106?bestBidPrice'"
    .Cells(32, 25).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19312106?bestAskPrice'"
'etc etc
End With
End Sub

Questa non ti attiva il foglio OptionPage.

Per il 2: ma la Sub eliminaDDE1700 non risolve il problema (di cancellare le formule inserite precedentemente, qualsiasi siano le formule)? Ovviamente dovresti modificarla come fatto prima:
Codice: Seleziona tutto
Sub eliminaDDE1700()
Sheets("OptionPage").Range("X32:Y36").ClearContents
End Sub


Per l'ultima domanda, probabilmente potresti usare la cella selezionata per indicare quale macro deve essere eseguita; ad esempio se hai una Sub inserisciDDE1700 e una Sub inserisciDDE1900 allora potresti modificare la tua Sub Worksheet_Change in questo modo:
Codice: Seleziona tutto
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
    If Target <> "" Then Run "inserisciDDE" & Target.Value
End If


In questo modo se nella cella scrivi 1700 parte una macro e se scrivi 1900 ne parte un'altra.

Ovviamente le celle su cui fai scattare la Worksheet_Change e' meglio che siano soggette a convalida da un elenco di valori corretti.

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

Re: elenco dati DDE

Postdi larzillo » 24/02/16 02:43

vediamo se ho capito:
Codice: Seleziona tutto
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
    If Target <> "" Then Run "inserisciDDE" & Target.Value
End If

questa modifica alla istruzione, mi consente di inserire i valori (strike ) che voglio per es 1700/1900/1750 ecc in qualsiasi cella del range , preleva il dato dalla macro1700/1900/1750 ecc., e rimanendo nello stesso foglio2 mi da il risultato. OK provata e funziona proprio cosi.( Con macro modificata con aggiunta di With e cancellando .Select)
ora problema
1)ho la necessità di distinguere le macro Call dalle macro Put ,nei moduli che ho le distinguo con , esempio, inserisciDDE1700 e inserisciDDE1700C, siccome dalla istruzione che mi hai mandato legge solo la parte" inserisciDDE" potrei differenziare l'altra macro con una istruzione identica a quella che mi hai mandato modificando solo "inseriscidde" ,(dde minuscolo) aggiungendola nel foglio 2 assieme a quella gia presente e modificando tutti i moduli relativi, dimmi se va bene e procedo così
2)nel range di celle dove imputo i valori , quando voglio visualizzare nuovi valori , li sovrascrivo a quelli gia presenti nella cella , con la istruzione che sappiamo :
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Cdati = "C5:I5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
    If Target <> "" Then Run "inserisciDDE" & Target.Value
End If
End Sub

quando effettuo questa operazione sovrascrivendo un nuovo valore dovrebbe cancellarmi automaticamente il DDE relativo al valore precedente ; esempio ho scelto il valore 1700 e con l'istruzione di sopra,attivo la macro e in optionpage incolla il relativo DDE ,se poi imputo il valore 1900 automaticamente in optionpage deve cancellarmi le celle dove ho incollato il DDE 1700, se questo e complicato potrei con una macro che utilizzasse il valore gia presente nella cella per cancellare il DDE relativo in optionpage , che non so come fare....
per ora mi fermo qui , penso di aver gia abusato abbastanza...
grazie
luigi
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi larzillo » 24/02/16 12:35

aspetta un momento non mi rispondere , sono emersi dei problemi dalle mie prove , metto a fuoco e chiedo....
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi Anthony47 » 24/02/16 15:57

Rispondo lo stesso :D

Per me una macro e' sempre una macro sia che faccia un put che un call. Comunque se una macro si chiama (mettiamo) inserisciDDE1700 e l'altra inserisciDDE1700C allora ti bastera' che nella cella invece di scrivere 1700 tu scriva 1700 (per un macro) e 1700C (per l'altra).
Comunque (se era questa la tua idea) per un nome macro il maiuscolo/minuscolo non fa differenza.

Se le macro scrivono sempre nelle stesse celle (quindi la macro inserisciDDE1700 scrive nelle stesse celle della inserisciDDE1900) allora do' per scontato che i vecchi dde link vengono rimossi prima di inserire i nuovi, ma non lo posso verificare. Altrimenti devi cancellarein modo esplicito le vecchie formule utilizzando macro come la Sub eliminaDDE1700

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

Re: elenco dati DDE

Postdi larzillo » 24/02/16 18:54

ti ringrazio
è vero quanto mi dici nella prima parte della risposta, cmq: per come lavora il mio foglio devo inserire dei numeri nelle celle per cui 1700C non va bene .
pertendo dalla ipotesi di gli strike (valori) sono gli stessi per le Put e per le Call , posso rinominare i moduli" inserisci Put1700" e "inserisci Call1700" a patto che possa modificare l'istruzione nel foglio di lavoro in modo che mi cerchi i relativi moduli, l'esempio che segue è la tua istruzione modificata , alle mie esigenze , ma non ho la piu pallida idea se si puo fare...
Codice: Seleziona tutto
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
    If Target <> "" Then Run "inserisciCall" & Target.Value
    If Target <> "" Then Run "inserisciPut" & Target.Value
End If

grazie
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi larzillo » 24/02/16 19:28

scusa è questa quella che mi sembra piu adatta
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Cdati = "C5:I5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target <> "" Then Run "inserisciCall" & Target.Value
Cdati = "J5:O5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target <> "" Then Run "inserisciCPut" & Target.Value
End if

fammi sapere che ne pensi
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi Anthony47 » 24/02/16 23:36

scusa è questa quella che mi sembra piu adatta
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Cdati = "C5:I5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target <> "" Then Run "inserisciCall" & Target.Value
Cdati = "J5:O5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target <> "" Then Run "inserisciCPut" & Target.Value
End if

fammi sapere che ne pensi

In linea di massima non puoi pensare che un altro umano sia in grado di interpretare una macro se prima non descrivi che cosa la macro dovrebbe fare.
Pur qualificandomi io tra gli "umani" comunque penso che sia una ciofeca, perche' le strutture degli If /Else /End If sono costruite secondo un linguaggio ...diverso da quello delle macro.
Questa e' sintatticamente piu' corretta
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Cdati = "C5:I5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
    If Target <> "" Then Run "inserisciCall" & Target.Value
Else
    Cdati = "J5:O5"
    If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
        If Target <> "" Then Run "inserisciCPut" & Target.Value
    End If
End If
End Sub

Essa grosso modo dice:
-se compilo una cella nell'intervallo C5:I5 allora avvio la macro "inserisciCallXYZ", dove XYZ corrisponde al contenuto della cella compilata
-se compilo una cella nell'intervallo J5:O5 allora avvio la macro "inserisciCPutXYZ", dove XYZ corrisponde al contenuto della cella compilata
Il tutto funziona se si compila una cella alla volta (ma si possono cancellare piu' celle insieme).

...ovviamente le macro " inserisciCallXYZ" e " inserisciCPutXYZ" devono esistere, nei Moduli standard del progetto vba del file.

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

Re: elenco dati DDE

Postdi larzillo » 25/02/16 01:44

Complimenti
ovviamente la macro postata da me non poteva essere corretta altrimenti non sarei qui a romperti l'anima , era solo un modo per farti capire quello che volevo , e tu con molta arguzia hai interpretato brillantemente . Ho inserito, tasto dx sulla linguetta del foglio 2 ,visualizza codice , ho copiato l'istruzione -ok funge - ho solo per mia comodità invertito le call con le put, bene.
problema , i moduli richiamati immettendo il valore nelle celle non si attivano
il modulo compilato come di seguito
Codice: Seleziona tutto
Sub inserisciCall1850()

     
       With Sheets("OptionPage")
       
       Cells(47, 4).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'16752111?bestBidPrice'"
       Cells(47, 5).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'16762111?bestAskPrice'"
       
End With
End Sub

non esegue l'istruzione
compilato in questo modo funziona , copia il DDE nei campi opportuni ma non mi torna al foglio dove immetto il valore nel range di celle
Codice: Seleziona tutto
Sub inserisciCall1900()

       With Sheets("OptionPage").Select
       
       Cells(52, 4).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'16763300?bestBidPrice'"
       Cells(52, 5).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'16763300?bestAskPrice'"
End With
End Sub

forse faccio qualche errore e non capisco cosa. e tardi a domani.. oggi ciao
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi Anthony47 » 25/02/16 12:13

Anthony un paio di giorni fa ha scritto:
Codice: Seleziona tutto
With Sheets("OptionPage").
    .Cells(32, 24).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19312106?bestBidPrice'"
    .Cells(32, 25).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'19312106?bestAskPrice'"
'etc etc
End With


larzillo oggi ha scritto:
Codice: Seleziona tutto
 With Sheets("OptionPage")

Cells(47, 4).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'16752111?bestBidPrice'"
Cells(47, 5).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'16762111?bestAskPrice'"

End With

Quesito della Susy: dove mancano dei piccoli ma importanti "punti"?
Senza di essi le istruzioni non fanno riferimento a Sheets("OptionPage") ma al foglio "corrente" (Foglio2, da quel che leggo) dove quindi dovresti trovare (e cancellare) i link impostati dalla macro.

Ti raccomando di applicare ai codici che pubblichi il "tag" Code (selezioni il testo completo, premi il pulsante Code che trovi in testa al textbox del messaggio).

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

Re: elenco dati DDE

Postdi larzillo » 25/02/16 12:40

Sub inserisciCall1850()


With Sheets("OptionPage").


Cells(47, 4).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'16752111?bestBidPrice'"
Cells(47, 5).FormulaR1C1 = "=IWDDE|STOCK_PRICE!'16762111?bestAskPrice'"

End With
End Sub
quando compilo l'istruzione dopo optionpage parentesi punto
la scritta si colora di rosso e mi da messaggio con errore di compilazione
previsto identificatore oppure espressione tra parentesi
ciao
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi Anthony47 » 25/02/16 12:46

Gaaaa..
Il punto alla fine di With Sheets("OptionPage") NON CI DEVE STARE; ci va invece prima delle istruzioni successive, quelle che devono far riferimento al foglio "OptionPage".

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

Re: elenco dati DDE

Postdi larzillo » 25/02/16 13:00

sono un c.....ne....
modificato ora tutto ok
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi larzillo » 25/02/16 13:05

non c'è una dimensione carattere adatta per ringraziarti...
ho altri quesiti ma per ora ho del lavoro da fare e ti do un po di respiro alla prox
ciao
dimmi in quale negozio compri tutta la pazienza che hai per aiutare tutti gli analfabeti come me
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: elenco dati DDE

Postdi larzillo » 26/02/16 19:17

E possibile ampliare la formula che mi hai postato dandogli altri 2 range dove cercare dati ?
tipo "P:R" e "S:U" con moduli che potrei chiamare " inseriscicallaprile" e "inserisciputaprile"

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Cdati = "C5:I5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target <> "" Then Run "inserisciCall" & Target.Value
Else
Cdati = "J5:O5"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target <> "" Then Run "inserisciPut" & Target.Value
End If
End If
End Sub

grazie ciao
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "elenco dati DDE":


Chi c’è in linea

Visitano il forum: Ricky0185 e 62 ospiti