Condividi:        

[excel] eseguire macro al variare cella 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] eseguire macro al variare cella DDE

Postdi premiums » 04/11/10 11:31

Salve a tutti del forum,
vorrei un piccolo aiuto, eseguire una macro al variare di una cella contenente un valore DDE.
Per farmi capire questo valore proviene da un plc è assume un valore 0 oppure 1 io vorrei eseguire una macro quando questo valore è =1
Da premettere che non conosco tanto bene il VB e sono partito con questo codice

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
ind = Target.Address(RowAbsolute:=False, ColumnAbsolute:=False)
If ind = "A1" Then
If Target.Value = 1 Then test
End If
Application.EnableEvents = True
End Sub

Risultato se nella cella A1 inserisco il valore 1 (tramite tastiera) la macro viene eseguita, mentre se il valore viene inserito tramite DDE la macro non viene eseguita.

Come posso risolvere questo problema ?
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Sponsor
 

Re: [excel] eseguire macro al variare cella DDE

Postdi fra1110 » 04/11/10 11:46

ho fatto una cosa simile con:

nel modulo 1:

Codice: Seleziona tutto
Public TER
Public MES
Public ANN
Dim AllowFiltering As Object
Sub CambiamentoCella()
If TER = "" Or MES = "" Or ANN = "" Then
TER = 0
MES = 0
ANN = 0
End If
TER = Range("a1")
MES = Range("d1")
ANN = Range("f1")
End Sub


in thisworkboot:
Codice: Seleziona tutto
Sub Workbook_Open()
CambiamentoCella
End Sub


nel foglio di lavoro che usi:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'Ad ogni cambiamento di range("F1") viene eseguitO il filtro
Set Target = Range("F1")
If Target <> ANN Then
Sheets("Forecast Commissioning").Unprotect ("xxx")
Range("A10:W10").AutoFilter Field:=3, Criteria1:="SIELTE", Operator:=xlOr
Set Target = Nothing
Sheets("Forecast Commissioning").Protect ("xxx"), AllowFiltering:=True

End If
End Sub


questa macro in pratica agisce su un menù a tendina ad ogni cambiamento della cella F1, che in pratica è quello che serve a te basta solo eliminare quello che è inutile
fra1110
Utente Junior
 
Post: 15
Iscritto il: 03/11/10 09:23

Re: [excel] eseguire macro al variare cella DDE

Postdi fra1110 » 04/11/10 11:46

per acquisire da PLC devi avere il collegamento alla DLL di interfaccia con la porta stampante o seriale...
fra1110
Utente Junior
 
Post: 15
Iscritto il: 03/11/10 09:23

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 04/11/10 11:57

Grazie fra1110, per la tua immediata risposta,
per rispondere alla tua ultima domanda già acquisisco dati da plc e me li visualizza in una cella excel

per l'esempio che mi hai indicato (codice che tu hai usato), non so come applicarlo se mi puoi dare un aiutino
penso che sia semplice, per chi mastica molto l'excel,

quando il valore della cella A1 = 1 (proveniente da plc) esegui macro.
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 04/11/10 12:28

Ciao premiums e benvenuto nel forum.
In aggiunta a quanto suggerito da fra1110, potresti anche usare il metodo SetLinkOnData per impostare l' avvio di una macro quando il dato importato via dde cambia; in questi casi infatti l' evento Worksheet_Change non si attiva.
Trovi una discussione simile qui:
viewtopic.php?p=481183#p480013

Se non riesci posta ancora inserendo anche quale e' la formula usata nella cella che vuoi monitorare.

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

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 04/11/10 12:54

Salve Anthony,
finalmente ci sono riuscito, ho visto anche la tua tempestiva risposta, ho usato :

Codice: Seleziona tutto
Sub Workbook_Open()
ActiveWorkbook.SetLinkOnData _
"RSLINX|'PLC'!'N7:116,L1,C1", _
"testmacro"
End Sub


Grazie mille della vostra disponibilità, ho risolto uno dei miei problemi...
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 04/11/10 13:00

Il prox problema che mi pongo è memorizzare i dati in una progetto excel interno. Riepilogando
dovrei memorizzare data e orario quando il bit va a 1 (start) e quando và a 0 (stop) in una tabella ext excel tramite macro.

