Programmabsturz beim Speichern (gelöst)

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: Programmabsturz beim Speichern (gelöst)

Re: Programmabsturz beim Speichern (gelöst)

von balu » Mo, 07.10.2019 18:48

Hallo Pit,
Jawohl, das mit dem Benennen und Löschen funktioniert.
Ist das auf ein gruppiertes Objekt bezogen?
Wenn ja, dann ist das doch Prima.

Mir ist aber nicht klar, ob das einen Performancevorteil bringt oder ob im Hintergrund trotzdem die ganzen einzelnen Objekte der Gruppe gelöscht werde.
Es gibt Aussagen und/oder Fragen die man selber schneller ausprobiert hat, als auf eine Reaktion im Forum zu warten.

Es ist doch aber so; ein gruppiertes Objekt ist EIN einzelnes Objekt. Und als ein Objekt wird es auch vom Programm behandelt. Wählt man es an um es zu löschen, wird es ganz einfach gelöscht. Es wird also nicht erst die Gruppierung aufgehoben und dann jedes einzelne Objekt gelöscht. Oder andere Variante; Es wird nicht erst die Gruppierung betreten um jedes einzelne Objekt zu löschen um dann die Gruppierung zu verlassen um dann das "Gruppierrte Objekt" zu löschen. Das sind alles Dinge die man selber mal von Hand in einer Tabelle ausprobieren kann.

Zur Performance.
Du hast den Trainer doch selber direkt vor dir. Also kannst Du doch selber vergleiche ziehen wie schnell etwas gelöscht ist: jedes Objekt einzeln, oder ein Gruppiertes Objekt.


Danke für die Info mit welchen "Hilfsmitteln" Du den Trainer erstellt hast.

Ich bin jetzt total am Ende meiner geistigen Fähigkeiten. Und deshalb bin ich hier jetzt auch fäddisch.


Gruß
balu

Re: Programmabsturz beim Speichern (gelöst)

von erikafuchs » Mo, 07.10.2019 15:50

Ja, da verbringe ich (habe ich verbracht) immer viel Zeit damit, meinen Schülern als Betatestern bei der Arbeit über die Schulter zu schauen. Da der Rechentrainer aber auch auf verschiedensten Systemen in Privathaushalten und auch mit unterschiedlichen Testversionen (also Mathetests mit Noten) läuft, ist die Fehleranfälligkeit groß. Dazu kommt, dass ich jetzt nicht mehr im Dienst bin und nicht mehr so leicht Opfer finde.

Re: Programmabsturz beim Speichern (gelöst)

von Toxitom » Mo, 07.10.2019 15:22

Hei Pit,
..Ist das ein Bug in oo, dass der Löschversuch dieses Kommentares zum Programmabsturz führt, oder muss der Programmierer das wissen?...
ne, ich halte das nicht für einen Bug. Es ist die Aufgabe des Programmierers sauberen Code zu schreiben... und den entsprechend zu testen;) Ist natürlich immer ein Lernprozess... und hat viel mit Erfahrung zu tun.

Und gerade solche "unerwarteten" Dinge beschleunigen den Lernprozess:) Wenn ich heute Code schreibe, beachte ich viel zu viele Möglichkeiten - und behandle die alle. Dadurch wird der Code sicherer, aber eben auch deutlich umfangreicher. Im Ergebnis braucht man ein ausgewogenes Gelcihgewicht.
Gerade aber bei Applikationen, die für Dritte gedacht sind, sollte der Code so beschaffen sein, dass es zu keinen Abstürzen oder Basic-Laufzeitfehlern kommt. Da hilft immer nur Testen - und zwar mit unbedarften Usern. Keine Programmierer;) Da kommen dann oft überraschende Ergebnisse raus...

VG
Tom

Re: Programmabsturz beim Speichern (gelöst)

von erikafuchs » Mo, 07.10.2019 14:28

