Makro stürzt ab (Dialog, Placeholder)

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

Moderator: Moderatoren

GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Makro stürzt ab (Dialog, Placeholder)

Beitrag von GrobMakrobiker »

Liebe OO-Gemeinde,

ich erstelle einen Dialog und möchte die dort eingegebenen Daten in eine Writer-Vorlage schreiben. Leider stürzt das Makro immer am Ende ab.

Code: Alles auswählen

oForm = DialogLibraries.Standard.dlgD1
oDialog = CreateUnoDialog( oForm )
oDialog.SetTitle("Wer weiß was?")
oDialog.GetControl("Textfeld1").text = "Frage 1 (2 Punkte)"

oDialog.GetControl("txtPunkte").text = Punkte
oDialog.GetControl("ls1").additem("Antwort 1. ", 0)
oDialog.GetControl("ls1").additem("Antwort 2 ", 1)
oDialog.GetControl("ls1").additem("Antwort 3. ", 2)
oDialog.execute


Die Schreibroutine sieht so aus:

Code: Alles auswählen

Sub Schreiben
		oDatei = ThisComponent
		oDatei.lockControllers
    	oTxtFelder = oDatei.getTextFields().createEnumeration()
   	
		Do While oTxtFelder.hasMoreElements() 'Textfelder ansprechen
			oFeld = oTxtFelder.nextElement
			'Überprüfen, ob es ein Platzhalterfeld ist
			If oFeld.supportsService("com.sun.star.text.TextField.JumpEdit") Then
				'Name des Placeholders holen
				sPlaceholderName = oFeld.Placeholder
				' Textfelder und Variablen zuordnen
				Select Case sPlaceholderName

				Case "Vorname"
				oFeld.Anchor.String = strVorname

				Case "Nachname"
				oFeld.Anchor.String = strNachname

				Case "T1"
				oFeld.Anchor.String = strText1

				Case "P1"
				oFeld.Anchor.String = Punkte1
				
				Case "Gesamturteil"
				oFeld.Anchor.String = strGesamturteil
				
				Case "Gesamtnote"
'				oFeld.Anchor.String = Punkte
				End Select
			End If
		Loop

		'Bildschirmaktualisierung wieder einschalten
		Do While oDatei.hasControllersLocked
			oDatei.unlockControllers
		Loop
End Sub
Weiß jemand Rat, woran es liegt? Ein kleiner Tipp wäre super!
Viele Grüße
Groby

PS: Ich benutze Libre Office & XRay.
Dateianhänge
Minimalbeispiel.odt
(16.72 KiB) 122-mal heruntergeladen
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Makro stürzt ab (Dialog, Placeholder)

Beitrag von Axel Richter »

Hallo,

das

Code: Alles auswählen

oDialog.dispose()
kann nicht in der Sub Weiter stehen. Es muss in der Sub stehen, welche den Dialog per oDialog.execute() aufruft.

Grund:
Nach Aufruf von oDialog.execute() wird die Sub, welche das aufruft, an der Stelle angehalten und der Dialog wird *modal* angezeigt. Nach Beenden des Dialogs ([x], Cancel, .endExecute(), ...) will die Programmroutine mit dem Rückgabewert von oDialog in der Sub fortsetzen, die den Dialog aufgerufen hat. Das geht aber nicht, wenn vorher per .dispose() der Dialog aus dem Speicher entfernt wurde.

Code: Alles auswählen

Sub Dialog1
...
oDialog.execute()
msgbox "fertig"
oDialog.dispose()
End Sub

Sub Weiter
Select Case n ' es sind normal mehrere Dialoge
Case 1
	Punkte1 = CStr(oDialog.GetControl("txtPunkte_neu").Text
	Punkte = Punkte + Punkte1
	n = n + 1
	oDialog.EndExecute()
	'oDialog.dispose()
End Select
msgbox "Schreiben"
Call Schreiben
End Sub
viele Grüße

Axel
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Makro stürzt ab (Dialog, Placeholder)

Beitrag von GrobMakrobiker »

Lieber Axel,

you made my day!
Vielen Dank, auch für die Erklärung!

Groby
Antworten