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

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 15/11/10 00:33

Alla domanda finale preferisco non rispondere :D
Se vuoi mettere un orario in una cella di un foglio del file su cui gira la macro, puoi usare qualcosa come
Codice: Seleziona tutto
Thisworkbook.Sheets("Foglio1").Range("V1").Value = Time

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

Sponsor
 

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 15/11/10 11:39

Perchè preferisci non rispondere ??? Mi interessa più quello della storicizzazione degli orari.
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 15/11/10 14:46

La domanda finale era
"Non so se sono stato chiaro..."
La mia risposta e': non so, io non ho capito.

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

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 15/11/10 18:06

Caro Anthony, è un semplice storico di orari, ho una routine DDL che quando si verifica un errore fa partire la macro e scrive l'ora e la data in una cella. A me serve che l'ora e la data generata,in sequenza, me le esporta o in altro file excel oppure in uno specifico file di testo. Non so se mi son spiegato bene... ;)
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Charly_new » 15/11/10 18:19

Ciao a tutti.
premiums ha scritto:... già acquisisco dati da plc e me li visualizza in una cella excel

Scusa premiums se mi permetto di inserirmi nel tuo post senza portare nessun aiuto.
Vorrei chiederti con quale tipo di collegamento passi i dati dal PLC al computer e se serve avere installato OPC dedicati.
Io ho provato recentemente con un PLC Siemens serie 200 e 300 ma senza successo.
Grazie :)
Avatar utente
Charly_new
Utente Junior
 
Post: 59
Iscritto il: 08/03/10 15:57

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 16/11/10 15:58

Salve Charly, e scusa x la risposta in ritardo, non posso fare netun tipo di prova con i simens , dato che le prove sono su plc Rockwell.

Comunque vedo se ti posso aiutare, per comunicare con i plc rockwell si usa un programma, chiamato rslinx, che comunica il plc in campo con l'apposito software per effettuare modifiche al ladder contenuto nel plc.

Non so se simens ha anch'esso questo programma, e se questo programma e dotato della funzione OPC/DDE.

Se non hai un OPC per catturare i dati a caldo dal plc non puoi visualizzarlo su excel.

Mi sembra che il prg che ti serve è OPC ware
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Charly_new » 16/11/10 21:58

Per prima cosa grazie mille per avermi dato risposta.
Purtroppo non conosco PLC Rockwell, a malapena smanetto con Siemens.
Comunque, venendo agli OPC, quel che mi è stato passato, "per buono", sono questo codice:
Codice: Seleziona tutto
Option Explicit
Option Base 1 '** Arrays in OPC always start at index 1

'Dichiarazione dati globali
Const NumItems = 9
Const OPCName As String = "OPC.SimaticNET"
Public ServerObj As OPCServer
Public WithEvents GroupObj As OPCGroup
Dim ItemObj(NumItems) As OPCItem
Dim ItemValue(NumItems) As Variant
Dim ItemQuality(NumItems) As Variant
Dim ItemTimeStamp(NumItems) As Variant
Dim V(NumItems) As Range
Dim i As Integer
Dim VarsNames(NumItems) As String
e questa macro:
Codice: Seleziona tutto
Sub readitems_Click()

'***********************************************************
' readitems_Click macro
'***********************************************************
'Start connection
Set ServerObj = New OPCServer
'ServerObj.Connect ()
ServerObj.Connect (OPCName)
Set GroupObj = ServerObj.OPCGroups.Add("readitems")

VarsNames(1) = "S7:[OPC]DB10,B0"
VarsNames(2) = "S7:[OPC]DB10,CHAR1"
VarsNames(3) = "S7:[OPC]DB10,W2"
VarsNames(4) = "S7:[OPC]DB10,INT4"
VarsNames(5) = "S7:[OPC]DB10,DINT6"
VarsNames(6) = "S7:[OPC]DB10,WORD10"
VarsNames(7) = "S7:[OPC]DB10,DWORD12"
VarsNames(8) = "S7:[OPC]DB10,X16.0"
VarsNames(9) = "S7:[OPC]DB10,REAL18"
'VarsNames(10) = "S7:[OPC]DB10,STRING22.10,1"


'Display VarNames
For i = 1 To NumItems
    Set V(i) = Range(Cells(6 + i, 4), Cells(6 + i, 4))
    V(i).Value = VarsNames(i)
Next

For i = 1 To NumItems
 Set ItemObj(i) = GroupObj.OPCItems.AddItem(VarsNames(i), i)
Next

For i = 1 To NumItems
   ItemObj(i).Read OPCDevice, ItemValue(i), ItemQuality(i), ItemTimeStamp(i)
Next
 
'Display values
For i = 1 To NumItems
    Set V(i) = Range(Cells(6 + i, 5), Cells(6 + i, 5))
    V(i).Value = ItemValue(i)
Next

'End connection
For i = 1 To NumItems
 Set ItemObj(i) = Nothing
 Set V(i) = Nothing
Next

ServerObj.OPCGroups.RemoveAll
Set GroupObj = Nothing
ServerObj.Disconnect
Set ServerObj = Nothing

End Sub

e il foglio1 strutturato cosi:
Immagine

Per ora, al di la del tipo di collegamento tra PLC e pc, non capisco come posso ovviare a queste segnalazioni di errore.
    prima segnalazione:
Immagine

    seconda segnalazione:
Immagine

Di nuovo tante grazie per la disponibilità!
Avatar utente
Charly_new
Utente Junior
 
Post: 59
Iscritto il: 08/03/10 15:57

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 17/11/10 02:03

Scusate se mi intrometto, vorrei segnalare a Charlie_new che non e' chiaro se sta' facendo delle domande o se comunica solo la sua esperienza.

