corpse2001
Goto Top

Fehlermeldung Objekt erforderlich My obwohl es da ist

Hallo,

ich habe hier ein Script und bekomme die Fehlermeldung aus dem Titel.
Das Script soll eine Zahl aus einer Datei lesen dawas zurechnen die datei dann löschen und neie neue erstellen wo dann die neue zahl eingetrahen wird, das soll für einen Ticketzähler sein.

hier mein code:


Dim fileReader
fileReader = My.Computer.FileSystem.ReadAllText("C:\Ticket\nummer.txt")

fileReader = fileReader +1
MsgBox "Ticket#: " & fileReader

My.Computer.FileSystem.DeleteFile("C:\Ticket\nummer.txt")


Dim file As System.IO.FileStream
file = System.IO.File.Create("C:\Ticket\nummer.txt")

My.Computer.FileSystem.WriteAllText("C:\Ticket\nummer.txt", fileReader ,True)


kann mir da jemand helfen?

mfg corpse2001

Content-Key: 63970

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

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: bastla
bastla 17.07.2007 um 10:01:59 Uhr
Goto Top
Hallo corpse2001!

Eigentlich wäre für das Schreiben in eine Textdatei ein "StreamWriter"-Objekt zu empfehlen. Außerdem kannst Du mit dem Einlesen des Inhaltes der "nummer.txt" in einen String und nachfolgender Konvertierung zB in einen Integer Fehler wie etwa eine leere "nummer.txt" abfangen.

Unter diesen Gesichtspunkten könnte der Code etwa so aussehen:
Dim TicketFile As String = "C:\Ticket\nummer.txt"  
Dim NewNumber As Integer

Dim fileReader = My.Computer.FileSystem.ReadAllText(TicketFile)
If IsNumeric(fileReader) Then
	NewNumber = CInt(fileReader) + 1

	MsgBox("Ticket#: " & NewNumber)  

	My.Computer.FileSystem.DeleteFile(TicketFile)

	Dim file As New System.IO.StreamWriter(TicketFile)
	file.Write(NewNumber)
	file.Close()
Else
	MsgBox("Ungültiger Inhalt der " & TicketFile)  
End If

Grüße
bastla
Mitglied: corpse2001
corpse2001 17.07.2007 um 10:09:05 Uhr
Goto Top
Hallo,

danke für die schnelle antwort wenn ich das so benutze bekomme ich den fehler
Anweisungsende erwartet in Zeile 1 Zeichen 16

mfg corpse2001
Mitglied: bastla
bastla 17.07.2007 um 10:15:45 Uhr
Goto Top
Hallo corpse2001!

Dann vermute ich, dass Du kein VB2005 nutzt ...

Teile einfach die Zeile auf in
Dim TicketFile As String
TicketFile = "C:\Ticket\nummer.txt"  
Analog dazu auch die Vorgangsweise beim "Dim fileReader ..."

Grüße
bastla
Mitglied: corpse2001
corpse2001 17.07.2007 um 10:47:36 Uhr
Goto Top
ja das stimmt ich schreibe ds einfach mit dem editor.
wenn ich das nun teile bekomme ich leider den selben fehler.

mfg corpse2001
Mitglied: bastla
bastla 17.07.2007 um 10:59:07 Uhr
Goto Top
Hallo corpse2001!

Magst Du trotzdem verraten (beim nächsten Mal bitte gleich von Anfang an), unter welcher VB-Version Du das ausführen willst - falls es nämlich (wie mir scheint) VBScript sein sollte, wäre eher etwas in der Art angebracht:
Set fso = CreateObject("Scripting.FileSystemObject")  
TicketFile = "C:\Ticket\nummer.txt"  

If fso.FileExists(TicketFile) Then
	Set file = fso.OpenTextFile(TicketFile, 1)
	If Not file.AtEndOfStream Then
		fileReader = file.ReadLine
		If IsNumeric(fileReader) Then
			NewNumber = CInt(fileReader) + 1
			MsgBox "Ticket#: " & NewNumber  
			fso.CreateTextFile(TicketFile, True).Write(NewNumber)
		Else
			MsgBox "Ungültiger Inhalt der " & TicketFile  
		End If
	Else
		MsgBox TicketFile & " enthält keine Daten."  
	End If
Else
	MsgBox TicketFile & " nicht gefunden."  
End If

Grüße
bastla
Mitglied: corpse2001
corpse2001 17.07.2007 um 13:57:15 Uhr
Goto Top
Vielen dank das funktioniert wunderbar

Mfg corpse2001
Mitglied: corpse2001
corpse2001 17.07.2007 um 14:10:04 Uhr
Goto Top
Hallo,