Ach, Ihr seid so nett zu mir!
Lieber Balu
Jawohl, das mit dem Benennen und Löschen funktioniert. Mir ist aber nicht klar, ob das einen Performancevorteil bringt oder ob im Hintergrund trotzdem die ganzen einzelnen Objekte der Gruppe gelöscht werde.
Mithilfe Deiner Anleitung ist es mir jetzt tatsächlich gelungen das Objekt "mystery" zu lokalisieren und auch den Texteintarg auszulesen. Ob ich dieses komplexe Tool aber wirklich verstehe, wird sich noch zeigen. Und, wie vermutet, entsteht nur ein Objekt, wenn der Kommentar sichtbar ist.
Meinen Rechentrainer habe ich größtenteils mit Thomas' Buch erstellt, ein paar Codeteile habe ich aus dem Internet. Inwieweit mir xRayTool hilft/geholfen hätte, kann ich nicht abschätzen. Bei einem weiteren Projekt, meinem "Vokabeltrainer" habe ich auf ein existierende Projekt von Gisbert Friege aufgebaut, der hat mir netterweise erlaubt, seinen Vokabeltrainer zu nutzen. Ich habe ihn u.A. um Funktionen zur Erstellung von Lernkärtchen und Bingokarten ergänzt und dabei auch viel gelernt.

Lieber Tom,
mithilfe Deines Codes ist es mir jetzt auch gelungen die Objekte auf der Drawpage zu entfernen ohne den Kommentar zu verlieren. Ich habe es aber trotzdem dabei belassen, den Kommentar einfach wegzulassen. Ich denke, dass bei der Schleife über fast 100 Objekte die Überprüfung, ob es sich jeweils um einen Kommentar handelt nicht nötig ist. Ich blende beim Programmstart einfach einen entsprechenden Hinweis ein, der wird auch eher gelesen.
Aber wie siehst Du das? Ist das ein Bug in oo, dass der Löschversuch dieses Kommentares zum Programmabsturz führt, oder muss der Programmierer das wissen?
Danke an Euch, ich habe wieder einiges gelernt!

Re: Programmabsturz beim Speichern (gelöst)

von Toxitom » Mo, 07.10.2019 09:25

Hallo Pit,

um mal etwas kreatives beizufügen:

Wenn Du den "Übeltäter" schon gefunden hast, so kannst Du doch ganz einfach alle Kommentare vom Löschen ausschließen;) Ist an sich auch logisch: Kommentare werden vom Programm als "shapes" realisiert - sind aber direkt verbunden mit dem Kommentarobjekt - und können nicht über den "remove" Befehl so gelöscht werden. Willst Du ja auch gar nicht, oder?

Also: Schliesse Kommentare beim Löschen aus:

Code: Alles auswählen

sub ZeichnungLoeschen
	oPage=ThisComponent.sheets(0).drawpage
	i =  oPage.count
	do while i>0
    	oGrafik=opage.getbyindex(i-1)
    	if not oGrafik.supportsService("com.sun.star.sheet.CellAnnotationShape") then
    	  	oPage.remove(oGrafik)    	  
    	end if	
        i= i - 1
	loop 			
end sub
Du kannst auch andere Shape-Typen ausschliessen - oder nur bestimmte festlegen. Mit XRAY oder MRI kannste Dir alles genauer ansehen. Zur Not auch im Einzelschrittmodus in der IDE und dem Beobachter.

VG
Tom

Re: Programmabsturz beim Speichern (gelöst)

von balu » So, 06.10.2019 19:59

Hallo Pit,

Hast Du es denn mittlerweile geschafft den Gruppierten Objekten einen Namen zu vergeben, und konntest Du sie löschen?

Thema XRAY.
Um etwas zu Untersuchen muss man Systematisch "Schrit-für-Schritt" vorgehen. Am besten von oben nach unten. Beispiel folgt gleich.

