BASIC-Laufzeitfehler. Argument ist nicht optional.

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: BASIC-Laufzeitfehler. Argument ist nicht optional.

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

von theindless » Di, 15.05.2012 14:15

Hallo,
Als Anfänger bringt man da mal leicht was durcheinander
Ich weiß... ich hab mit Macros vor 2-3 Monaten angefangen :D

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

von zachy » Di, 15.05.2012 12:14

Ok, danke für diese Info. :D

Als Anfänger bringt man da mal leicht was durcheinander :wink:

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

von theindless » Di, 15.05.2012 11:54

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.

von zachy » Di, 15.05.2012 11:47

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

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

von theindless » Di, 15.05.2012 11:25

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.

von zachy » Di, 15.05.2012 10:57

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

Re: BASIC-Laufzeitfehler. Argument ist nicht optional.

von komma4 » So, 13.05.2012 20:20

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?

BASIC-Laufzeitfehler. Argument ist nicht optional.

von zachy » So, 13.05.2012 19:47

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

Nach oben