TIA TIA V18 / VB-Script Excel SaveAs "Variabler Dateiname" ?

Chris1803

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gemeinde,
ich brauche mal Hilfe bei den VB-Skripten. Es soll ein Produktionsreport erstellt werden welcher den Dateinamen ,"Report_", und dann Datum und Uhrzeit, tragen soll.

Die Idee dahinter:
Es wird über VB eine Excel-Vorlage geöffnet, die entsprechenden Werte in Zeilen und Spalten eingetragen und das Dokument unter einem neuen Dateinamen gespeichert und Excel wieder geschlossen.

Wie generiere ich einen neuen Dateinnamen der aus einem DB kommt?
Als Beispiel: Report_05-07-23_08-52-45.xlsx

Wobei [aktuelles-Datum] und [aktuelle-Uhrzeit] als STRING-Variable vorliegen.

Stand IST:

Code:
Sub Export()
Dim excel, exscheet, filepath, savepath
Dim count, check
Dim t, d
Dim val1, val2, val3

count = 4
check = 0

val1= SmartTags("DB-Variable")
val2= SmartTags("DB-Variable")
val3= SmartTags("DB-Variable")

t= Time
d= Date

filepath = "D:\Daten\Rohprotokoll.xlxs"
savepath = val1

    Set excel = CreateObject("Excel.Application")
    Set exscheet = excel.Workbooks.Open(filepath)
    excel.Visible = 0

    Do until check = 1
    If exscheet.Sheets(1).cells(count,1).value = "" Then
    check = 1
    Else
    count = count + 1
    check = 0
    End If

    Loop

    exscheet.Sheets(1).cells(count,1).value = d&" "&t
    exscheet.Sheets(1).cells(count,2).value = val1
    exscheet.Sheets(1).cells(count,3).value = val2
    exscheet.Sheets(1).cells(count,4).value = val3

    If Err.Number <> 0 Then
        exsheet.Close
        excel.Quit
    End If


    exsheet.SaveAs val1
    exsheet.Close
    excel.Quit
    Set exsheet = Nothing
    Set excel = Nothing
    count = 4
End Sub

Mein Problem liegt jetzt darin, dass wenn ich wie im Code zu sehen "val1" vorbelege mit zb "D:\Daten\Rohprotokoll_2.xlxs" funktioniert der Script einwandfrei. Nur ein variabler Dateiname will mir nicht gelingen. Ich habe in der PLC schon diverse Versuche unternommen den String korrekt aufzubauen dass im DB hinterher "D:\Daten\Rohprotokoll_2.xlxs" inkl der "" stand, aber beim Ausführen der Funktion kommt ein Error...

Ich hoffe ich habe mein Problem verständlich erklären können.

Kann jemand helfen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich vermute es darf keine " in den STRING sein.

aber beim Ausführen der Funktion kommt ein Error...
Ist es eine Geheimniss, welche Error ?

Abgesehen davon, du hast kein ON ERROR RESUME NEXT und Abfrage von das ERR Objekt.
Du kannst eine Systemmeldung bilden damit du eine Anfang hat um das Problem zu identifizieren.
Ungefähr so:
Code:
If Err.Number <> 0 Then
    ShowSystemAlarm "Script error." & Err.Number & " " & Err.Description
    Err.Clear
    Exit Sub
End If
 
Wie bekommst Du den Dateiname aus der PLC in Dein HMI? Als normale HMI-Variable? Wie wird die Variable aktualisiert? Das Skript wartet nicht auf die Aktualisierung der HMI-Variablen. Versuche mal, bei der HMI-Variable die Erfassungsart auf "zyklisch fortlaufend" zu stellen.

Warum bildest Du den Zeitstempel-String für den Dateiname nicht im HMI?

Tip: Bilde den Zeitstempel-String nicht nach dem Muster DD_MM_YYYY (Jahr zuletzt) sondern nach dem Muster YYYYMMDD (Jahr zuerst).
PS: Doppelpunkt ':' ist in Dateinamen unzulässig.

Harald
 
@PN/DP
Vielen Dank Harald,
dein Tip war Gold wert. Es waren tatswahrhaftig die " : " im String..... jetzt läuft es wie gedacht.

Zu deinen Fragen:
Wie bekommst Du den Dateiname aus der PLC in Dein HMI? Als normale HMI-Variable? Wie wird die Variable aktualisiert?
Ja als normale HMI-Variable. Am Produktionsende wird, bevor der Script ausgeführt wird, die Variable in den DB geschrieben. Diese wird zyklisch jede sek aktualisiert.