Setze in XRAY bei 'Anzeige' => "A..Z" ein Häkchen rein. Dadurch wird die Liste "Name der Eigenschaft" Alfabetisch aufsteigend sortiert. Das ist sehr nützlich.

Zum Beispiel:
Du hast ja schon 'xray mystery' eingetippt.
Das entspricht ja 'xray ThisComponent.drawpages(seite).getbyindex(0)'. Und das ist der komplette 'Pfad' von der obersten bis zur aktuell untersten Stufe.
'ThisComponent' = oberste Stufe
'getbyindex(0)' = unterste Stufe.

Jetzt mach mal folgendes.
In einem neuen Modul in einer Sub einfach; xray ThisComponent, eintippen und schau dir mal an was die Liste "Name der Eigenschaft" dir so alles anbietet.
Dann gehe auf den Namen DrawPages und Du siehst rechts daneben in der Spalte 'Datentyp' den dazugehörigen Eintrag 'object'. Kommt dir dieses Wort nicht irgendwie bekannt vor?
Das muss es! Du brauchst nur an die Variablendeklaration zu denken: Dim .... as Object. Das ist also eigentlich nix neues, und Du wirst in XRAY viele alte bekannte wieder treffen: integer, string, long, double etc.

Liest Du in XRAY das Wort 'object', dann ist damit schon mal garantiert das sich dahinter viele weitere Eigenschaften verbergen.

Wenn Du jetzt also auf DrawPages einen doppelklick ausführst, dann ist die dann erscheinende Liste mit den Eigenschaften wohl recht kurz, aber das macht nix. Denn jetzt klickst Du links oben, im Fenster von XRAY auf den Eintrag "Methods".

In "Methods" kannst Du nachlesen welche Möglichkeiten (Methoden) es gibt was man machen kann:
get = heißt Beispielweise etwas bekommen
getBy = nehmen durch etwas
set = etwas setzen.
etc.

Du erinnerst dich an meinen Code?
'.getName()' => den Namen bekommen.
Und deiner.
'.getbyindex(0)' => Zugriff durch den Index 0.

Und nun folgendes 'xray ThisComponent.drawpages(seite)'. Wobei Du seite jetzt durch eine Zahl ersetzt, z.B. 3. Und dann schaust Du mal was Du alles so zu Gesicht bekommst. Damit Du dich ein wenig damit vertraut machen kannst.

Jetzt 'xray ThisComponent.drawpages(3).getbyindex(0)' (anstelle 0 auch eine andere Zahl ausprobieren). Dann wechselst Du auf "Methods", suchst den Eintrag 'getName' und schaust was xray denn so sagt bei einem doppelklick auf 'getName'. Es gibt nur foplgende möglichkeiten:
- Es popt ein Fernster auf mit einem Textinhalt (der Name).
- xray gibt ne Fehlermeldung aus.

Es ist natürlich vieles komplizierter, was ich auch nicht alles erklären kann. Aber wenn Du dich schon mal intensiver damit befasst, dann wird das alles mit der Zeit leichter. Aber eins kannst Du mir getrost glauben; ich habe noch immer stellenweise meine Probleme passende Infos aus xray rauszukitzeln. Aber für so manches reicht es mir.


Ich frage mich nur wie Du den Rechentrainer erstellt hast, was für Hilfsmittel hast Du benutzt. Buch, WWW?


Ja auch ich hatte mich in meiner Anfangszeit bei der Programmierung (so ab ca. 2009) mich mit meinem Großprojekt, Basic und dem Buch der 7 Siegel (xray) gleichzeitig runschlagen müssen. Und egal ob XRAY oder MRI, beide sind wohl mächtige Tools, zwingen mich aber noch immer schnell in die Knie.


Gruß
balu

Re: Programmabsturz beim Speichern (gelöst)

von erikafuchs » So, 06.10.2019 17:59

