Jedes Datumsformat erkennen

  • VBScript

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Tombowski.

    Jedes Datumsformat erkennen

    Hi Zusammen
    bin neu hier in dem Forum und bräuchte mal eure Hilfe.

    über eine Eingabe wird ein x-beliebiges Datumsformat eingeben zB. hh:mm:ss TT.MM.JJJJ oder JJ-MM-TT,hh:mm
    oder JJJJ-TT-MM__hh,mm
    ein Button soll überprüfen ob dieses Format in der zu durchsuchenden Variable vorliegt oder nicht

    mit dem RegEx Tutorial hab ich mich schon ziemlich weit eingelesen bräuchte aber dringend eure Hilfe

    kann ich RegEx in VBS überhaupt nutzen?
    und falls ja wie setzte ich dann das Format zusammen nach dem gesucht werden soll

    Thanxx

    Vielen Dank schon mal vorab für eure Hilfe
    Hi Peterfido

    genau so habe ich es auch die ganze Zeit gemacht bis einer in die Variable 1234567890,12334 eingetragen hat und die isdate weder die THEN noch die ELSE schleife gemacht hat.
    Die Variable ist im Übrigen eine Excelzelle die folgende benutzerdefinierte TT.MM.JJJJ hh:mm Formatierung hat.
    Genau solche "Fehleingaben" wollte ich versuchen auszuschließen bzw in die Else -Schleife zu schicken.
    ich bin zwar auch anfänger, habe jedoch mit date.parseexact schon entsprechendes erledigt.

    siehe hier: msdn.microsoft.com/de-de/library/w2sa9yss(v=vs.110).aspx

    edit: in einem string array könntest du verschiedene varianten von möglich eingaben hinterlegen. parseexact ist gut wenn vorher die eingabe definiert wird,

    mit date.parse versucht .net über einige varianten zum glück zu finden, dürfte noch einfacher sein in deinem fall.
    Gruß Hannes

    Tombowski schrieb:

    weder die THEN noch die ELSE schleife gemacht hat
    Abgesehen von der Tatsache, dass If..Then..Else keine Schleife, sondern eine bedingte Verzweigung ist, kann es nicht passieren, dass weder der eine noch der andere Zweig ausgeführt wird.
    Wenn keiner der Zweige angesteuert wird, wird die Abfrage schon gar nicht erreicht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Tombowski schrieb:

    weder die THEN noch die ELSE schleife gemacht hat
    Abgesehen von der Tatsache, dass If..Then..Else keine Schleife, sondern eine bedingte Verzweigung ist, kann es nicht passieren, dass weder der eine noch der andere Zweig ausgeführt wird.
    Wenn keiner der Zweige angesteuert wird, wird die Abfrage schon gar nicht erreicht.

    wie gesagt wenn ein Wert in der Excel Zelle Steht den Excel auch als Datum interpretieren kann ist alles ok dann wird der Then Zweig bearbeitet und falls in der Zelle eine 0 oder gar nichts drinsteht geht die Verzweigung in den else Zweig.
    nur wenn in der Zeile z.B. 1234567890,12334 steht (in Excel als benutzerdefiniertes Format TT.MM.JJJJ hh:mm ) dann bleibt es stehen - wenn man so will noch vor der Verzeigung und macht gar nichts mehr
    anbei hab ich mal den Code mitgeschickt vielleicht hat jemand noch ne idee warum diese Eingabe nicht erkannt wird

    Sub OnClick(Byval Item)



    Dim excel
    Dim wsActive
    Dim wbActive
    Dim strWBName

    Set excel = CreateObject("Excel.Application")
    excel.Visible = False 'True Excel im Hintergrund öffnen



    '------------------- Excel Datei im Hintergrund öffnen (getestet) ----------------------------------------------------------
    Set wbActive = excel.Workbooks.Open("D:\Ordner\Datei.xls") ' mit festem Dateinamen und Pfad



    '------------------ WorksheetName eingeben (getestet)--------------
    Set wsActive = wbActive.Worksheets("Tabelle1")

    '---------------- Zeilennummer des ersten Datensatzes (getestet)----------------
    Dim Znr ' Zeilennummer
    Znr = InputBox("Bitte geben Sie die Zeilennummer des ersten Datensatzes ein", "Znr", "")
    If Znr = "" Then
    wscript.quit
    End If

    '---------------- Anzahl der Tage/ (getestet)----------------
    Dim AnzTage ' Anzahl der einzulesenden Tage
    AnzTage = InputBox("Bitte geben Sie die der Tage", "AnzTage", "")
    If AnzTage = "" Then
    wscript.quit
    End If
    '----------------- WinCC Variable schreiben ------------------
    'wsActive.cells(2,1) = Zeile 2, Spalte 1

    Dim Zeitstempel_1
    Dim Zeitstempel_2
    Dim zeile
    Dim spalte
    Dim DSNr
    Dim i
    Dim DSEnde

    DSEnde = AnzTage * 96
    zeile = Znr
    spalte = 1
    HMIRuntime.Trace "Anzahl der Tage =" & AnzTage & vbCrLf 'Textausgabe
    HMIRuntime.Trace "DSEnde = " & DSEnde & vbCrLf 'Textausgabe

    For i = zeile To DSEnde + zeile


    'Zeitstempel aus Excel auflösen und in Variable schreiben
    '--------------------------------------------------------

    'HMIRuntime.Trace "Zeitstempel_1.Value vorher =" & Zeitstempel_1 & vbCrLf 'Textausgabe

    Zeitstempel_1 = wsActive.cells(i,spalte).Value 'Wert aus Zeitspalte auslesen
    HMIRuntime.Trace "Zeitstempel_1.Value =" & Zeitstempel_1 & vbCrLf

    DSNr = i - zeile + 1 'Datensatznummer berechnen
    HMIRuntime.Trace "DSNr =" & DSNr & vbCrLf 'Text

    If IsDate(Zeitstempel_1)Then
    HMIRuntime.Trace "Zeitstempel_1.Value =" & Zeitstempel_1 & " ist gültig" & vbCrLf
    Else
    HMIRuntime.Trace "Zeitstempel_1.Value =" & Zeitstempel_1 & " ist kein Zeitformat oder 0" & vbCrLf
    Exit For
    End If


    Zeitstempel_2 = CDate(Zeitstempel_1) ' konvertiert in ein Standard Datum und Zeitformat
    HMIRuntime.Trace "Zeitstempel_2.Value =" & Zeitstempel_2 & vbCrLf

    Next

    MsgBox "Es wurden " & DSNr - 1 & " Datensätze in die Steuerung geschrieben", vbOKOnly

    '---------------- Alles Schliessen ---------------------------------
    wbActive.Close 'Exceldatei schliessen (Workbook)
    excel.Quit 'Programm Excel Schliessen
    Set wbActive = Nothing 'Speicher der benutzten Variable Freigeben
    Set excel = Nothing 'Speicher der benutzten Variable Freigeben

    HMIRuntime.Trace "ENDE" & vbCrLf & vbCrLf 'Textausgabe
    End Sub
    Beim Testen würde ich Excel nicht verstecken (Visible=false).

    HMI.Runtime sagt mir nichts. Im Debugger funktioniert das:

    Quellcode

    1. debug.print isdate("1234567890,1234")
    2. Falsch


    Teste es doch mal ohne dieses HMI aus.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    peterfido schrieb:

    debug.print isdate("1234567890,1234")
    Falsch
    Wenn ein deutsches Excel verwendet wird, kann in der Zelle tatsächlich eine Kommazahl drin stehen.
    Beim Einlesen in eine VBA-Variable wird der Zellinhalt jedoch regionsspezifisch gelesen und in eine gültige Double konvertiert.
    Deswegen vermute ich hier eher keinen Fehler.

    Mir erschliesst sich die genaue Umgebung des TE nicht so richtig.
    Die HMI Runtime sagt mir auch nichts.

    Ich könnte mir jedoch vorstellen, dass die Zeile

    Tombowski schrieb:

    If IsDate(Zeitstempel_1)Then
    syntaktisch falsch ist, weil nach der Klammer in Leerzeichen fehlt.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    kurz zur erklärung.
    Das Script läuft in einer WinCC applikation und mit HMI.Runtime kann ich auf Variablen aus der Steuerung (z.b.S7-400) zugreifen bzw mir in ein APDIAG-Fenster Werte einer Variablen etc anzeigen lassen (nur zu testzwecken)
    also alle Zeilen mit HMIRuntime.Trace könnten auskommentiert werden

    @petaod
    für mich zum Verständnis, was meinst du mit TE in
    "Mir erschliesst sich die genaue Umgebung des TE nicht so richtig"