Warum bildest Du den Zeitstempel-String für den Dateiname nicht im HMI?
Weil ich noch nicht so fit bin in VB und auch mit deiner Anleitung das nicht klappen wollte :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank Harald,
dein Tip war Gold wert. Es waren tatswahrhaftig die " : " im String..... jetzt läuft es wie gedacht.
Den Tip hatte auch Larry Laffer schon im Beitrag #5

Zu deinen Fragen:

Ja als normale HMI-Variable. Am Produktionsende wird, bevor der Script ausgeführt wird, die Variable in den DB geschrieben. Diese wird zyklisch jede sek aktualisiert.
"Zyklisch im Betrieb" oder "Zyklisch fortlaufend"?
Bei der Standard-Einstellung "Zyklisch im Betrieb" werden Variablen nur aktualisiert, wenn sie verwendet werden (*). Wenn die WinCC Runtime nicht weiß, daß eine Variable verwendet wird, dann wird sie erst nach der Verwendung im Skript aktualisiert (das Skript wartet nicht auf den aktuellen Wert!) und arbeitet im Skript mit dem Wert der letzten Aktualisierung (das kann schon laaange her sein) oder dem Startwert, wenn sie noch nie aktualisiert wurde.

(*) verwendet: irgendwo im Bild verwendet. Oder der Button zum Aufruf des Skriptes ist irgendwo im aktiven Bild, dann werden die im Skript sichtbar verwendeten HMI-Variablen bei "Bild aufgebaut" aktualisiert. Wird der Name einer HMI-Variablen erst im Skript zusammengebastelt, dann weiß die WinCC Runtime vor dem Zugriff im Skript nichts von der Verwendung! Oder die Erfassungsart ist auf "Zyklisch fortlaufend" eingestellt, dann wird die Variable immer aktualisiert, egal ob der Wert gebraucht wird oder nicht. Das belastet die HMI-Kommunikation mit der PLC und sollte deshalb nur für ganz wenige Variablen aktiviert werden, wenn es nicht anders/besser geht.

Wenn Du auch noch weitere Werte aus der PLC in die Excel-Datei schreiben willst, dann gilt auch hier: diese Werte müssen vor Aufruf des Skriptes garantiert aktualisiert in das HMI übertragen werden! Das geht in der Regel nur mit Handshake, z.B. als Rezeptur. Oder alle diese Werte müssten "Zyklisch fortlaufend" eingestellt werden und mit Glück sind die Werte dann beim Skriptaufruf aktuell im HMI. Zu der Problematik benutze mal die Forumssuche mit dem Suchwort: GetDataRecordTagsFromPLC

Weil ich noch nicht so fit bin in VB und auch mit deiner Anleitung das nicht klappen wollte :)
Wenn für den Dateiname auch die Uhrzeit der HMI Runtime verwendet werden darf, dann braucht der Dateiname-Datum/Uhrzeit-String nicht (unsicher) von der PLC ins HMI übertragen werden. Dann kann der Dateiname inkl Datum/Uhrzeit im HMI im Skript ganz einfach erzeugt werden. Der Code aus der FAQ könnte so in Dein Skript integriert werden:
Code:
Dim t, d
Dim val1, val2, val3

count = 4
check = 0

'aus der Systemzeit einen String in der Form "YYYYMMDD_hh_mm" (z.B. "20991231_01_59") erzeugen
t = Now  'Systemzeit (Lokalzeit des HMI)
d = Year(t) & Right("0" & Month(t), 2) & Right("0" & Day(t), 2) & "_" _
  & Right("0" & Hour(t), 2) & "_" & Right("0" & Minute(t), 2)

val1= "D:\Daten\Report_" & d & ".xlxs"
val2= SmartTags("DB-Variable")
val3= SmartTags("DB-Variable")

t= Time
d= Date

filepath = "D:\Daten\Rohprotokoll.xlxs"
savepath = val1

...

Harald
 
Zuletzt bearbeitet:
Gut das es geklappt hat.
Es finde es überraschend das " erlaubt ist in den STRING Variabel für excel.Workbooks.Open(filepath)
Hier ist ein Bild von eine ähnliche Programm.
winccflex_decimal_2-jpg.20884

Das Ein/Ausgabe Feld zeigt die Pfadname wie es an die fso.OpenTextFile übergibt werden. Also, ohne die ".
 
Zurück
Oben