Hui, jetzt sind wir bei mir schon auf der 5.Seite!
Da war was mit XrayTool, das hätte ich wohl mal rauskramen sollen und lernen, wie man damit umgeht - da hast du Recht!
Sag ich doch ;-)
Und mach das ab SOFORT.
Also, habe ich gemacht. Aber Stephan sagte weiter oben, ihr (Stephan, Tom, Balu ...) wüsstet auch nicht alles.
xRay.jpg
xRay.jpg (162.71 KiB) 3719 mal betrachtet
wenn ihr das versteht, erstarre ich in Erfurcht. Für mich könnte das auch chinesisch sein und ich komme mir klein vor. Ich habe schon auch versucht die Erklärung dazu zu lesen, das macht die Sache nicht besser. Gibt es da ein xRay für Dummies, die nicht wissen was Eigenschaften, Methoden, Structs und Enums sind? Oder soll ich mich da jetzt halt nächste Woche für das oben erwähnte Fernstudium anmelden? Ich hatte vor vielen jahren schonmal das xrayTool aufgemacht - und ziemlich schnell wieder zu.
Hilfe!

Re: Programmabsturz beim Speichern (gelöst)

von balu » So, 06.10.2019 13:00

Hallo Pit,

meine Schleife bezog sich ja auf ein einzelnes Objekt, und von daher funzt das ja auch. Wenn jetzt aber nacheinander mehrere Benannte Objekt auf ein und dergleichen Drawpage gelöscht werden sollen, muss die Schleife anders aufgebaut werden oder versuchen es mit 'Do...Loop' zu lösen (Do-loop ist nicht meine Welt).

Ich gruppiere dieses ganze Koordinatensystem ja zu einem Objekt, damit ich über einen Button im Menü das ganze Ding kleiner machen kann, da einige Schüler klagten, dass Teile der Grafiken auf ihrem Bildschirm nicht zu sehen seien. Wenn ich das ganze gruppierte Objekt aus geschäzt Hundert Teilobjekten komplett löschen könnte, wäre das ja noch ok, das geht aber soweit ich das sehe nicht.
Du kannst also per Makro mehrere Zeichenobjekte Gruppieren.
Ist doch Prima!
Und hast Du das auch mal von Hand direkt aufm Tabellenblatt selber ausprobiert?
Wenn ja, dann müsstest Du feststellen das man einem Gruppiertem Zeichenobjekt auch einen Namen zuordnen kann.
Und was bedeutet das jetzt?
Du hast einen Verfügbaren Namen mit dem Du WAS machen kannst?
Und dadurch dürfte wohl der Unterstrichene Teil deiner Aussage nicht mehr gültig sein.

Wieder zurück zur Schleife.
Ein Gruppiertes Zeichenobjekt ist ein einzelnes benanntes Zeichenobjekt. Also muss dafür die Schleife nicht kompliziert geändert werden, sie bleibt wie sie ist.
Wenn aber wirklich unterschiedliche Grafiken nicht gruppierbar sind, und sie gelöscht werden müssen, dann muss die Schleife dementsprechend aus(um)gebaut werden. Das bedeutet, entweder 2 unterschiedliche Löschroutinen, oder aber die Routine so umbauen das sie für beide Fälle nutzbar ist.

Da war was mit XrayTool, das hätte ich wohl mal rauskramen sollen und lernen, wie man damit umgeht - da hast du Recht!
Sag ich doch ;-)
Und mach das ab SOFORT.

Und vor allem, teste erstmal in einer leeren Datei, damit Du in Ruhe feststellen kannst wie das denn so mit den Gruppierten Zeichenobjekten verhällt, und wie dir XRAY dabei behilflich sein kann.
Meines Erachtens ist dieser Prorammabbruch ein Bug - macht es Sinn diesen zu melden?
Ist deine Entscheidung.



Gruß
balu

Re: Programmabsturz beim Speichern (gelöst)

von erikafuchs » So, 06.10.2019 11:57