La macro che ho usato è

Codice: Seleziona tutto
Sub test()
Cells(1, 1).Value = Time
End Sub


dove scrive l'orario nella cella 1,1 sarebbe A1 , ora come posso sviluppare questa macro in modo da andare a scrivere in un file diverso excel ?
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi fra1110 » 04/11/10 14:43

quindi in un blocco notes ad esempio? report.txt?
fra1110
Utente Junior
 
Post: 15
Iscritto il: 03/11/10 09:23

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 04/11/10 14:45

esatto un report di orari, del tipo errori generati
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 05/11/10 01:01

Non ho capito con certezza la domanda, ma forse vorresti fare
Codice: Seleziona tutto
Sub test()
Workbooks("Report.xls").Sheets("Foglio1").Cells(1, 1).Value = Time
End Sub
?
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 11/11/10 22:04

Grazie Antony per il tuo supporto, ma stò risolvendo prima una altro problema, ti spiego in modo da vedere se mi potresti date una mano...

Dato che questo codice esegue la macro se la cella DDE ha una variazione, vorrei vedere se dare una condizione, es. se nella cella DDE assume un valore =1 esegui macro.

Codice: Seleziona tutto
Sub Workbook_Open()
ActiveWorkbook.SetLinkOnData _
"RSLINX|'PLC'!'S2:0,L1,C1", _
"test"
End Sub


Mi potresti aiutare ?
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 12/11/10 00:26

Il lavoro che chiedi lo farai in testa alla macro Test, dove in testa metterai qualcosa come
Codice: Seleziona tutto
If Thisworkbook.Sheets("QualeFoglio").Range("A1").Value <> 1 Then Exit Sub
Dichiara completamente il nome del foglio; ho immaginato che la cella che si aggiorna e' A1.

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

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 12/11/10 10:48

Grazie, Anthony per l'aiuto, la routine ha funzionato egreggiamente

Codice: Seleziona tutto
Sub OUT()
If ThisWorkbook.Sheets("DATI").Range("B3").Value = 0 Then Exit Sub
[B3] = [B3] + 1
End Sub


Mi puoi dire la sintassi per andare a leggere e scrivere in un determinato sheet ?
Codice: Seleziona tutto
[B3] = [B3] + 1

Perchè rimanendolo così, mi scrive in tutti i sheet

Mille grazie.
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 12/11/10 12:58

Ok, risolto

Sub OUT()
If ThisWorkbook.Sheets("DATI").Range("B3").Value <> 0 Then Exit Sub
Sheets("DATI").Range("B4") = Sheets("DATI").Range("B3") + 1
End Sub
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 12/11/10 23:41

Bravo; ma poiche' quando ti cambia il dato potresti anche essere su un workbook diverso da quello in questione aggiungerai anche Thisworkbook, cioe
Codice: Seleziona tutto
Thisworkbook.Sheets("DATI").Range("B4").Value = Thisworkbook.Sheets("DATI"). Range("B3").Value +1
Domanda: ma vuoi fare B4=B3+1 o B3=B3+1??

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

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 13/11/10 09:21

Dato che è un contatore quindi devo usare [B3] = [B3] +1.

Ascolta Anthony, dato che sei molto più esperto di me, volevo fati una domanda. Io ho come client di posta elettronica Lotus Notes protetto da password, cioè quando lancio Lotus mi chiede la password (email aziendale).

Ho usato questa macro per inviare email :

Codice: Seleziona tutto
Dim UserName As String
Dim MailDbName As String
Dim Maildb As Object
Dim MailDoc As Object
Dim AttachME As Object
Dim Session As Object
Dim EmbedObj1 As Object

' Open and locate current LOTUS NOTES User

