TIA Sommerzeitumstellung für Comfort Panels TP mit S7-300 CPU

Zuviel Werbung?
-> Hier kostenlos registrieren
Aber nach Ausführung dieses VB Skript, kann ich mein Runtime nicht stoppen und in Windows CE Umgebung zu gelangen
Kein Wunder, dein Skript läuft ja auch endlos.....

Du kannst dein Skript nicht als eigenen "Task" parallel laufen lassen. Wenn das Skript ausgeführt wird, "steht" deine Visu erst einmal und wartet bis das Skript beendet wurde.
 
Mein Do Loop wird nur solgange widerholt so viel dateien zu kopieren sind (z.B 5 Dateien werden kopiert und Inhalt von SD Karte gelöscht.
Falsch. Wie schon von faust und DeltaMikeAir geschrieben wurde, läuft Dein Skript endlos, weil Dein Do...Loop keinerlei Bedingungen zum Beenden und auch kein Exit Do enthält. siehe die Beschreibung von Do...Loop, z.B. hier

Und weil Du gleich am Anfang des Skriptes On Error Resume Next stehen hast, wird das Skript auch nicht bei den Runtime-Errors innerhalb der Schleife gestoppt und auch keine Runtime-Error-Systemmeldungen ausgegeben...

2. Andere Frage: im meinem Skript, folgende Showsystemalarm Meldungen Zeilen werden nicht als Textmeldung ausgegeben, die habe ich außer Loop am Ende eingefügt. Habt Ihr Idee warum ShowSystemalarm nach Loop nicht angezeigt wird?
Weil die Programmausführung gar nicht bis zu den ShowSystemAlarm-Meldung hinter der Do...Loop-Endlosschleife kommt

Code:
   Set fs = Nothing
  Set fso = Nothing

    Err.Clear
   On Error GoTo 0
Diese Anweisungen am Ende des Skriptes sind unnötig. Auf die anderen Code-Leichen gehe ich nicht ein.
Nur zu fs.Dir() - das löst Du viel zu umständlich. Für eine Dir()-Sequenz muß fs.Dir() genau zweimal aufgerufen werden: einmal vor der Schleife mit der Übergabe des Dateipfades und Dateinamen-Muster und holen des ersten passenden Dateinamens, und einmal in (am Ende) der Schleife ohne Parameter zum Abholen der weiteren passenden Dateinamen.

Hier mal ein ungetesteter Vorschlag, wie Dein Skript ungefähr aussehen sollte:
Code:
Sub MoveArchiveFiles()
'alle Dateien von "\Storage Card SD\Archiv" nach "\\NetzPC\Archiv" verschieben
'Skript für Panel unter Windows CE - funktioniert nicht in Panel-Simulation auf PC (Abbruch bei CreateObject)

Dim fs, filename, sourcepath, destpath, sourcefilename, destfilename

sourcepath = "\Storage Card SD\Archiv"
destpath   = "\\NetzPC\Archiv"

Set fs = CreateObject("FileCtl.FileSystem") 'wenn hier Runtime-Error, dann wird Skript mit Systemmeldung abgebrochen


'*** Ziel Netzwerk-Freigabe erreichbar? Evtl. keine Rechte? Der Check kann einige Sekunden dauern!
If fs.Dir(destpath) = "" Then
    ShowSystemAlarm "Ziel '" & destpath & "' nicht erreichbar!"
    Exit Sub 'Skript beenden, weiterführen nicht sinnvoll
End If

'*** Quellordner existiert? SD-Card gesteckt?
filename = fs.Dir(sourcepath)
If filename = "" Then
    ShowSystemAlarm "Quellordner '" & sourcepath & "' nicht gefunden!"
    Exit Sub 'Skript beenden, weiterführen nicht sinnvoll
End If


'? Weil ALLE Dateien verschoben werden sollen, muß Dir() nicht nochmal mit Dateinamen-Muster aufgerufen werden?
'! Prüfen, ob womöglich die Einträge "." und ".." geliefert werden, und was passiert dann beim Kill und FileCopy?
'! Prüfen, ob gefundene Einträge womöglich Ordner/Verzeichnisse sind! (fs.GetAttr)


'Ab hier können verschiedene Runtime-Errors auftreten, die besonders behandelt werden sollen
On Error Resume Next

'*** in Schleife jede gefundene Datei kopieren/archivieren und anschließend löschen
Do While filename <> ""   'And filename <> "." And filename <> ".." ?

    destfilename = destpath & "\" & filename
    sourcefilename = sourcepath & "\" & filename

    'DEBUG: in Testphase jeden Dateiname ausgeben
'    ShowSystemAlarm "Datei '" & sourcefilename & "' nach '" & destfilename & "' kopieren ..."

    'FileCopy erzeugt Runtime-Error, wenn Zieldatei schon existiert
    'deshalb wenn Zieldatei schon existiert, dann vor dem Kopieren löschen
    If fs.Dir(destfilename) <> "" Then fs.Kill destfilename

    'Datei kopieren
    fs.FileCopy sourcefilename, destfilename

    'ist evtl. bei Kill oder FileCopy ein Runtime-Error aufgetreten? Dann Meldung und Skript abbrechen
    If Err.Number <> 0 Then
        ShowSystemAlarm "Runtime-Error " & CStr(Err.Number) & " " & Err.Description & " beim Kopieren von '" & filename & "'"
        Exit Sub  'Skript abbrechen, weiterführen nicht sinnvoll
    End If

    'wenn kein Fehler beim Kopieren, dann Quelldatei löschen
    fs.Kill sourcefilename

    If Err.Number <> 0 Then
        ShowSystemAlarm "Runtime-Error " & CStr(Err.Number) & " " & Err.Description & " beim Löschen von '" & sourcefilename & "'"
        Exit Sub  'Skript abbrechen, weiterführen nicht sinnvoll
    End If

    'weitere Datei vorhanden?
    filename = fs.Dir()
Loop

'*** Erfolgs/Fertigmeldung
'If Err.Number <> 0 Then
    ShowSystemAlarm "Dateien erfolgreich nach Netzwerk verschoben."
'End If

End Sub

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Falsch. Wie schon von faust und DeltaMikeAir geschrieben wurde, läuft Dein Skript endlos, weil Dein Do...Loop keinerlei Bedingungen zum Beenden und auch kein Exit Do enthält. siehe die Beschreibung von Do...Loop, z.B. hier


Hier mal ein ungetesteter Vorschlag, wie Dein Skript ungefähr aussehen sollte:
hallo Harald,
Mit Exit do habe erst später festgestellt, dass ich keine Bedingung zum Verlassen der Schleife habe.

Ich habe in Quellordner 2 Dateien zum Testen abgelegt. Bei Ausführung deines Codes, wird nur einzige folgende Runtime Error ausgegeben:
Code:
Runtime-Error -2147024894 The system cannot find the file specified.__ beim Kopieren von 'PDF'";
 
Bei Ausführung deines Codes, wird nur einzige folgende Runtime Error ausgegeben:
Code:
Runtime-Error -2147024894 The system cannot find the file specified.__ beim Kopieren von 'PDF'";
Ja dann schau in den Code des Skiptes, wo die Meldung mit "Runtime-Error" und "beim Kopieren von" vorkommt. Und wieso da von Dir() eine Datei mit Name "PDF" gefunden wurde...

Kann es sein, daß Du in dem Ordner "\Storage Card SD\Archiv" noch einen Unterordner "PDF" hast?
Wenn da noch Ordner vorhanden sind, dann muß (wie ich im Skript schon als Hinweis geschrieben habe) noch geprüft werden:
Code:
'! Prüfen, ob gefundene Einträge womöglich Ordner/Verzeichnisse sind! (fs.GetAttr)

Alternativ: Ändere das Suchmuster der Dateisuche so, daß evtl. vorhandene Ordner (in der Regel ohne Dateierweiterung) gar nicht erst gefunden werden, indem Du nur nach Dateien mit einer bestimmten Dateierweiterung (z.B. "*.pdf") suchst.

Harald
 
Zurück
Oben