Hallo Balu,
da hast du dir ja wieder eine Menge Arbeit gemacht. Aber das mit der Benennung von den einzelnen Objekten auf der Drawpage kann ich doch schon und nutze es auch, das kannst du im Code ja auch sehen, je nach Objektname setze ich z.B.verschiedene Farben. Und mir ist auch klar, dass man die Objekte mit Hilfe des Namens löschen kann, das ist kein Problem. Mein Problem war ja aber dieses letzte Objekt auf der Drawpage 3, das nun mal nicht gelöscht wurde und bei dessen Löschversuch das Programm abstürzt. Wenn ich mein Koordinatensystem per Makro erstelle, ist das zunächst der Hintergrund, dann ziemlich viele Linien als "kariertes Papier", dann wird das Koordinatenkreuz erstellt, alle Einteilungen mit Beschriftung , sogar die Pfeilspitzen bestehen aus je zwei Linien, jedes Kreuzchen bsteht aus zwei Linien und Beschriftung ... da kommt gut was zusammen. Das Löschen dauert ja jetzt schon einen Moment, wenn ich die alle einzeln über ihre Namen löschen würde, dauerte das noch länger, das wollte ich nicht. Ich gruppiere dieses ganze Koordinatensystem ja zu einem Objekt, damit ich über einen Button im Menü das ganze Ding kleiner machen kann, da einige Schüler klagten, dass Teile der Grafiken auf ihrem Bildschirm nicht zu sehen seien. Wenn ich das ganze gruppierte Objekt aus geschäzt Hundert Teilobjekten komplett löschen könnte, wäre das ja noch ok, das geht aber soweit ich das sehe nicht.
Das ist ja auch nicht das wirkliche Problem. Es blieb halt dieser Kommentar in der Zelle G55 übrig, bei dem der Löschversuch zum Absturz führte. Ich wusste, dass es da ist, wusste aber nicht aus was es besteht. Da war was mit XrayTool, das hätte ich wohl mal rauskramen sollen und lernen, wie man damit umgeht - da hast du Recht!
Ich wusste ja sogar (eigentlich), dass das Löschen auf der Drawpage auch die Kommentare löscht, denn wenn ich beim Zeichnungloeschen (seite) die Seite nicht auf 1 oder 3 setze, die Objekte auf der "Daten"-Seite gelöscht werden, da diese halt den Index 0 hat. Dabei sind auch alle mühsam erstellten Kommentare, was hier jeweils gezählt wird, gelöscht worden. Dort wurden sie gelöscht, auf der Seite 3 in Zelle g55 aber führte es zum Programmabsturz. Ich vermute (habe es nicht überprüft), das liegt daran, dass auf Seite 3 der Kommentar sichtbar war und auf Seite 0 nicht. Meines Erachtens ist dieser Prorammabbruch ein Bug - macht es Sinn diesen zu melden?
Das Problem mit dem Löschen hattest Du hier doch schon mal: Abstürze beim Löschen von Objekten auf einer Drawpage
Jawohl, auch da hast du Recht. Darauf habe ich ja auch schon mehrmals hingewiesen:
hier geht es nur um dieses:

Code: Alles auswählen

Code: Alles auswählen

sub ZeichnungLoeschen (seite as integer)
	oPage=ThisComponent.drawpages(seite)
	do while oPage.count>0
    	oGrafik=opage.getbyindex(oPage.count-1)
    	oPage.remove(oGrafik)
	loop 			