eine frage habe ich doch noch.
kann ich das auch so machen das ichd as nicht über die MsgBox ausgebe sondern in ein Feld in einem Formual in Outlook 2003?

mfg corpse2001
Mitglied: bastla
bastla 17.07.2007 um 14:46:43 Uhr
Goto Top
Hallo corpse2001!

Der Code sollte so auch in VBA zu verwenden sein, daher müsstest Du nur den Variableninhalt von "NewNumber" in das Outlook-Formularfeld schreiben.

Grüße
bastla
Mitglied: corpse2001
corpse2001 17.07.2007 um 15:17:43 Uhr
Goto Top
Hallo,

ich habe des jetzt als Makro in das Formular eingebau ich weiss nun nur nicht wo ich das NewNumber eintragen muss damit das in einem Textfeld im Formular angezeigt wird

mfg corpse2001
Mitglied: bastla
bastla 17.07.2007 um 15:57:58 Uhr
Goto Top
Hallo corpse2001!

Am sinnvollsten wäre es, eine Function daraus zu machen, also
Function GetNextTicketNo() As Integer
Set fso = CreateObject("Scripting.FileSystemObject")  
TicketFile = "C:\Ticket\nummer.txt"  

If fso.FileExists(TicketFile) Then
    Set file = fso.OpenTextFile(TicketFile, 1)
    If Not file.AtEndOfStream Then
        fileReader = file.ReadLine
        If IsNumeric(fileReader) Then
            NewNumber = CInt(fileReader) + 1
            fso.CreateTextFile(TicketFile, True).Write(NewNumber)
        Else
            NewNumber = -1
        End If
    Else
        NewNumber = -2
    End If
Else
    NewNumber = -3
End If
GetNextTicketNo = NewNumber
End Function
Für die Zuweisung zum Feld kannst Du dann zur Sicherheit abfragen, ob die Nummer negativ ist (Kennzeichnung für einen aufgetretenen Fehler) und dann die Nummer zuweisen:
NewNum = GetNextTicketNo()
If NewNum < 0 Then
    MsgBox "Fehler " & Abs(NewNum) & " aufgetreten!"   
Else
    Feld.Text = NewNum
End If
Bitte beachten: Bei jedem Aufruf der Function wird die Ticket-Nummer in der Datei erhöht, daher, wie oben dargestellt, nur einmal aufrufen und das Ergebnis zwischenspeichern (Variable "NewNum"), um es dann auswerten zu können.

Zu ergänzen wäre noch ein verbessertes Errorhandling (fall zB kein Zugriffs- oder Schreibrecht auf die "nummer.txt" besteht, etc).

Grüße
bastla
Mitglied: corpse2001
corpse2001 18.07.2007 um 10:14:48 Uhr
Goto Top
Hallo ich habe nun noch ein Problem und zwar mit dem Teil:

Feld.Text = NewNum

Da bekomme ich einen Laufzeitfehler 424 und Objekt erwartet
Feld ist bei mir TextBox17

mfg corpse2001
Mitglied: bastla
bastla 18.07.2007 um 10:26:52 Uhr
Goto Top
Hallo corpse2001!

Der Fehler "Objekt erwartet" bei einer einfachen Zuweisung eines Textes zu einer TextBox ist für mich nicht nachvollziehbar. Du könntest zwar noch genauer sein und
TextBox17.Text = CStr(NewNum)
schreiben, was aber auch nichts bringen dürfte ...

Funktioniert denn zB ein
TextBox17.Text = "25"  

Grüße
bastla
Mitglied: corpse2001
corpse2001 18.07.2007 um 10:32:31 Uhr
Goto Top
Hallo,

nein das geht leider nicht. ich habe übrigens auch den alten code behalten weil ich das besser nachvollziehen kann also so sieht das aus bei mir:

Sub NewTicket()

Set fso = CreateObject("Scripting.FileSystemObject")
TicketFile = "V:\nummer.txt"

If fso.FileExists(TicketFile) Then
Set file = fso.OpenTextFile(TicketFile, 1)
If Not file.AtEndOfStream Then
fileReader = file.ReadLine
If IsNumeric(fileReader) Then
NewNumber = CInt(fileReader) + 1
MsgBox "Ticket#: " & NewNumber
fso.CreateTextFile(TicketFile, True).Write (NewNumber)
Else
MsgBox "Ungültiger Inhalt der " & TicketFile
End If
Else
MsgBox TicketFile & " enthält keine Daten."
End If
Else
MsgBox TicketFile & " nicht gefunden."
End If
TextBox17.Text = CStr(NewNumber)
End Sub


MFG corpse2001
Mitglied: bastla
bastla 18.07.2007 um 10:45:04 Uhr
Goto Top
Hallo corpse2001!

Bezieht sich "geht nicht" auch auf die Zuweisung eines konstanten Wertes, also
TextBox17.Text = "26"  
In diesem Fall wäre das Problem auf der linken Seite des "=" zu suchen ...

Zu Deinem Code: Der richtige Platz für die Zuweisung wäre zwar so wie unten dargestellt, aber auch das wird am Fehler 424 nichts ändern.
Sub NewTicket()

Set fso = CreateObject("Scripting.FileSystemObject")  
TicketFile = "V:\nummer.txt"  

If fso.FileExists(TicketFile) Then
	Set file = fso.OpenTextFile(TicketFile, 1)
	If Not file.AtEndOfStream Then
		fileReader = file.ReadLine
		If IsNumeric(fileReader) Then
			NewNumber = CInt(fileReader) + 1
			fso.CreateTextFile(TicketFile, True).Write(NewNumber)
			MsgBox "Ticket#: " & NewNumber  
			<b>TextBox17.Text = CStr(NewNumber)</b>
		Else
			MsgBox "Ungültiger Inhalt der " & TicketFile  
		End If
	Else
		MsgBox TicketFile & " enthält keine Daten."  
	End If
Else
	MsgBox TicketFile & " nicht gefunden."  
End If
End Sub

Grüße
bastla

P.S.: Beim Posten von Code bitte die entsprechenden Tags < code> und < /code> (jeweils ohne Leerzeichen) verwenden.
Mitglied: corpse2001
corpse2001 18.07.2007 um 10:48:27 Uhr
Goto Top
Hallo,

"geht nicht" bezieht sich auf beides also TextBox17.Text = "26" und TextBox17.Text = "CStr(New...)

ich hatte das auch schon unter die MsgBox ausgabe gepackt hat aber auch nicht geholfen.

mfg corpse2001
Mitglied: bastla
bastla 18.07.2007 um 10:57:21 Uhr
Goto Top
Hallo corpse2001!

In diesem Fall versuche es mit einer neuen TextBox, da, wie erwähnt, der Fehler auf dieser Seite liegen muss (erklären kann ich ihn mir trotzdem nicht).

Lass ev auch einmal das ".Text" weg ...

Grüße
bastla
Mitglied: corpse2001
corpse2001 19.07.2007 um 15:05:53 Uhr
Goto Top
Hallo,

ich habe mir da nun was anderes überlegt und zwar schreibe ich die NewNumber einfach in den Betreff
codeauszug:

Set objOL = New Outlook.Application
Set objNS = objOL.GetNamespace("MAPI")
Set objFolder = objNS.GetDefaultFolder(olFolderContacts)

Dim objOLApp As Outlook.Application
Dim NewTask As Outlook.TaskItem
Set objOLApp = New Outlook.Application
Set NewTask = objOLApp.CreateItem(olTaskItem)
NewTask.Subject = "Ticket#: " & NewNumber
NewTask.Display

und dann habe ich noch ne frage und zwar wenn ich nun die Nummer nciht mehr aus ner *.txt datei haben will sondern aus ner datenbank wie kann ich das machen ich habe da schon ne ganze weile nach gegoogelt aber nichts gefunden ich habe mit Access 2003 eine db1.mdb angelegt wodrin eine Tabelle ist und mit wenigen Feldern ID 1 Ticketnummer 10000
im prinzip will ich nun mit der datenbank das gleich machen wie mit der textdatei vorher falls das möglich ist

mfg
corpse2001
Mitglied: bastla
bastla 19.07.2007 um 15:17:09 Uhr
Goto Top
Hallo corpse2001!

An sich wäre die nächste Frage schon einen neuen Beitrag Wert (wenn ich's mir recht überlege, auch schon die vorige face-wink), aber vielleicht noch kurz eine andere Strategie: Falls die Nummer nicht für mehrere Benutzer verfügbar sein muss, könntest Du Dir einmal "SaveSetting" und "GetSetting" ansehen - damit kannst Du den Wert in der Registry hinterlegen ...

Grüße
bastla
Mitglied: corpse2001
corpse2001 23.07.2007 um 08:59:07 Uhr
Goto Top
hallo,

ich mach mal nen neuen auf das soll für mehrere Benutzer sein.

gruß
corpse2001

[Edit Biber]
Thx, @corpse2001.
Finde ich nett und das macht es einfacher, später mal Antworten wiederzufinden.
Ich schließe diesen Beitrag hier dann.

Gruß Biber
[/Edit]