mschyska
Goto Top

VBS - Object als Return Value einer Funktion

Hallo,

wie gebe ich aus einer Funktion ein Object als return value zurück und wie greife ich dann darauf zu?

Was ist hier falsch:

Set objFSO = CreateObject("Scripting.FileSystemObject")  

Set objFile1 = CreateTextFile("d:\temp\huhu", True)  

WScript.Echo objFile1.Path

Function CreateTextFile(strFile, OverWriteFlag)

On Error Resume Next
	
Set CreateTextFile = objFSO.CreateTextFile(strFile, OverWriteFlag)

If Err.Number <> 0 Then
	WScript.Echo "CreateTextFile: Fehler beim Anlegen von " & strFile  

	If Err.Number = -2147024784 Then
		WScript.Echo "Fehlernr. " & Err.Number & ": nicht genügend Plattenplatz"  
	Else
		WScript.Echo "Fehlernr. " & Err.Number & ": " & Err.Description  
	End If
End If

On Error GoTo 0

End Function ' CreateTextFile  

Content-Key: 52396

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

Printed on: April 23, 2024 at 06:04 o'clock

Member: bastla
bastla Feb 22, 2007 at 16:40:14 (UTC)
Goto Top
Hallo MSchyska!

Auch wenn ich der Function nicht den Namen einer FSO-Methode gegeben, sondern sie vielleicht "MakeTextFile" genannt hätte, funktioniert die Funktion. face-wink

Der Fehler entsteht erst beim Test, da ein offenes "TextFile"-Objekt keine "Path"-Eigenschaft hat. Versuch zB statt der "WScript.Echo"-Zeile
objFile1.WriteLine "Dieses Textfile wurde mit einer Function erstellt."  
objFile1.Close

Grüße
bastla
Member: MSchyska
MSchyska Feb 23, 2007 at 09:00:37 (UTC)
Goto Top
Hallo bastla,

du hast recht, so funktioniert es.

Danke

MSchyska
Member: MSchyska
MSchyska Feb 23, 2007 at 09:59:56 (UTC)
Goto Top
Hallo bastla,

Dein Vorschlag funktioniert im Erfolgsfall (d.h. wenn ich eine Textdatei anlegen kann).
Wenn das Anlegen der Textdatei aber einen Fehler produziert bekomme ich in der Zeile

Set objFile1 = CreateTextFile("d:\temp\huhu", False)  

die Fehlermeldung

C:\Scripts\tObject1.vbs(3): Exception: Object required: 'CreateTextFile(...)'  

Wie kann ich den Fehler nach Aufruf der Funktion "CreateTextFile" sauber abfangen?

Gruß

MSchyska
Member: bastla
bastla Feb 23, 2007 at 10:45:23 (UTC)
Goto Top
Hallo MSchyska!

Wenn die Funktion kein Objekt zurückliefert, erhältst Du als Ergebnis "Nothing", also müsste
If Not CreateTextFile("d:\temp\huhu", False) = Nothing Then Set objFile1 = CreateTextFile("d:\temp\huhu", False)  
funktionieren. Allerdings wird bei jedem Aufruf der Funktion versucht, die Textdatei zu erzeugen, was bei einem nicht gewünschten Überschreiben das Vorhaben eigentlich schon zum Scheitern verurteilt ...

Alternativ kannst Du es natürlich über "On Error" versuchen, aber ich frage mich, wozu Du überhaupt den ganzen Aufwand treiben willst (nur wegen des in der Funktion selbst verwendeten Errorhandlings?). Eine Diskussion über saubere Programmierung möchte ich im Zusammenhang mit Scripting allerdings nicht führen ...

Grüße
bastla