end sub
ich kann mich erinnern, dass ich damit schon früher Probleme hatte und es zu Programmabstürzen kam wenn auf einer Seite keine Grafiken vorhanden waren. Könnt ihr mir dazu was sagen?
... du hast es gefunden, das war 2007! Wenn ich das richtig sehe, habe ich das Problem damals nicht wirklich lösen können, ich habe die Seite damals einfach anders aufgebaut - aber jetzt habe ich es ja.
Ach und das noch:
Deine 'Do..Loop' mit 'opage.getbyindex(oPage.count-1)' musste rausgeschmissen werden.
Ich hatte die Schleife vor langer zeit mir "for ... to oPage.count" ausprobiert. Da habe ich in Erinnerung, dass das nicht funktioniert hat, da bei jedem Durchlauf die Anzahl der Objekte sich verringert und daher die Schleife sich aufhängt. Aber vielleicht erinnere ich mich falsch, deine Version scheint ja zu funktionieren.

Re: Programmabsturz beim Speichern (gelöst)

von balu » Sa, 05.10.2019 22:20

Hab da doch noch meine Beispieldatei angehängt.

Anfangs ist nur ein Schwarzes Rechteck und 2 Buttons zu sehen, also 3 Elemente auf der Drawpage.
- Button "Zeichnen" zeichnet eine Linie mit Pfeilen.
- Button "Löschen" löscht die Linie wieder, lässt aber die anderen Elemente stehen.


Gruß
balu
Dateianhänge
Linie_zeichnen_und_löschen_in_calc_makro0.ods
(13.67 KiB) 140-mal heruntergeladen

Re: Programmabsturz beim Speichern (gelöst)

von balu » Sa, 05.10.2019 20:08

Hallo Pit,

tja, das mit dem Kommentar (Notiz) ist meinerseits wohl dumm gelaufen. Hatte wohl in meinem Tool vergessen gehabt das rauszunehmen. Aber nun gut, der Problemverursacher ist ja jetzt eindeutig identifiziert.

Das Problem mit dem Löschen hattest Du hier doch schon mal: Abstürze beim Löschen von Objekten auf einer Drawpage

Bevor ich es vergesse:
Arbeitest Du mit einem Inspektionstool wie XRAY oder MRI?
Wenn nein, dann wirds aller höchste Eisenbahn für dich das zu ändern.

Sie zu benennen oder durchzuzählen und einige stehenzulassen, scheint nicht zu funktionieren.
Das geht schon, man muss sich dafür aber mit MRI oder XRAY befassen um den Weg zu erfahren.
Und dann weiß ich auch immer noch nicht, wie man rausbekommt um welches Objekt es ich handelt, wenn es zwar da ist, man es mit "mystery=opage.getByIndex(0)" auch ansprechen kann, aber keine Ahnung hat (wie in diesem Fall) um was es ich handelt.
Kein Scherz, wenn das Kind keinen Namen hat, dann kann man es nicht ansprechen.
Dein "mystery" sagt nur das da ein Objekt ist, mehr aber auch nicht. Um was für ein Objekt es sich dabei handelt ist extrem schwer herauszufinden, wenn man wissen will ob es ein Button oder eine Notiz ist. Das ist aber in deiner Datei auch gar nicht nötig.

Im Grundprinzip bist Du ja eigentlich schon auf dem richtigen Weg gewesen. Jedoch ohne dementsprechende Vorarbeit und Code Erweiterung gehts nicht.

Als erstes musst Du beim erstellen einer Grafik ihr einen Namen vergeben. Und erst dann die Grafik erzeugen. Also anstatt nur (als Beispiels)

Code: Alles auswählen

With oWinkel
			.CircleStartAngle=(0)*100
			.CircleEndAngle=(aZ/aN*360)*100
			.FillStyle=com.sun.star.drawing.FillStyle.SOLID
			.FillColor=255  
		end with
		oPage.add(oWinkel)
das ganze um eine Zeile erweitern, und zwar so.

Code: Alles auswählen

With oWinkel
			.CircleStartAngle=(0)*100
			.CircleEndAngle=(aZ/aN*360)*100
			.FillStyle=com.sun.star.drawing.FillStyle.SOLID
			.FillColor=255 
			.Name = "Winkel_No1" 
		end with
		oPage.add(oWinkel)
