Seite 1 von 1

BASIC-Laufzeitfehler. Objektvariable nicht belegt

Verfasst: Di, 15.12.2009 12:06
von oliver1804
Hallo liebe Gemeinde,

ich benutze folgende Prozedur:

Code: Alles auswählen

Option Explicit

' bei INSERT, UPDATE und DELETE Ident ins Formular-ResultSet eintragen
Sub insert_into_ResultSet(Optional oForm as Object, sFormname as String, sResultfield as String, iKz as Integer)

	' iKz = 0: INSERT/UPDATE
	' iKz = 1: DELETE
	
	Dim nSp as Long

	If isMissing(oForm) Then	
		oForm = ThisComponent.drawpage.forms.getByName(sFormname)
	End If
	
	nSp = oForm.findColumn(sResultfield)
	oForm.updateString(nSp,iUserID)
	
	' vor dem DELETE erfolgt ein UPDATE
	If iKz = 1 Then
		oForm.upDateRow()
	End If

End Sub

, die ich (in diesem Fall) mittels

Code: Alles auswählen

Sub insupd_editorid

	insert_into_ResultSet(,"MainForm","id_staff_editor",0)

End Sub
aufrufe.

Weshalb bekomme ich nun die Fehlermeldung, obwohl ich doch das Argument als optional übergebe?

Danke für die Hilfe
Oliver

Re: BASIC-Laufzeitfehler. Objektvariable nicht belegt

Verfasst: Di, 15.12.2009 13:44
von peterschleif
Hallo Oliver.

Du darfst optionalen Parametern keinen Datentyp zuweisen (außer Variant) sonst liefert IsMissing() immer False. Du müsstest den Datentyp also ganz weglassen oder Variant wählen.

Code: Alles auswählen

Sub insert_into_ResultSet(Optional oForm,            sFormname as String, sResultfield as String, iKz as Integer)
Sub insert_into_ResultSet(Optional oForm As Variant, sFormname as String, sResultfield as String, iKz as Integer)

Peter

Re: BASIC-Laufzeitfehler. Objektvariable nicht belegt

Verfasst: Di, 15.12.2009 14:06
von Stephan
Weshalb bekomme ich nun die Fehlermeldung, obwohl ich doch das Argument als optional übergebe?
Bin ich mir auch nicht im Klaren.

Du könntest diesen Parameter aber wohl ans Ende der Paramerterliste stellen, dann sollte e funktionieren auch wenn Du ddeen nicht übergibst.

Du darfst optionalen Parametern keinen Datentyp zuweisen (außer Variant) sonst liefert IsMissing() immer False.
Für mich nicht nachvollziehbar. In folgendem Beispiel wird trotz DEklaration als String bei IsMissing() True geliefert:

Code: Alles auswählen

Sub Main
   Main2("a",)
End Sub

Sub Main2(x As String, Optional y As String)
Msgbox isMissing(y)
End Sub


Gruß
Stephan

Re: BASIC-Laufzeitfehler. Objektvariable nicht belegt

Verfasst: Di, 15.12.2009 14:28
von peterschleif
Hallo Stefan.
Hallo Oliver.

Das stimmt. Bei Parametern am Ende der Liste geht es. Also entweder am Anfang lassen (ohne Typ bzw mit Variant) oder ans Ende setzen.
Gut zu wissen. :-)

Code: Alles auswählen

Sub Main
   Main2(,"a",)
End sub

Sub Main2(Optional w As String, x As String, Optional y As String)
	print isMissing(w), isMissing(y)
End Sub
Peter