costello
Goto Top

VBS-Script verursacht eine Fehlermeldung!

Hallo zusammen,

meine Geburtstag-Erinnerung .vbs Datei verursacht die folgende Fehlermeldung:
Skript:        C:\Daten\birthday.vbs
Zeile:          36
Zeichen:      7
Fehler:        Typen unverträglich: 'DateValue'  
Code:         800A000D
Quelle:        Laufzeitfehler in Microsoft VBScript
und hier die Quelle:
Dim objFileSystem
Dim objFile
Dim objTextStream
Dim szConfigFile
Dim szBirthday, szName, szThisYear, szNextYear, szComparisonDate
Dim szMessage
Dim iTime
Dim iDifference

' Standardwerte für einige Variablen  
szConfigFile = "C:\DATEN\BIRTHDAY.INI"  
iTime        = 5

szMessage    = ""  
szThisYear   = CStr(Year(date))
szNextYear   = CStr(Year(date)+1)

Set objFileSystem = CreateObject("Scripting.FileSystemObject")  

' Config-Datei ermitteln, ...  
If objFileSystem.FileExists(szConfigFile) Then

   ' ... öffnen...  
   Set objFile = objFileSystem.OpenTextFile(szConfigFile)

   ' ... und zeilenweise abarbeiten  
   Do until objFile.atEndOfStream
   
      ' Geburtstag und Name des Geburtstagskindes lesen  
      szBirthday = objFile.read(6)
      szName = objFile.readLine

      ' Wieviele Tage sind es noch bis zum nächsten Geburtstag?  
      szComparisonDate = szBirthday & szThisYear
      iDifference = DateDiff("y", date, DateValue(szComparisonDate))  
      
      ' Falls der nächste Geburtstag allerdings erst im nächsten Jahr liegt  
      if (CInt(iDifference) < 0) then
         szComparisonDate = szBirthday & szNextYear
         iDifference = DateDiff("y", date, DateValue(szComparisonDate))     
      end if

      ' Wenn die Anzahl der Tage innerhalb der Frist liegt  
      if (CInt(iDifference) <= iTime) then
         szMessage = szMessage & szName & " am " & szComparisonDate & " - noch " & iDifference & " Tage" & Chr(10)    
      end if
      
   Loop
   objFile.close
   
else
   MsgBox "Die Config-Datei " & szConfigFile & " ist nicht vorhanden!", vbCritical, "Fehler"  
end if

' Falls vorhaben, Liste der nächsten Geburtstage ausgeben  
If szMessage<>"" Then  
   MsgBox szMessage, vbInformation, "Die nächsten Geburtstage"  
End If
Die .ini Datei sieht z.B. wie folgt aus:
01.01. ich 
02.02. du
als birthday.ini gespeichert.
OS ist WinXP SP2.Die Frage wäre ob die Datei noch zum reparieren ist.
Falls jemand eine Lösung hätte dann würde ich mich sehr freuen!
Ich muss auch zugeben das meine Programmierkenntnise gleich null sind!

Schöne Grüsse,
costello

Content-Key: 78149

Url: https://administrator.de/contentid/78149

Printed on: April 18, 2024 at 16:04 o'clock

Member: bastla
bastla Jan 14, 2008 at 23:40:55 (UTC)
Goto Top
Hallo costello!

Mein Tipp wäre eine fehlerhafte Zeile in der "birthday.ini" ...

Zum Testen könntest Du nach
szName = objFile.readLine
die Zeile
WScript.Echo szBirthday & " " & szName  
einfügen und das Script von der Kommandozeile (Start / Ausführen... / cmd) wie folgt starten:
cscript //nologo "C:\Scripts\Birthday.vbs" 
(sinnvoller Weise solltest Du statt "C:\Scripts\Birthday.vbs" den Pfad zu Deinem Script verwenden face-wink).

So kannst Du erkennen, nach welchem Datum / Namen der Fehler eintritt.

Grüße
bastla

P.S.: Bitte zum Posten von Code < code> / < /code>-Tags (ohne Leerzeichen) verwenden - dann wäre hoffentlich auch ersichtlich, ob das Script mit einer Leerzeile beginnt, da sich ansonsten die Zeilenangabe 36 schwer nachvollziehen lässt. Dies gilt auch für das Zeichen 7 - hier hätte ich eigentlich 1 erwartet.
Member: costello
costello Jan 15, 2008 at 01:14:44 (UTC)
Goto Top
Hallo Bastla,

danke für die schnelle Antwort.Für das Posten muss ich sagen Mea Culpa, habe nicht geachtet, jetzt weiss ich!Das Script beginnt tatsächlich mit einer Leerzeile.Dann ist hier der Hund begraben (mehr oder weniger):
     
      iDifference = DateDiff("y", date, DateValue(szComparisonDate))  