Jetzt hat das Kind einen Namen, und nun kann es auch persönlich mit Namen angesprochen werden.
Dieser Name muss aber so lange wie die dementsprechende Sub, beziehungsweise Rechenaufgabe (oder was auch immer) bearbeitet wird gespeichert werden.
Um etwas genauer zu sein.
Sub Aufruf, einen Namen einer Variablen zuweisen, Aufgabe starten und wenn gelöst (fertig) die Variable auf "" leer setzen. Nicht das die Variable in einer anderen Aufgabe mit dem gleichen Namen einen falschen Zusammenhang für dich erzeugt. Wäre doch Plöte wenn es um Rechtecke geht, aber die Grafik Winkel heißt. Na Du verstehst schon.

Aber wie kann man denn jetzt das dementsprechende Objekt mit Namen ansprechen, wirst Du dich jetzt fragen?
Nun, eines von den zuvor genannten Tools (z.B. MRI) wird dir bei richtiger Handhabung sagen, das man den Namen auch auslesen kann.

Code: Alles auswählen

print oPage.getbyindex(0).getName() 
Und das baust Du in eine Schleife ein, die daraufhin überprüft ob der zu vergleichende Name mit dem gefundenen Namen übereinstimmt. Und wenn ja, dann wird die dementsprechende Grafik wie gehabt gelöscht.

Deine mehrfach gepostete *sub ZeichnungLoeschen* würde dann wie folgt aussehen.

Code: Alles auswählen

sub ZeichnungLoeschen
	oPage=ThisComponent.drawpages(0)
	for ip = 0 to oPage.count
    	oGrafik=opage.getbyindex(ip)
		if oGrafik.getName() = "Pfeile" then
			oPage.remove(oGrafik)
		exit for
		end if		
	next ip 
end sub
Diese habe ich hier unter AOO 4.1.5 erfolgreich getestet.
Hier noch ein paar Infos dazu.
- Die Variable 'seite' konnte ich für meine Testdatei nicht gebrauchen, deshalb durch einen festen Wert ersetzt.
- Deine 'Do..Loop' mit 'opage.getbyindex(oPage.count-1)' musste rausgeschmissen werden. Der Grund dafür war folgender.

Aufm Tabellenblatt war eine Linie mit Pfeilen die auch den Namen "Pfeile" trägt (per Makro erstellt), und ferner ein gezeichnetes Rechteck ohne Name (von Hand gezeichnet). Und bei Ausführung des Test-Codes mit 'Do..Loop....' fand Calc kein Ende. Das Makro ging in eine Art Dauerschleife. Ich musste in der Basic-IDE den Stop-Knopf drücken. Und erst als ich das Makro wie zu sehen abänderte, wurde wie gewünscht die Linie gelöscht, und das Namenlose Rechteck blieb stehen.

Merksatz:
Jede Grafik die das Makro erstellt bekommt vom Makro auch einen Namen, dann ist das ansprechen kein Problem mehr.

Ich hoffe Du weisst jetzt mehr, und hoffentlich kannst Du das jetzt auch alles sicher unterbringen.

Und nein! Ich habe das nicht ausm Ärmel geschüttelt, sondern mir selber mühsam erarbeitet.

Gud Lack :-)



Gruß
balu

Re: Programmabsturz beim Speichern (gelöst)

von erikafuchs » Sa, 05.10.2019 13:09

Der Rechentrainer funktioniert immer noch!
Ich möchte mich hier nochmal bei allen Beteiligten bedanken. Ihr habt viel Zeit mit meinem Problem verbracht.
Im Endeffekt waren es nicht die Definition von Variablen, Fehler im Code oder Reste von Excel. Ich habe aber wieder viel gelernt und habe meinen Code aufgeräumt. Er ist zwar sicher immer noch nicht vorzeigbar, ich finde mich aber selbst besser zurecht und habe einige Einträge neu durchdacht.