[color=#FF0000]Set Session = CreateObject("Notes.NotesSession")
UserName = Session.UserName
MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & " .nsf"
Set Maildb = Session.GETDATABASE("", MailDbName)
If Maildb.IsOpen = True Then
Else
Maildb.OPENMAIL
End If[/color]

' Create New Mail and Address Title Handlers

Set MailDoc = Maildb.CreateDocument

MailDoc.Form = "Memo"
MailDoc.SendTo = "test@gmail.com"


MailDoc.Subject = "BEN New Project"
MailDoc.Body = _
"Attached is a new BEN Project Request. Please let me know when it has been setup."

' Select Workbook to Attach to E-Mail

MailDoc.SaveMessageOnSend = False
attachment1 = "C:\Temp\New BEN Project.xls" ' Required File Name

If attachment1 <> "" Then
On Error Resume Next
Set AttachME = MailDoc.CREATERICHTEXTITEM("attachment1")
Set EmbedObj1 = AttachME.embedobject(1454, "attachment1", "C:\Temp\New BEN Project.xls", "") 'Required File Name
On Error Resume Next
End If

MailDoc.PostedDate = Now()
On Error GoTo errorhandler1
MailDoc.Send 0, Recipient

Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set Session = Nothing
Set EmbedObj1 = Nothing

errorhandler1:

Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set Session = Nothing
Set EmbedObj1 = Nothing

With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With

End Sub


Avviando la macro, se ho il Lotus in esecuzione, quindi con password inserita, l'email me la invia correttamente, mentre se il Lotus non è in esecuzione, mi fà partire il Lotus ma la macro si interrompe con il seguente errore "run-time error 8965 - The ID file is in use elsewere and cannot be modified" facendo il debug mi seleziona Maildb.OPENMAIL.

Ti chiedo
Nel codice che è in rosso dovrei inserire qualcosa inerente al Lotus , una volta inserito il tutto la routine funziona aprendo il lotus caricando l'apposito DB dell'utente, inserisce la password e invia l'email ?

Non so se mi puoi aiutare dato che il client Lotus non è molto usato , ma pultroppo nelle aziende preferiscono questo client ... che è di coccio.
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 13/11/10 09:23

Il codice in rosso , inizia da e finisce a :D
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 13/11/10 09:24

Cavolo :lol: inizia da [color=#FF0000 e finisce da /color]
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 14/11/10 01:12

Ho chiesto se vuoi fare B4=B3+1 o B3=B3+1 perche' la tua macro faceva B4=B3+1...

Per quanto riguarda l' invio di mail tramite Notes non ho questo ambiente e quindi non sono in grado di fare nessuna verifica.
Come unico suggerimento, vai nell' editor delle macro e fai Menu /Strumenti /Riferimenti; cerca tra le librerie elencate se ne hai una attinente al tuo ambiente di posta, e se c' e' lo spunti e riprovi.
Questo ti dovrebbe dare accesso agli oggetti, loro metodi e proprieta' anche se non fossero stati definiti con le dim.

Tuttavia c' e' da notare che l' applicazione Notes viene creata con l' istruzione
Set Session = CreateObject("Notes.NotesSession")
Quindi non e' nemmeno giusto dire " mentre se il Lotus non è in esecuzione etc etc" perche' la fase di CreateObject e' stata eseguita senza errori. Prova a guardare tramite task manager se il processo Notes e' in esecuzione o in che momento ci va.
Ne' vedo dove dai la password che certamente Notes vorra'.
Potrebbe anche essere che qualora Notes sia gia' in esecuzione (o di suo o perche' creato da una precedente esecuzione della macro non completata da quella sfilza di Nothing in coda) alla "riesecuzione" della macro si rifiuti di aprire una seconda sessione (cosa che e' attinente al messaggio di errore).

Insomma mi vengono solo domande e dubbi, su cui non posso fare nessuna prova per diradare la nebbia.
Mi spiace.

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

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 14/11/10 14:25

Grazie Anthony, molto preciso e chiaro.

Non vorrei disturbarti più di tanto, ma ho un altra piccola domanda da farti e poi non ti disturbo più , ho costatato con le persone che ho parlato, moderatori del forum, una preparazione eccellente, procedo la mia domanda :

Dovrei fare un report di orari, ho già il codice macro funzionante, dovrei sapere solo l'istruzione/codice per scrivere in celle diverse ogni volta che si genera la macro orario tipo :

Codice: Seleziona tutto
START  STOP
13.00  13.30
16.00  16.40


Non so se sono stato chiaro...
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[excel] eseguire macro al variare cella DDE":


Chi c’è in linea

Visitano il forum: Nessuno e 71 ospiti