# WinCC VBA auf Excel zugreifen



## Move (28 Februar 2011)

Hallo Leute,

ich suche mir schon seit langer Zeit einen Wolf.
Ich suche ein Beispielscript in "C" oder VBA auf WinCC Seite um Werte aus einer Excel-Liste auf entsprechende WinCC Variable zu schreiben.
Hab auch was gefunden, laut Verfasser lauffähig, bei mir aber nicht
Was mach ich nur falsch, bin ein Laie auf diesem Gebiet.
Also die Syntaxüberprüfung sagt alles ok.
In WinCC Runtime ist Gobal Script aktiviert
Brauche ich hier noch ne Triggervariable so wie unter "C"
Wie erkenne ich, das das Script überhaupt bearbeitet wird
Oder ist in der Syntax doch noch was falsch?

Gruß Move

Hier mal das Script:

Sub procedure1
Dim excel, wbActive, wsActive 
'Create an Excel-Application object 
Set excel = CreateObject("Excel.Application") 
Set wbActive = excel.Workbooks.Open("C:\Mappe1.xls") 
Set wsActive = wbActive.Worksheets("Tabelle1") 

'----------------- WinCC Variable schreiben -------------------- 
Dim objTag 
Set objTag = HMIRuntime.Tags(Test_Ex) 
objTag.Value = wsActive.cells(1,1).Value 
objTag.Write 
'Set objTag = HMIRuntime.Tags(\"Schritt_2\") 
'objTag.Value = wsActive.cells(4,3).Value 
'objTag.Write 
End Sub


----------



## Larry Laffer (28 Februar 2011)

Hallo,
du brauchst auf alle Fälle ein Trigger-Ereignis - von sich aus laufen die Scripte nicht.
Zum Herumspielen könntest du es ja einfach mal auf eine Taste legen.

Außerdem solltest du in dem Script das Workbook nach Gebrauch auch noch wieder schliessen und die Applikation (Excel) wieder beenden.

Gruß
Larry


----------



## Move (28 Februar 2011)

Larry Laffer schrieb:


> Hallo,
> du brauchst auf alle Fälle ein Trigger-Ereignis - von sich aus laufen die Scripte nicht.
> Zum Herumspielen könntest du es ja einfach mal auf eine Taste legen.
> 
> ...


 
Mag sein, nur wie mache ich das


----------



## volker (28 Februar 2011)

hast du hier mal geschaut?
http://www.sps-forum.de/showthread.php?t=15348


----------



## Move (28 Februar 2011)

Hi,

ich hab schon soviel geschaut, dies u.a. auch. Nur sehe ich vor lauter Bäume den Wald nicht mehr, zumal ich hier nichts zum laufen bringe.
Das Script was ich geposte habe sollte meiner Meinung nach laufen?
Muss ich das VBA Script jetzt wie unter bei C-Scripten triggern, wenn ja wie, ich finde da nix.

Man ist das ein schei.....Thema

Gruß
Move


----------



## volker (28 Februar 2011)

von wincc hab ich leider keine ahnung.
aber so etwas wie irgendwas ausführen wenn grenzwert überschritten wird oder so sollte es bestimmt geben.


----------



## Larry Laffer (28 Februar 2011)

... und da kann man es auch ganz sicher auch an eine Schaltfläche hängen ...

Ist es wirklich WinCC oder WinCCFlexibel ?


----------



## Move (28 Februar 2011)

Hi,

ist schon WinCC


----------



## Kai (28 Februar 2011)

Move schrieb:


> Sub procedure1
> Dim excel, wbActive, wsActive
> 'Create an Excel-Application object
> Set excel = CreateObject("Excel.Application")
> ...


 
Im WinCC-Variablenname fehlen die Anführungsstriche:

Sub procedure1
Dim excel, wbActive, wsActive 
'Create an Excel-Application object 
Set excel = CreateObject("Excel.Application") 
Set wbActive = excel.Workbooks.Open("C:\Mappe1.xls") 
Set wsActive = wbActive.Worksheets("Tabelle1") 

'----------------- WinCC Variable schreiben -------------------- 
Dim objTag 
Set objTag = HMIRuntime.Tags(* "*Test_Ex*"*) 
objTag.Value = wsActive.cells(1,1).Value 
objTag.Write 
'Set objTag = HMIRuntime.Tags(\"Schritt_2\") 
'objTag.Value = wsActive.cells(4,3).Value 
'objTag.Write 
End Sub

Gruß Kai


----------



## Move (28 Februar 2011)

Hi,

ja habe ich auch gemerkt, geändert , aber tut sich trotzdem nix.

Gruß
Move


----------



## Kai (28 Februar 2011)

Bei mir funktioniert das folgende VBScript als Aktion in WinCC Global Script:


```
Option Explicit
Function action
 
Dim objExcel 
Dim objWBExcel
Dim objWSExcel
 
Dim objTag
 
Set objExcel = CreateObject("Excel.Application") 
Set objWBExcel = objExcel.Workbooks.Open("F:\Mappe1.xls")
Set objWSExcel = objWBExcel.Worksheets("Tabelle1")
 
Set objTag = HMIRuntime.Tags("Excel")
objTag.Value = objWSExcel.Cells(1, 1).Value
objTag.Write
 
objWBExcel.Close
objExcel.Quit
 
End Function
```
 




Das VBScript hat in WinCC Global Script einen zyklischen Trigger von 10 Sekunden:





Gruß Kai


----------



## Kai (28 Februar 2011)

Nachtrag:

Im WinCC Explorer muss in der Komponente "Rechner" im Dialog "Eigenschaften Rechner" (Auswahl über das Kontextmenü) in der
Registerkarte "Anlauf" ein Haken bei "Global Script Runtime" stehen:




Gruß Kai


----------



## Move (2 März 2011)

Hallo Kai,

danke für deine Hilfe.
Ich galube das Problem liegt bei mir beim Trigger.
Wenn ich das Trigger-Symbol aktiviere, bekomme ich nur den Reiter Info.
Der Reiter Trigger fehlt bei mir
Was kann das sein.
Alle anderen Einstellungen wie von dir beschrieben habe ich soweit schon gehabt.

Gruß
Move


----------



## Move (2 März 2011)

Hallo Kai,

ich bin es nochmal, habs jetzt gefunden, muss natürlich eine Aktion anlgegen und kein Modul. Jetzt ist auch der Trigger da.

Ich schätze jetzt wirds auch funzen, probiere es gleich morgen aus

Dankw


----------



## Kai (3 März 2011)

Vielen Dank für die Rückmeldung. 

Gruß Kai


----------

