Condividi:        

Help Macro di exel in VBA

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

Help Macro di exel in VBA

Postdi Massimo C/mare » 14/02/17 12:55

Salve a tutti e grazie per l'attenzione ed ammissione al forum.
Ho necessità di aiuto sulle macro di exel scritte in VBA premetto che sono un neofità.
In un foglio exel ho creato una macro 1 che fà partire una macro 2 ogni qualvolta cambio il valore in una cella "D7".
Quindi immetto un valore numerico in D7 e quando premo invio, la Macro 2 via DDE copia il valore di D7 su una memoria del mio PLC
Fin qui tutto bene, il mio problema è evitare la pressione del tasto invio ovvero la macro 2 dovrebbe copiare il valore appena dopo essere stato completamente digitato (nel caso reale verrà copiato da un altra applicazione).
L'altro mio problema sta ne fatto di avere una colonna del file exel con N numeri uno sotto l'altro, la mia necessità è quella che ad un dato comando ricevuto via DDE il valore nella cella "D7" deve essere sostituito dal primo della colonna adiacente, e la colonna stessa scrollare verso l'alto i restanti numeri al fine di copiarli ad uno ad uno in "D7" ogni volta che si riceve via DDE quel bit di comando.
Non sò se sono stato molto chiaro nell'espressione.
Ringrazio chiunque voglia aiutarmi.
Ciao.
Massimo C/mare
Newbie
 
Post: 7
Iscritto il: 14/02/17 12:40

Sponsor
 

Re: Help Macro di exel in VBA

Postdi Anthony47 » 15/02/17 01:59

Ciao Massimo, benvenuto nel forum.
L'avvio di Macro2 deve essere agganciata a un "evento"; da quello che hai detto pero' non si capisce quali sono gli eventi e che cosa governano.
Prova quindi a descrivere piu' in dettaglio i fenomeni in gioco, evitando decsrizioni e definizioni generiche.
Comunque penso "si, si puo' fare".

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

Re: Help Macro di exel in VBA

Postdi Massimo C/mare » 15/02/17 10:37

Ciao Antony, intanto ti ringrazio di avermi risposto credimi lo aprrezzo veramente, ti chiedo scusa in anticipo della mia ignoranza in merito, molti Anni fà ero capace di programmare in Basic (ero un ragazzino) oggi mi occupo di Automazione Industriale e programmo solo in Ladder, fatta questa premessa passiamo al sodo.
Sono riuscito con l'aiuto di un collega a creare questo: Ho fatto questo XLSM con una macro che gira di continuo.

La macro osserva il contenuto della casella B3, se questo cambia da 0 a 1:
1- sposta la MISSIONE in cima su "MISSIONE EFFETTUATA"
2- aggiorna la lista "MISSIONI" facendola scalare in su

La macro non fa nulla se riceve ripetutamente 1 o 0 in B3.
La macro indica "NO MISSIONS" se trova vuota la prima missione

Vorrei girati il foglio in modo che tu possa capire meglio ma non riesco a fare un upload qui.
Massimo C/mare
Newbie
 
Post: 7
Iscritto il: 14/02/17 12:40

Re: Help Macro di exel in VBA

Postdi alfrimpa » 15/02/17 10:55

Ciao Massimo

Per allegare un file qui puoi usare un sito di file sharing tipo Filedropper, Dropbox o simili.

Una volta che avrai caricato il file il sito ti restituirà un link che copierai ed incollerai qui sul forum.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Help Macro di exel in VBA

Postdi Anthony47 » 15/02/17 14:53

Allora aspettiamo il file demo.
Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

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

Re: Help Macro di exel in VBA

Postdi Massimo C/mare » 16/02/17 10:00

Ciao a tutti Ragazzi e grazie sempre, sotto c'è il link al file exel.
E' funzionante però presenta un problema ovvero se copio la cella B3 in A3 e cambio il valore di A3 la macro non si avvia probabilmente perchè da B3 non guarda al suo valore ma a quello che c'è scritto dentro ovvero =A3.
Siccome il dato (0 o 1) nella cella arriva da un applicazione esterna e quindi la macro non partira ho fatto questa simulazione.
Credete sia possibile farei modo che la macro guardi il valore assunto e ono ciò che c'è scritto all'interno ?

Link: https://we.tl/c562YWMsCW
Massimo C/mare
Newbie
 
Post: 7
Iscritto il: 14/02/17 12:40

Re: Help Macro di exel in VBA

Postdi Anthony47 » 16/02/17 11:28

Dimentichiamoci (almeno per ora) la richiesta iniziale dove chiedevi come si poteva innescare una macro sul cambio di D7 importato da altra applicazione.
Parliamo invece di quanto hai scritto successivamente dove parlavi di cella B3.

La domanda e':
-che cosa contiene B3, cioe' che cosa leggi nella barra della formula dopo aver selezionato tale cella.

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

Re: Help Macro di exel in VBA

Postdi Massimo C/mare » 16/02/17 12:18

Ciao Antony, hai ragione forse ti sto portando in confusione, perchè nel frattempo ho rielaborato tutto, quindi adesso "D7" non fà più testo.
Attualmente all'interno di "B3" casella della formula ho un collegamento esterno che copia "0" oppure "1" questo collegamento e cosi scritto " =RSLINX|Magazzino_Autom!'MISSIONE_COMPLETATA,L1,C1' "
Per semplicità di debug ho scritto manualmente in "A3" 0 oppure 1 manualmente e copiato questo in "B3" la copia in questa cella nella casella funzione è "=A3" il risulato ottenuto e che la macro non si avvia.
Io penso perche il VBA non ne tiene contodato che si aspetta di vedere solamente 0 oppure 1 e non =A3 o altro, esiste un modo per fargli valutare il solo valore della cella e non il contenuto?
Grazie ancora.
Massimo C/mare
Newbie
 
Post: 7
Iscritto il: 14/02/17 12:40

Re: Help Macro di exel in VBA

Postdi Anthony47 » 17/02/17 01:27

Ah, finalmente e' chiaro...
Allora useremo SetLinkOnData per intercettare l'aggiornamento del collegamento dde e far scattare la macro Update

Prova cosi':
-elimina la Sub Worksheet_Change
-in un Modulo nuovo del vba inserisci questo codice
Codice: Seleziona tutto
Dim OldA3        'Variabile a livello di modulo

Sub DDEMonitor()
ActiveWorkbook.SetLinkOnData "RSLINX|Magazzino_Autom!'MISSIONE_COMPLETATA,L1,C1'", "ddeHead"
End Sub

Sub ddeHead()
With ThisWorkbook.Sheets("Foglio1").Range("B3")
If .Value = OldA3 Then
    Exit Sub
Else
    OldA3 = .Value
    If .Value = 1 Then
        MsgBox ("Salto a 1")
        'Call Update
    End If
End If
End With
End Sub

Edit:
Il codice della Sub ddeHead era privo delle ultime righe; vedi aggiornamento in messaggio successivo. Ho corretto anche qui