Hier noch einmal die Quelle (hoffentlich gut formatiert!!!).Die eingefügte Zeile hat nach der überprüfung allen Datum / Namen Einträgen die selbe Fehlermeldung wie oben beschrieben gebracht.
Noch einmal danke für deine Hilfe!
Schöne Grüsse,
costello

Dim objFileSystem
Dim objFile
Dim objTextStream
Dim szConfigFile
Dim szBirthday, szName, szThisYear, szNextYear, szComparisonDate
Dim szMessage
Dim iTime
Dim iDifference

' Standardwerte für einige Variablen  
szConfigFile = "C:\DATEN\BIRTHDAY.INI"  
iTime        = 5

szMessage    = ""  
szThisYear   = CStr(Year(date))
szNextYear   = CStr(Year(date)+1)

Set objFileSystem = CreateObject("Scripting.FileSystemObject")  

' Config-Datei ermitteln, ...  
If objFileSystem.FileExists(szConfigFile) Then

   ' ... öffnen...  
   Set objFile = objFileSystem.OpenTextFile(szConfigFile)

   ' ... und zeilenweise abarbeiten  
   Do until objFile.atEndOfStream
   
      ' Geburtstag und Name des Geburtstagskindes lesen  
      szBirthday = objFile.read(6)
      szName = objFile.readLine
      
      ' Wieviele Tage sind es noch bis zum nächsten Geburtstag?  
      szComparisonDate = szBirthday & szThisYear
      iDifference = DateDiff("y", date, DateValue(szComparisonDate))  
      
      ' Falls der nächste Geburtstag allerdings erst im nächsten Jahr liegt  
      if (CInt(iDifference) < 0) then
         szComparisonDate = szBirthday & szNextYear
         iDifference = DateDiff("y", date, DateValue(szComparisonDate))     
      end if

      ' Wenn die Anzahl der Tage innerhalb der Frist liegt  
      if (CInt(iDifference) <= iTime) then
         szMessage = szMessage & szName & " am " & szComparisonDate & " - noch " & iDifference & " Tage" & Chr(10)    
      end if
      
   Loop
   objFile.close
   
else
   MsgBox "Die Config-Datei " & szConfigFile & " ist nicht vorhanden!", vbCritical, "Fehler"  
end if

' Falls vorhaben, Liste der nächsten Geburtstage ausgeben  
If szMessage<>"" Then  
   MsgBox szMessage, vbInformation, "Die nächsten Geburtstage"  
End If
Member: bastla
bastla Jan 15, 2008 at 06:49:55 (UTC)
Goto Top
Hallo costello!

Das Script beginnt tatsächlich mit einer Leerzeile.
... dann kommt zumindest einmal die Position des Fehlers bei Zeichen 7 hin ...

Den Fehler kann ich reproduzieren, allerdings nur mit einer ini-Zeile der Art "02.22. du", also einem ungültigen Datumsbestandteil.

Die eingefügte Zeile hat nach der überprüfung allen Datum / Namen Einträgen die selbe Fehlermeldung wie oben beschrieben gebracht.
Die eingefügte Zeile soll dabei helfen, die (vor)letzte korrekte Zeile der ini zu finden, da nach Verarbeitung einer fehlerhaften Zeile das Script abbricht - insofern darf diese Zeile keine Fehlermeldung verursachen.

Falls Deine ini-Datei sehr umfangreich sein sollte, kannst Du die Bildschirmausgabe des Scripts auch in eine Datei umleiten, indem Du es wie folgt aufrufst:
cscript //nologo "C:\Scripts\Birthday.vbs" > C:\Protokoll.txt 

Falls Du mit freiem Auge tatsächlich kein fehlerhaftes Datum erkennen kannst, müssen wir eine Prüfung der Daten per Script versuchen ...

Grüße
bastla

P.S.: Danke für die Formatierung.
Member: costello
costello Jan 15, 2008 at 20:13:40 (UTC)
Goto Top
Hallo Bastla,

Herzlichen Dank für deine kompetente Hilfsbereitschaft.Nach viel Rumbastlerei und Suche nach selbst eingebauten Fehlern funktioniert das Script!

Mein Tipp wäre eine fehlerhafte Zeile in der "birthday.ini" ...

Hier hast du Recht gehabt!Nachdem ich vieles versucht habe und nichts funktioniert hat, habe mich entschlossen die .ini Datei neu zu editieren und zwar habe ich eine kopie der Datei erstellt, die originale umbenannt (beliebig) und angefangen mit den einzelnen "Datum / Namen" einzutragen. Nachdem keine Fehlermeldung zu sehen war habe ich die anderen "Datum / Namen" Einträgen mit copy / paste dazugefügt.Weshalb die original .ini Datei beschädigt war bleibt mir (mindestens) ein Rätsel!

Schöne Grüsse,

costello