BASIC-Laufzeitfehler. Argument ist nicht optional.

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

BASIC-Laufzeitfehler. Argument ist nicht optional.

Beitrag von zachy »

Hallo Leute,

zur Zeit vesuche ich mich an OOo-Basic, bin Neuling auf dem Gebiet, es macht mir aber viel Spaß. Um reinzukommen habe ich ein Buch.

Zur Zeit bin ich bei dem Thema "Prozeduren und Funktionen", genauer beim Aufruf der Prozedur. Ich habe das Beispiel aus dem Buch exakt in der IDE abgetippt, bekomme aber folgenden Fehler:
BASIC-Laufzeitfehler. Argument ist nicht optional.

Hier das Beispiel:

Code: Alles auswählen

sub test (a as integer, optional b as integer)
	if isMissing(b) then b = 0
	msgbox "Summe ist " & (a+b)
end sub
Kann nicht nachvollziehen wo der Fehler liegt, weil ich den Code ja genau so aus dem Buch abgetippt habe.

Also, vielen Dank schon mal im voraus für Eure Hilfe.

Ich wünsche allen hier einen schönen Sonntag und einen guten Start in die Woche.

In diesem Sinne :-D
Gruß zachy
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

Beitrag von komma4 »

Willkommen im Forum.

Du rufst die Routine test direkt auf - das ist nicht zulässig, da mindestens ein Parameter mitgegeben werden muss.

Versuche

Code: Alles auswählen

SUB calltest

CALL test (1)
CALL test(2, 3)

END SUB

Das hilft Dir weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

Beitrag von zachy »

komma4 hat geschrieben:Willkommen im Forum.

Du rufst die Routine test direkt auf - das ist nicht zulässig, da mindestens ein Parameter mitgegeben werden muss.

Versuche

Code: Alles auswählen

SUB calltest

CALL test (1)
CALL test(2, 3)

END SUB

Das hilft Dir weiter?
Hallo und vielen Dank für deine Antwort.

Nein, im Moment hilft es mir leider nicht weiter da ich den Zusammenhang noch nicht verstanden habe. Nach meinem Verständnis muss ich doch zuerst die Routine definieren, um sie später aufrufen zu können. Und das mache ich meiner Ansicht nach doch, indem ich den vor mir genannten Code eingebe:

Code: Alles auswählen

sub test (a as integer, optional b as integer)
   if isMissing(b) then b = 0
   msgbox "Summe ist " & (a+b)
end sub
Die Routine sagt doch folgendes aus: Übergebe definitiv eine Variable (nämlich a) und optional eine zweite (nämlich b). Fehlt b in dem Aufruf, soll b den Wert 0 erhalten, damit das Ergebnis nicht verfälscht wird.
Anschließend soll über eine Messagebox der Text "Summe ist " und dann die Summe von a und b ausgegeben werden.
Mir ist unklar, warum ich die Routine damit direkt aufrufe. Bzw. wie müsste ich das Sub "test" denn umschreiben, damit kein Fehler erzeugt wird und ich sie anschließend wie von dir beschrieben aufrufen kann?

Viele Grüße
zachy
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

Beitrag von theindless »

Hallo Zachy,

ich denke du hast Winfried falsch verstanden:

Du startest deine Sub "test" vermutlich über "Macro ausführen" oder eine Schaltfläche.
Da deine Sub aber mindestens eine Angabe für Parameter "a" benötigt, funktioniert das so nicht.
Eine Sub, die zwingend einen Parameter benötigt, kann nicht so gestartet werden, sondern muss aufgerufen werden und der Aufruf muss den Parameter enthalten.

Du kannst die Sub auch nicht "umschreiben", da der Parameter beim Aufruf benötigt wird.

Machbar wäre, dass du eine zweite Sub schreibst, wie von Winfried beschrieben, und diese ausführst.
Die macht dann nichts anderes, als deine Sub "test" auszuführen UND einen Parameter a mitzuliefern.

P.S.: Das ist jetzt nicht absolut fachmännisch geschrieben und wird bestimmt einige "gehts schon, wenn" (Hallo balu, karo... ;-) )nach sich ziehen, aber ich hoffe das Prinzip ist richtig erklärt.
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

Beitrag von zachy »

Ich habe nun folgenden Code angegeben und es funktioniert:

Code: Alles auswählen

SUB calltest

CALL test (100)
CALL test(2, 397)

END SUB


sub test (a as integer, optional b as integer)
   if isMissing(b) then b = 0
   msgbox "Summe ist " & (a+b)
end sub
Der Knackepunkt ist also, dass das aufrufende Sub vor dem aufgerufenen definiert wird. Hatte das vorher andersrum gemacht und das hat natürlich nicht funktioniert.

Alos vielen Dank für Eure Hilfe :D
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

Beitrag von theindless »

Hallo,
Der Knackepunkt ist also, dass das aufrufende Sub vor dem aufgerufenen definiert wird. Hatte das vorher andersrum gemacht und das hat natürlich nicht funktioniert.
Das ist so nicht richtig.

NUR wenn du direkt in der Basic-IDE (=wo du die Macros schreibst) auf ausführen gehst (grüner Pfeil), werden die Macros der Reihe nach ausgeführt.
-> Das aufrufende Macro muss vor deiner Sub "test" stehen.

Wenn du in OpenOffice selbst über Extras - Macros - Macro ausführen gehst oder dir eine Schaltfläche erstellst und das Macro dort hinterlegst, wird NUR das Macro ausgeführt, das du wählst.
-> Reihenfolge der Macros ist egal.

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
zachy
**
Beiträge: 37
Registriert: So, 13.05.2012 19:31

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

Beitrag von zachy »

Ok, danke für diese Info. :D

Als Anfänger bringt man da mal leicht was durcheinander :wink:
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

Beitrag von theindless »

Hallo,
Als Anfänger bringt man da mal leicht was durcheinander
Ich weiß... ich hab mit Macros vor 2-3 Monaten angefangen :D
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Antworten