Quando sei pronto per provare esegui una sola volta la Sub DDEMonitor (da Excel, premi Alt-F8; scegli DDEMonitor dall'elenco di macro disponibili; premi Esegui)
A questo punto controlla visivamente che tutte le volte che B3 commuta a 1 esca il messaggio "Salto a 1".
Se Si, allora cancella nella Sub ddeHead la riga col MsgBox e cancella l'apostrofo in testa alla riga Call Update, e a questo punto dovrebbe partire la macro Update tutte le volte che B3 cambia e il suo valore passa da ??? a 1.

Se No, allora inserisci nello stesso nuovo modulo quest'altra macro e mandala in esecuzione una volta:
Codice: Seleziona tutto
Sub LinkList()
   Dim Links
   Links = ActiveWorkbook.LinkSources(xlOLELinks)
   If Not IsEmpty(Links) Then
       For I = 1 To UBound(Links)
            Debug.Print Links(I)
       Next I
   Else
       Debug.Print "Nessun link??!!"
   End If
End Sub

Quindi attiva l'editor delle macro e premi Contr-g per aprire la "Finestra Immediata"; copia cio' che vedi scritto nella finestra e pubblica nel tuo prossimo messaggio.

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

Re: Help Macro di exel in VBA

Postdi Massimo C/mare » 17/02/17 10:17

Ok ciao Antony.
Ho provato, il risultato è che mi da un errore di runtime '424' Necessario Oggetto ed in debug mi evidezia questa riga:

With ThisWorkbook.Sheets("Foglio1").Range("B3")

Che significa?
nelle celle A3 e B3 ho inserito prima in A3 il collegamento DDE ed in B3 =A3
poi in tutte e due il collegamento DDE.
Massimo C/mare
Newbie
 
Post: 7
Iscritto il: 14/02/17 12:40

Re: Help Macro di exel in VBA

Postdi Anthony47 » 17/02/17 13:19

Per un errore il codice pubblicato ieri sera e' privo delle istruzioni finali; il codice completo e':
Codice: Seleziona tutto
Sub ddeHead()
With ThisWorkbook.Sheets("Foglio1").Range("B3")
If .Value = OldA3 Then
    Exit Sub
Else
    OldA3 = .Value
    If .Value = 1 Then
        MsgBox ("Salto a 1")
        'call update
    End If
End If
End With
End Sub
Mancavano le ultime due, ma l'errore che avresti dovuto avere era diverso dal runtime '424' Necessario Oggetto. Confermi che hai Copiato il codice e Incollato nel vba (e non trascritto)? Mi dici il nome del Modulo vba in cui hai messo il codice? Lo leggi nella intestazione della finestra vba.

Comunque se anche col codice completo non funziona allora prova a modificare la riga in
Codice: Seleziona tutto
With Application.ThisWorkbook.Sheets("Foglio1").Range("B3")


Indica anche quale versione di Office usi.

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

Re: Help Macro di exel in VBA

Postdi Massimo C/mare » 17/02/17 17:51

Eccomi Antony, L'errore era mio di tipo typing avevo banalmente scritto "ThisWorbook" senza la K.
quindi adesso funziona il problema è pero che i dati quindi Call Update viene eseguita con transizione da 1 a 0 quindi inverso a come dovrebbe essere.
2ndo problema dopo che il file exel viene aperto mi da un errore di runtime 13 "Tipo non corrispondente" il debug mi porta a:
If .Value = OldA3 Then , chiudendo il Debug parte a lavorare normalmente come prima.
Che può essere?
Granzie ancora per l'aiuto Antony.
Massimo C/mare
Newbie
 
Post: 7
Iscritto il: 14/02/17 12:40

Re: Help Macro di exel in VBA

Postdi Anthony47 » 20/02/17 00:25

Mi puoi allegare uno screenshot della pagina vba, da cui si possa esaminare il nome del file (nell'intestazione della finestra) e tutto il codice che vi hai inserito?

Per le istruzioni su come creare e allegare una immagine:
viewtopic.php?f=26&t=103893&p=605488#p605488

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

Re: Help Macro di exel in VBA

Postdi Massimo C/mare » 20/02/17 11:54

Ciao Antony Scusa l'assenza di fine settimana.
Sotto il link dello screenshoot.
Grazie.

https://s23.postimg.org/60izq4vd7/Screenshoot_1.jpg
Massimo C/mare
Newbie
 
Post: 7
Iscritto il: 14/02/17 12:40

Re: Help Macro di exel in VBA

Postdi Anthony47 » 20/02/17 18:20

Non vedo nell'immagine errate implementazioni di quanto suggerito.
Per quanto riguarda il runtime error 13 "Tipo non corrispondente", aggiungi questa riga dentro la Sub DDEMonitor:
Codice: Seleziona tutto
Sub DDEMonitor()
oldA3 = 0          '<<< QUESTA
ActiveWorkbook.SetLinkOnData "RSLINX|Magazzino_Autom!'MISSIONE_COMPLETATA,L1,C1'", "ddeHead"
End Sub

Per quanto riguarda il presunto intervento della Update sulla transizione 1-->0 e non 0-->1 (come chiesto) credo che questo possa essere legato alla variazione troppo frequente del dato rispetto ai tempi di esecuzione della macro; le istruzioni If .Value = 1 Then / Call update infatti richiamano la Update quando B3 e' a 1, sempre che Foglio1!B3 replichi il contenuto dei dati importati via DDE.

Per prova aggiungi questa istruzione in testa ad Update:
Codice: Seleziona tutto
Sub Update()
Debug.Print ThisWorkbook.Sheets("Foglio1").Range("B3").Value       '<<< QUESTA


Poi, dopo aver fatto "lavorare" la Update vai sull'editor delle macro, premi Contr-g per aprire la finestra "Immediata" e controlla cosa risulta scritto; se diverso da 1 pubblica la sequenza che leggi (copia dalla finestra, incolla nel prossimo messaggio).

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


Torna a Applicazioni Office Windows


Topic correlati a "Help Macro di exel in VBA":


Chi c’è in linea

Visitano il forum: Nessuno e 50 ospiti