Anfängerfrage wg. Laufzeitfehler

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

Moderator: Moderatoren

Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Anfängerfrage wg. Laufzeitfehler

Beitrag von Mr.Ed »

Hallo zusammen,

versuche alte WORD5-Makros auf ooO-Basic umzuschreiben. Muss noch viel lernen (geistes- und gesellschaftswiss. vorgepägt). Orientiere mich an dem Buch von Thomas Krumbein. Meine Frage: Warum produziert in folgendem Code die Zeile "sText = oSucheErg.String" den Kommentar "BASIC-Laufzeitfehler. Objektvariable nicht belegt."? Außerhalb der Schleife funktioniert die Zuweisung ja.

Code: Alles auswählen

	oSuchErg = oDoc.findFirst(oSuche)
	sText = oSuchErg.String
	n = 1
	Do While Not isNull(oSuchErg)
		sName = Mid(sText, 7)
		iRest = InStr(sName, " Datum")
		sName = Left(sName, iRest-1)	' sName ist jetzt z.B. "Laura5"
		aNamen(n) = sName
		oSuchErg = oDoc.findNext(oSuchErg.End, oSuche)
		sText = oSuchErg.String
		n = n + 1
	Loop
Die Antwort ist vielleicht, wie so oft, ganz einfach, ich komm' nur nicht drauf. Weiß jemand was? Wäre schön!

MfG Mr.Ed
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Anfängerfrage wg. Laufzeitfehler

Beitrag von DPunch »

Aloha
Mr.Ed hat geschrieben:Meine Frage: Warum produziert in folgendem Code die Zeile "sText = oSucheErg.String" den Kommentar "BASIC-Laufzeitfehler. Objektvariable nicht belegt."? Außerhalb der Schleife funktioniert die Zuweisung ja.
Weil oSuchErg immer, wenn es mindestens ein Ergebnis gibt, in der Schleife irgendwann NULL wird, Du aber danach noch darauf zugreifen willst.

Code: Alles auswählen

  (...)
  oSuchErg = oDoc.findNext(oSuchErg.End, oSuche) '<------- wird irgendwann NULL, wenn es keine weiteren Ergebnisse gibt
  sText = oSuchErg.String  '<------- Zugriff auf NULL
  n = n + 1
Loop
Das .findNext(...) musst Du ans Schleifenende (bzw. hinter den letzten Zugriff auf die Variable oSuchErg) stellen, damit die Überprüfung im Schleifenkopf auch direkt durchgeführt wird

Code: Alles auswählen

  (...)
  sText = oSuchErg.String
  oSuchErg = oDoc.findNext(oSuchErg.End, oSuche)
  n = n + 1
Loop
Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Re: Anfängerfrage wg. Laufzeitfehler

Beitrag von Mr.Ed »

Hallo DPunch,

schwupps, das ging ja schnell, vielen Dank! Es klappt jetzt. Habe den Code so verändert:

Code: Alles auswählen

	n = 1
	oSuchErg = oDoc.findFirst(oSuche)
	Do While Not isNull(oSuchErg)
		sText = oSuchErg.String
		sName = Mid(sText, 7)
		iRest = InStr(sName, " Datum")
		sName = Left(sName, iRest-1)	' sName ist jetzt z.B. "Laura5"
		aNamen(n) = sName
		n = n + 1
		oSuchErg = oDoc.findNext(oSuchErg.End, oSuche)
	Loop
Kleinigkeit noch, weil ich hier neu bin: Ist man hier im Forum eher genervt von Fragen wie meiner? Oder ist das weiter kein Problem?

Ich kenne ja die Regel: Erst lesen, dann fragen! Daran halte ich mich normalerweise auch. Nur manchmal habe ich das Gefühl, dass eine Lösung ganz einfach sein könnte. Wenn also das Problem sich eingrenzen und vernünftig beschreiben lässt, bekomme ich möglicherweise ganz schnell eine Antwort. Alternativ: Wenn ich anfange zu lesen, sitze ich stundenlang und habe hinterher noch nicht einmal das Gefühl, wenigstens so nebenher etwas gelernt zu haben.

MfG Mr.Ed
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Anfängerfrage wg. Laufzeitfehler

Beitrag von DPunch »

Aloha
Mr.Ed hat geschrieben:Ist man hier im Forum eher genervt von Fragen wie meiner?
Aus meiner Sicht absolut nicht und ich denke, da geht es eigentlich allen Hilfsbereiten hier so.
Solange Du eine eindeutige Problemstellung hast, am Besten einen entsprechenden Codeausschnitt dazu postest und Dir selber Gedanken machst, gibt es auch rein gar nichts zu meckern.
Gerade bei logischen Fehlern im Code, die man als Einsteiger möglicherweise schonmal übersiehst, bringt Dich vermutlich auch stundenlanges Suchen nicht weiter, wenn es denn überhaupt möglich ist, eine sinnvolle Suchphrase dafür zu formulieren.

Abgesehen davon lege ich Dir von vornherein schonmal das Tool Xray zu Herzen.
Auf Dauer ein absolutes Muss für die Makro-Programmierung und mit Sicherheit behilflich bei allerlei Fehlern, die Du vielleicht nicht sofort einordnen kannst.
Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Re: Anfängerfrage wg. Laufzeitfehler

Beitrag von Mr.Ed »

Hallo DPunch,

danke für deinen Kommentar und den Hinweis auf Xray. Du machst mich neugierig. Xray-Variante 5.2en, vermute ich, wäre richtig. Werde mal schauen.

MfG Mr.Ed
Antworten