Per premiums
A me serve che l'ora e la data generata,in sequenza, me le esporta o in altro file excel oppure

Ignoro quindi l' esempio precedente
START STOP
13.00 13.30
16.00 16.40

e assumo che vuoi un report del tipo
Orario
10:33
14:05
18:21
Per questo:
-apri un file vuoto, lo intesti in A1 di Foglio1 con la scritta Orario
-salvi il file col nome Report.xls
Poi userai dentro la tua macro il codice
Codice: Seleziona tutto
Workbooks("Report.xls").Sheets("Foglio1").Range(rows.count,1).End(xlUP).Offset(1,0) = Time

Il file Report.xls deve essere aperto quando la macro e' stata attivata.
Allo scopo potrebbe essere utile inserire dentro il "modulo ThisWorkbook" il seguente codice
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbooks("Report.xls").Close SaveChanges:=True     
End Sub

Private Sub Workbook_Open()
Workbooks.Open Filename:="Report.XLS"
Thisworkbook.Activate
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Workbooks("Report.xls").Save
End Sub

La prima macro chiude il file Report.xls, salvandone le modifiche, quando si chiude il tuo file principale (quello di cui abbiamo parlato e su cui gira la macro legata al dde); la seconda apre Report.xls quando si apre il file principale; la terza salva anche Report.xls tutte le volte che si salva il file principale.

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

Re: [excel] eseguire macro al variare cella DDE

Postdi Charly_new » 17/11/10 14:14

Anthony47 ha scritto:vorrei segnalare a Charlie_new che non e' chiaro se sta' facendo delle domande o se comunica solo la sua esperienza.
... in realtà ponevo un'altro dubbio a premium, in quanto aveva già gentilmente dato una sua risposta ad una mia domanda fatta in precedenza.
Avatar utente
Charly_new
Utente Junior
 
Post: 59
Iscritto il: 08/03/10 15:57

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 17/11/10 22:50

Grazie Anthony, per le tue info proverò il tuo codice. Per il dubbio che avevi, è difficile farti capire scrivendo ma ci provo,

quando si genera un errore un determinato bit và a 1 e viene scritto sulla cella A1 la datae ora, quando l'errore è terminato il bit và a 0 quindi nella cella B1 scrive data e ora, il prox errore che si genera dovrebbe scrivere data e ora in A2 e quando termina in B2 e così via...errore on A3 errore of B3....

ahahah che spiegazione ....

e si dovrebbe generare una tabella simile :
A B
1 10.00 10.30
2 11.00 11.20
3 12.00 12.10

percaso hai capito ??? :lol:
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 18/11/10 01:59

Credo di aver capito.
Rispetto a quanto ti avevo suggerito aggiungerai gli If per determinare se e' e' "Errore on" oppure "Errore off". Quindi
Codice: Seleziona tutto
If Thisworkbook.Shets("quale").range("laCellaCheFa1/0").value = 1 then _
Workbooks("Report.xls").Sheets("Foglio1").Range(rows.count,1).End(xlUP).Offset(1,0) = Time
If Thisworkbook.Shets("quale").range("laCellaCheFa1/0").value = 0 then _
Workbooks("Report.xls").Sheets("Foglio1").Range(rows.count,1).End(xlUP).Offset(0,1) = Time

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

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 18/11/10 10:42

Grazie mille , Anthony . Lo proverò subito e ti farò sapere il risultato ;)
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi premiums » 18/11/10 12:57

Anthony, ti spiego come ho impostato la cosa per effettuare il test del codice :

1) ho creato un file excel con nome Report.XLS
2) ho creato un file con nome test.xlsm in Thisworkbook ho inserito il seguente codice :

Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbooks("Report.xls").Close SaveChanges:=True
End Sub

Private Sub Workbook_Open()
Workbooks.Open Filename:="Report.XLS"
ThisWorkbook.Activate
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Workbooks("Report.xls").Save
End Sub


e in module, la macro

Codice: Seleziona tutto
Sub ERRORE_ON()
Workbooks("Report.xls").Sheets("Sheet1").Range(Rows.Count, 1).End(xlUp).Offset(1, 0) = Time
End Sub


ho salvato tutto, ho lanciato il file report, rimanendolo aperto come mi consigli tu, ma al momento che lancio test.xlsm mi compare l'errore tun-time error 1004 sarebbe che non trova il file report.xlm.

Dove sbaglio ? :undecided:
premiums
Utente Junior
 
Post: 21
Iscritto il: 04/11/10 11:20

Re: [excel] eseguire macro al variare cella DDE

Postdi Anthony47 » 18/11/10 22:41

Quello che dici purtroppo contiene qualche imprecisione che non mi consente di capire con certezza quello che ti succede:
-il file Report si chiama Report.xlsx o come?
-la macro quale file "report" cerca di aprire, indirizzare, salvare e chiudere? Cioe' c' e' coerenza tra il nome del file e come lo stesso viene chiamato nelle macro?
-aggiungo anche che il file Report deve essere nella directory di default usata da excel; per evitare equivoci e' utile, nella macro Private Sub Workbook_Open(), inserire Directory completa e nome file, cioe' qualcosa come Workbooks.Open Filename:="C:\PercorsoCompleto\Report.XLS". Sarebbe stato piu' giusto averlo detto prima.
-quale istruzione va in errore e in quale momento?
-se hai messo quelle istruzioni in ThisWorkbook allora il file Report non dovrebbe essere aperto manualmente prima di lanciare il file principale, perche' ci pensa la macro Private Sub Workbook_Open() ad aprirlo, come pure la Private Sub Workbook_BeforeClose a chiuderlo (purche' il nome del file impostato nella macro corrisponda al nome del file esistente sul Pc)

Se con queste domande/informazioni non ti si chiarisce, posta ancora.

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

Precedente

Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti