# WinCC-Variablenwerte in Excel-Sheet eintragen



## MKP (8 September 2006)

Hallo zusammen!

Ich möchte aus meinem WinCC-Projekt heraus zu bestimmten Zeiten Prozesswerte in eine vorgefertigte Excel-Tabelle eintragen. Vom Prinzip her soll das so ablaufen:

-Beim Start einer Schrittkette in der Steuerung soll im Hintergrund von WinCC eine vorgefertigte Excel-Tabelle geöffnet werden.
->Während der Schrittkette werden zu bestimmten Zeiten Variablenwerte in bestimmte Zellen des Excel-Sheets eingetragen.
->Nach Beenden der Schrittkette soll die Datei automatisch abgespeichert werden. Dabei soll der Wert einer WinCC-Textvariablen als Dateiname übernommen werden.

Ist dies mit WinCC möglich. Der Siemens-Support hat mich auf das OPC-DA-Beispiel in der WinCC-Hilfe verwiesen, aber da ich von VB keine Ahnung habe, komme ich damit nicht zurecht .

Vielen Dank für Eure Hilfe!


----------



## Praktikant (8 September 2006)

hi, versuche es mal damit.
leider konnte ich es nicht testen.


Dim DATA1
Dim DATA2
Dim SFC_RUN
Dim Dateiname
Dim objExcelApp

Set DATA1         = HMIRuntime.Tags("DATA1")
Set DATA2         = HMIRuntime.Tags("DATA2")
Set SFC_RUN     = HMIRuntime.Tags("SFC_RUN")
Set Dateiname     = HMIRuntime.Tags("Dateiname")
Set objExcelApp = CreateObject("Excel.Application")

    objExcelApp.Visible = False
    objExcelApp.Workbooks.Open Dateiname.Read(1)
    If SFC_RUN.Read(1) = 1 Then
        objExcelApp.Range("A4").Select
        objExcelApp.ActiveCell.FormulaR1C1 = "Wert 1:"
        objExcelApp.Range("A5").Select
        objExcelApp.ActiveCell.FormulaR1C1 = "Wert 2:"
        objExcelApp.Range("A6").Select
        objExcelApp.ActiveCell.FormulaR1C1 = "Summe:"
        objExcelApp.Range("B4").Select
        objExcelApp.ActiveCell.FormulaR1C1 = DATA1.Read(1)
        objExcelApp.Range("B5").Select
        objExcelApp.ActiveCell.FormulaR1C1 = DATA2.Read(1)
        objExcelApp.Range("B6").Select
        objExcelApp.ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
    Else
        objExcelApp.ActiveWorkbook.Save    
        objExcelApp.Workbooks.Close
        objExcelApp.Quit
    Set objExcelApp = Nothing
    End If


----------



## MKP (11 September 2006)

Vielen Dank für die schnelle Antwort!

Könntest du das Script vielleicht kommentieren? Ich habe wie gesagt von VB keine Ahnung. Habe daher Schwierigkeiten, meine Variablen in das Script einzubauen, einen Pfad zuzuordnen usw.

Muss ich das Script als globale Aktion ausführen, oder kann ich es z.B. als Aktion auf einen Button legen?


----------



## MKP (12 September 2006)

Hab das Script jetzt hinbekommen. Nur zwei Sachen bereiten mir noch Kopfzerbrechen: 

- Ich möchte die Excel Datei unter dem Namen einer Variablen in einem bestimmten Pfad speichern. Wie bringe ich die Variable in der Pfadangabe unter? 

- Wie kann ich in VB Datum und Uhrzeit auslesen und ebenfalls in das Excel-Sheet übertragen?

Vielen Dank für Eure Hilfe!


----------



## Praktikant (12 September 2006)

objExcelApp.Workbooks.Open "c:\pfad\" + Dateiname.Read(1)

und schaue dir mal die date und time funktionen an.


----------



## Praktikant (12 September 2006)

*dialog script*

vielleicht kannst du das auch gebrauchen.

Dim strFilename, Dialog, fso, Filename
Set Dialog = CreateObject("MSComDlg.CommonDialog")

'Explorer-Dialog zum Speichern von Dateien
'Titelzeile
Dialog.MaxFileSize = 260 ' Init buffer (NECESSARY!)
'Dialog.Flags = &H1004 ' Datei muss vorhanden sein
Dialog.Flags = &H0004 ' datei muss nicht vorhanden sein

'Filter setzen
Dialog.Filter = "All Files (*.*)|*.*|"  & "Excel Files (*.xls) |*.xls*|"

Dialog.DialogTitle = "Save Current Values"

' Filter auf xls setzen
Dialog.FilterIndex = 2

'Flags setzen: Explorer-Dialog mit langen Dateinamen
Dialog.Flags = &H1814

'Dialog.ShowOpen
Dialog.ShowSave

Filename = Dialog.Filename
Filename = Filename & ".xls"

Set Dialog = Nothing


----------



## MKP (13 September 2006)

Ich möchte die Variante "Speichern unter" verwenden, da ich auf ein vorgefertigtes Excel-Sheet zugreife. Die Anweisung sieht folgendermaßen aus: 

objExcelApp.ActiveWorkbook.SaveAs "D:\Ordner\... .xls"

An die Stelle '...' muss ich nur irgendwie meinen Dateinamen bringen.

Die Date- und die Time-Funktion habe ich mir in der VB-Hilfe angeschaut. Aber die Übertragung der Werte in Excel funktioniert nicht mit der gleichen Syntax wie bei den WinCCVariablen.


----------



## Praktikant (13 September 2006)

wenn ich das richtig vestehe, möchtest du eine vorlage bearbeiten und unter einem anderen namen speichern?

zu 1.
mein vorschlag wäre die vorlage zuerst in die neue datei zu kopieren und dann diese über das script zu füllen und speichern.

Das folgende Beispiel zeigt die Verwendung der *Copy*-Methode:Dim fso, MeineDatei
Set fso = CreateObject("Scripting.FileSystemObject")
Set MeineDatei = fso.GetFile("c:\vorlage.xls")
MeineDatei.Copy "c:\ergebnisse.xls"
​zu 2.
objExcelApp.ActiveWorkbook.SaveAs "D:\Ordner\"+ Dateiname.Read(1) +".xls"

zu 3.
 objExcelApp.Range("B4").Select
 objExcelApp.ActiveCell.FormulaR1C1 = Time
 objExcelApp.Range("B5").Select
 objExcelApp.ActiveCell.FormulaR1C1 = Date


----------