Der Fehler ist draußen. Er lässt sich auch klar reproduzieren, nach dem Einfügen eines Kommentars stürzt das Programm bei der Löschschleife mit Sicherheit ab.

Ich würde jetzt aber doch gerne noch wissen, wie man diesen Fehler vermeiden kann, wie man also dafür sorgt, dass ein Kommentar auf einer Seite stehen bleiben kann und nur durch Makro eingefügte Objekte in der Drawpage gelöscht werden, ein Kommentar oder eine Schaltfläche aber stehenbleibt. Sie zu benennen oder durchzuzählen und einige stehenzulassen, scheint nicht zu funktionieren. Ich lasse Kommentare und Buttons ansonsten halt einfach weg.

Und dann weiß ich auch immer noch nicht, wie man rausbekommt um welches Objekt es ich handelt, wenn es zwar da ist, man es mit "mystery=opage.getByIndex(0)" auch ansprechen kann, aber keine Ahnung hat (wie in diesem Fall) um was es ich handelt.
Pit

Re: Programmabsturz beim Speichern

von erikafuchs » Fr, 04.10.2019 16:44

Das war's:
Fehler Kommentar.jpg
Fehler Kommentar.jpg (80.56 KiB) 3542 mal betrachtet
nicht die sonderbaren Formeln sonder der Kommentar im Feld "Abbr. & Lsg.". Wie Balu schon richtig bemerkte, sind da nicht nur die selbstgestaltete Grafiken sondern auch die Schaltfelder und halt auch die Kommentare. Dieser Kommentar taucht als Objekt auf der Drwapage auf, der Versuch ihn zu löschen führt entweder zum sofortigen Progarmmabbruch oder u.U. (welchen weiß ich nicht) zum Progarmmabbruch beim Speichern.

Re: Programmabsturz beim Speichern

von erikafuchs » Fr, 04.10.2019 09:16

Hurra! Ich habe es. Muss man erstmal drauf kommen!
Schade, dass sich die meisten Beteiligten entnervt hier abgemeldet haben und für sie das Geheimnis nicht gelöst wird.
Vielleicht findet das ja aber jemand, der Probleme mit dem Speichern hat nachdem auf der Drawpage nicht alles gelöscht werden Konnte.
Der erste Hinweis ist dieser:
Ich komme auf meine Frage zu diesem Code zurück:

Code: Alles auswählen

Code: Alles auswählen

sub ZeichnungLoeschen (seite as integer)
	oPage=ThisComponent.drawpages(seite)
	do while oPage.count>0
    	oGrafik=opage.getbyindex(oPage.count-1)
    	oPage.remove(oGrafik)
	loop 			
end sub
... ich bin mir sicher, dass ich hiermit schon Probleme hatte.
Der zweite Tipp ist dieser:
Die Aufgaben in Zelle C33 zählen doppelt.
... oder soll ich das Geheimnis gleich auflösen?

Man kann doch sicher (leider kann ich es nicht) rausbekommen, um was es sich bei "mystery" bei "mystery=opage.getByIndex(0)" handelt?
Guten Morgen
Pit

Re: Programmabsturz beim Speichern

von erikafuchs » Fr, 04.10.2019 03:06

Mit „ich kann darauf zugreifen“ meinie ich, dass „mystery=opage.getbyindex(0)“ keine Fehlermeldung ergibt. Was es ist, kann ich aber nicht feststelle. Ich habe mich jetzt zwei Stunden im Bett gewälzt und bin recht sicher, dass ich jetzt aber weiß, was es ist. Ich hatte das Problem vor vielen Jahren schon mal. Wahrscheinlich hat Stephan recht und ich kann das nur selbst lösen. Ob das ein Fehler in oo ist kann ich nicht sagen. Ich werde meine neue Theorie nach ein paar Stunden Schlaf überprüfen und mich melden.
Wolltest du nicht auch Feierabend machen?
Gute Nacht.

Nach oben