Makro stürzt ab (Dialog, Placeholder)

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: Makro stürzt ab (Dialog, Placeholder)

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

von GrobMakrobiker » So, 05.08.2012 09:50

Lieber Axel,

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

Groby

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

von Axel Richter » So, 05.08.2012 08:55

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

Makro stürzt ab (Dialog, Placeholder)

von GrobMakrobiker » Sa, 04.08.2012 11:02

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

Nach oben