Seite 1 von 1
BASIC-Laufzeitfehler. Argument ist nicht optional.
Verfasst: So, 13.05.2012 19:47
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
Gruß zachy
Re: BASIC-Laufzeitfehler. Argument ist nicht optional.
Verfasst: So, 13.05.2012 20:20
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
Das hilft Dir weiter?
Re: BASIC-Laufzeitfehler. Argument ist nicht optional.
Verfasst: Di, 15.05.2012 10:57
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
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
Re: BASIC-Laufzeitfehler. Argument ist nicht optional.
Verfasst: Di, 15.05.2012 11:25
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.
Re: BASIC-Laufzeitfehler. Argument ist nicht optional.
Verfasst: Di, 15.05.2012 11:47
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

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.
Verfasst: Di, 15.05.2012 11:54
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
Re: BASIC-Laufzeitfehler. Argument ist nicht optional.
Verfasst: Di, 15.05.2012 12:14
von zachy
Ok, danke für diese Info.
Als Anfänger bringt man da mal leicht was durcheinander

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.
Verfasst: Di, 15.05.2012 14:15
von theindless
Hallo,
Als Anfänger bringt man da mal leicht was durcheinander
Ich weiß... ich hab mit Macros vor 2-3 Monaten angefangen
