Start eines Makros

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

Moderator: Moderatoren

Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Start eines Makros

Beitrag von Stephan »

ich habe lediglich gesagt, dass die Schnittstelle einen Automatismus integriert hat, der Makros anstupst.
WOZU? Es hat doch nichts miteinander zu tun.
Dies ist bei MS-Word zu 100% der Fall, bei OOo vielleicht zu 80%.
Nein, und zwar deshalb weil es auch nötigenfalls mengenmäßig (bezogen auf die Codezeilen) zu 99,9% identisch sein kann, imer bleibt die Tatsache das die relevanten/spezifischen Codezeilen von MS Word und OOo nichts miteinander zu tun haben.
Das heißt, dass alles was du nicht weißt und kennst falsch ist?
Nein das heißt DAS DU die ganze Zeit davon redetest das der Code nur mit Msgbox läuft und Du jetzt bestätigst hast das die Beispieldatei läuft, die jedoch ohne MSgbox ist und Eines kann ja nun nur stimmen: entweder DEine Aussage wäre richtig, dann dürfte die Beispieldatei nicht funktionieren oder die Beispieldatei funktioniert, dann muß DEine Aussage falsch sein.
Wie bitte gehst du dann mit Kunden-Problemen um, die nicht reproduziert werden können? Soviel zu meiner Frage-Antwort Fähigkeit...
Sag mal geht es noch - das Ganze hier war eindeutig denn Du selbst hast bestätigt das die Beispieldatei funktioniert, was sie nach DEinen bisherigen Einlassungen nicht dürfte und jetzt pöbelst Du mich persönlich dafür an wenn ich diese Fakten benenne.
Wann und wo, und vor allem: Wann habe ich Informationen dazu vorenthalten?
Du hast bist jetzt keinen vollständigen Code geliefert - oder ist es bösartig das zu sagen, denn Du hast damit diesen Code noch nachliefern zu wollen doch bestätigt das er dasein muß.
Aber ehrlich gesagt ist mir bei Leuten wie Stefan wie Lust daran vergangen, hier zu versuchen Diskussionen abzuhalten.
Dann lass es einfach und gut - auf Deine Art keine vernünftigen Infos zu liefern und Leute dafür anzugreifen wenn sie danach fragen, weil sie für verlässliche Antworten verlässliche Infos brauchen, habe ich keinen Bock mehr.
Viel Spass noch in DEiner Traumwelt die wohl heißt wer nett zu Dir ist hat automatisch auch technisch richtige Antworten und wer notgedrungen nach INfos fragt will Dir SChlechtes.



EOT

Gruß
Stephan
Philipp_19
****
Beiträge: 115
Registriert: Mo, 29.08.2011 09:01
Wohnort: Duisburg

Re: Start eines Makros

Beitrag von Philipp_19 »

Konnte die Problematik nun reproduzieren und die Datei anonymisieren.

Beim Start der Vorlage werdet ihr eine MessageBox bekommen. Wegklicken und das Makro startet. In der 3. Tabelle wird durchgehend ein "a" angehängt. Um das Makro zu beenden, tragt in der ersten Tabelle im grauen Feld einen Wert ein.

Um die Problematik zu reproduzieren, öffnet die Vorlage und ändert den Makro-Code:
Makro "Test" öffnen, und die MessageBox entfernen, die ihr beim Start angezeigt bekommt. Habe ich diese Box nicht in dem Code, macht das Dokument bei MIR folgendes:

-Öffnen der Vorlage
-In Tabelle 3 wird EIN "a" eingetragen
-Es passiert nichts weiter.

Klickt doch nun bitte einfach mal auf einen Menü-Punkt oder verkleinert/vergrößert das Dokument. Man kann in dem Dokument arbeiten, das Makro wird nicht angestupst, bis eben eine der Aktionen gemacht wird.
Stephan hat geschrieben:WOZU? Es hat doch nichts miteinander zu tun.
Warum dann so drauf rumtrampeln, anstatt es einfach zu ignorieren?
Stephan hat geschrieben:Nein das heißt DAS DU die ganze Zeit davon redetest das der Code nur mit Msgbox läuft und Du jetzt bestätigst hast das die Beispieldatei läuft, die jedoch ohne MSgbox ist und Eines kann ja nun nur stimmen: entweder DEine Aussage wäre richtig, dann dürfte die Beispieldatei nicht funktionieren oder die Beispieldatei funktioniert, dann muß DEine Aussage falsch sein.
Und ich habe dir bereits gestern gesagt, das ich die Beispieldatei von dir in einer anderen Umgebung probiert habe...
Stephan hat geschrieben:Sag mal geht es noch - das Ganze hier war eindeutig denn Du selbst hast bestätigt das die Beispieldatei funktioniert, was sie nach DEinen bisherigen Einlassungen nicht dürfte und jetzt pöbelst Du mich persönlich dafür an wenn ich diese Fakten benenne.
Und das zu mir? Soweit ich mich erinnere hattest du einen ähnlichen Satz von dir gegeben. Also würde ich mich da an deiner Stelle lieber zurückhalten.
Stephan hat geschrieben:Viel Spass noch in DEiner Traumwelt die wohl heißt wer nett zu Dir ist hat automatisch auch technisch richtige Antworten und wer notgedrungen nach INfos fragt will Dir SChlechtes.
Menschen, die einem einen gewissen Grundrespekt im Internet zeigen stehen generell besser da. Das hat nichts mit Traumwelt zu tun, sondern beruht auf der Tatsache, dass ich mich mit Menschen, die einen freundlichen Umgangston haben deutlich lieber diskutiere, weil sie eben nicht angreifende oder abwertende Kommentare verwenden.
Dateianhänge
Beispiel.ott
(13.97 KiB) 117-mal heruntergeladen
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Start eines Makros

Beitrag von balu »

Mahlzeit Philipp,
Beim Start der Vorlage werdet ihr eine MessageBox bekommen.
Nööö! Absolut nicht!
Ist vollkommen ausgeschlossen, da weder im Module1 noch im Module2 eine MessageBox programmiert/vorhanden ist!
Hast Du die falsche Beispieldatei angehängt?
Und nun!? Was jetzt?
In der 3. Tabelle wird durchgehend ein "a" angehängt.
Aber erst dann, wenn ich das hier mache
verkleinert/vergrößert das Dokument.
Habe ich diese Box nicht in dem Code, macht das Dokument bei MIR folgendes:

-Öffnen der Vorlage
-In Tabelle 3 wird EIN "a" eingetragen
-Es passiert nichts weiter.
Genauer gesagt:
Der Text-Cursor ist eingefroren, er blinkt nicht. Und das bedeutet in meinen Augen, dass OOo sehr beschäftigt ist. Es weiß wohl nur nicht so recht was es machen soll, und gibt deshalb den Cursor nicht frei.

Sorry, aber mehr kann ich momentan auch nicht sagen.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Philipp_19
****
Beiträge: 115
Registriert: Mo, 29.08.2011 09:01
Wohnort: Duisburg

Re: Start eines Makros

Beitrag von Philipp_19 »

Mahlzeit,
balu hat geschrieben:Hast Du die falsche Beispieldatei angehängt?
Und nun!? Was jetzt?
Anscheinend habe ich nur falsch rumgedacht. Habe die MessageBox allem Anschein nach rausgenommen und hier geschrieben sie sei drin. Ändert aber nichts an der Problematik: Fügt eine einfache Message im Modul 2 ein, direkt als erste Codezeile und die Makros laufen nach dem bestätigen durch.
balu hat geschrieben:Aber erst dann, wenn ich das hier mache
Genau das hatte ich beschrieben. Wahlweise ist es bei mir möglich über die Menüleiste dies anzustoßen.
balu hat geschrieben:Der Text-Cursor ist eingefroren, er blinkt nicht. Und das bedeutet in meinen Augen, dass OOo sehr beschäftigt ist. Es weiß wohl nur nicht so recht was es machen soll, und gibt deshalb den Cursor nicht frei.
Aber warum bewirkt dann das einfügen einer MessageBox (bei mir), dass er, nach deinen Wort, weiß was er tun soll und allem Anschein nach nicht mehr so sehr beschäftigt ist?

Nimmt man das Makro aus den Events raus, und startet es manuell, läuft es schließlich auch einfach durch, bis die Zelle gefüllt wurde.

Grüße
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Start eines Makros

Beitrag von balu »

Ich muss zum Termin, deshalkb nur kurz.

Schmeiß im Module2 im Makro Test das "Call" raus! Andere Subs innerhalb einer Datei werden ganz eays nur mit dem Sub-Namen aufgrufen. Versuchs dann noch mal.

Und tschüssikowski.
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Start eines Makros

Beitrag von Stephan »

Beim Start der Vorlage werdet ihr eine MessageBox bekommen.
Nein, denn das bei Öffnen der Vorlage startende Makro enthält garkeine Message-Box:

Code: Alles auswählen

Sub Test
	Dim b as String
	Dim doc as Object
	
	Table = thiscomponent.GetTextTables().GetByIndex(0)
	Tablex = thiscomponent.GetTextTables().GetByIndex(2)
	b = Table.GetCellByPosition(1,2).GetString()
	u = "a"
	
	Do while b = ""
		Tablex.GetCellByPosition(0,0).SetString(u)
		wait 1
		b = Table.GetCellByPosition(1,2).GetString()
		u = u & "a"
	Loop
	Call GSA_Verbrauch_m2
End Sub
Das aus dem Makro heraus aufgerufene Andere Makro im Übrigen auch nicht.
Um die Problematik zu reproduzieren, öffnet die Vorlage und ändert den Makro-Code:
Makro "Test" öffnen, und die MessageBox entfernen, die ihr beim Start angezeigt bekommt. Habe ich diese Box nicht in dem Code, macht das Dokument bei MIR folgendes:
Bei mir ist keine Messagebox in DEinem Code zu finden, so muß ich keine entfernen.
-Öffnen der Vorlage
-In Tabelle 3 wird EIN "a" eingetragen
-Es passiert nichts weiter.
Bei mir nicht.
Das Makro läuft OHNE Mesage-Box ununterbrochen durch und ich erhalte:
makroergebnis.gif
makroergebnis.gif (35.23 KiB) 3751 mal betrachtet
sowie fortlaufend weitere a. (Windows7, OOo 3.3.0)

Womit wir nun wohl sagen dürfen es liegt NICHT an der Messagebox sondern nur an irgendeinem DEtail DEiner Artbeitsumgebung das wir jedoch nicht kennen können ... weshalb ich nach genauem Code fragte den wir weiterhin nicht bekommen haben da Du ja davon überzeugt bist das die 'anderen' Mitarbeiter REcht haben wenn sie sagen das es damit ohnehin nicht zu tun haben kann.

Warum dann so drauf rumtrampeln, anstatt es einfach zu ignorieren?
WEil Du permanennt die Diskussion mit irrelevanten Dingen füllst um inhaltlich nicht stimmige Aussagen zu untermauern.
Und ich habe dir bereits gestern gesagt, das ich die Beispieldatei von dir in einer anderen Umgebung probiert habe...
Ja, nur war das nachgeschoben und die generelle aussage war anders.
Ich habe bereits in meinem ALLERERSTEN post eine Möglichkeit benannt wie die Problematik Message-Box evtl. zusammenhängt, nämlich NICHT damit das die Messagebox einzig im Code steht sondern das sie den Fokus beeinflußt:

"Allenfalls kann man mutmaßen, nämlich das die Messsage-Box keinen Objekt-Bezug braucht und deshalb immer startet, weil man sie aber manuell beenden muß dabei zwangsweise der Fokus wechselt und dadurch unbeabsichtigt auch ein Objektbezug (mutmaßlich auf das dann aktive Dokument) hergestellt wird."

Das hast Du dauerhaft ignoriert und Dich immer nur darauf bezogen es geht darum ob dier Message-Box-Zeile ansich im Code steht und das Letzteres stimmt bestreite ich von Anfang an, weil ich keinerlei sinnvollen Grund dafür kenne.

Nachdem Du nun selbst bei der Beispieldatei von DPunch genau das sehen konntest scheinst Du es immer noch nicht einzusehen, weil Du die Dinge vermischt.
'Vermischen' ist hier ganz einfach beschrieben (auch dazu hatte ich mich bereits geäußert): es geht nicht um die FRage das die Msgbox IRGENWIE Einfluß hat, denn das sie das haben kann bestreitet exakt niemand, sondern daran das Du darauf beharrst das es nur an der Codezeile liegt. ES liegt jedoch nicht nur an der Codezeile wenn es ein Fokusereignis ist (denn dafür ließe sich dann ein anderer Workaround statt der M-Box finden) und es liegt auch nicht nur an der codeezeile wenn in DEiner Arbeitsumgebung Nebenbedingungen vorliegen,. die hier niemand kennen kann.
Und das zu mir?
Ja, sicher.
Soweit ich mich erinnere hattest du einen ähnlichen Satz von dir gegeben.
Wo denn? Du scheinst überhaupt nicht zu begreifen das Du mich nötigenfalls beleidigen darfst soviel Du willst, einzig ist ein GRund für mich nicht aktzeptabel: nämlich der Versuch meine Hinweise auf fachlich fehlerhafte Aussagen DEinerseits damit abzublocken, denn fachliche Aussagen verdienen zur Verteidigung eine fachliche Erwiderung und keine persönliche.



Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Start eines Makros

Beitrag von Stephan »

Womit wir nun wohl sagen dürfen es liegt NICHT an der Messagebox sondern nur an irgendeinem DEtail DEiner Artbeitsumgebung das wir jedoch nicht kennen können ...
Bei mir ist dieses Detail das ich mir in der Basic-IDE angesehen habe ob das Makro arbeitet, anhand dessen ob dort der Start-Button aktiv ist. Das Wechseln zur Basic-IDE hat offensichtlich ebenfalls bewirkt das das Makro arbeitet.


Gruß
Stephan
Philipp_19
****
Beiträge: 115
Registriert: Mo, 29.08.2011 09:01
Wohnort: Duisburg

Re: Start eines Makros

Beitrag von Philipp_19 »

Stephan hat geschrieben:Bei mir ist dieses Detail das ich mir in der Basic-IDE angesehen habe ob das Makro arbeitet, anhand dessen ob dort der Start-Button aktiv ist. Das Wechseln zur Basic-IDE hat offensichtlich ebenfalls bewirkt das das Makro arbeitet.
Sagst du mir damit nun, dass das Makro erst gestartet ist, nachdem du in die IDE gewechselt bist?
Stephan hat geschrieben:Nein, denn das bei Öffnen der Vorlage startende Makro enthält garkeine Message-Box:
Philipp_19 hat geschrieben:Anscheinend habe ich nur falsch rumgedacht. Habe die MessageBox allem Anschein nach rausgenommen und hier geschrieben sie sei drin. Ändert aber nichts an der Problematik: Fügt eine einfache Message im Modul 2 ein, direkt als erste Codezeile und die Makros laufen nach dem bestätigen durch.
Das hatte ich bereits erläutert.
Aber wenn das Makro bei dir ohne MessageBox startet, indem du einfach nur die Vorlage öffnest, und dann wartest, werden wir klären müssen, welche Einstellung ein solches Verhalten bewirken können.
Stephan hat geschrieben:Das hast Du dauerhaft ignoriert und Dich immer nur darauf bezogen es geht darum ob dier Message-Box-Zeile ansich im Code steht und das Letzteres stimmt bestreite ich von Anfang an, weil ich keinerlei sinnvollen Grund dafür kenne.
Ich habe den Hinweis durchaus zur Kenntnis genommen, doch hilft mir das nicht wirklich weiter. Selbst wenn durch die MessageBox der Objekt-Bezug hergestellt wird, muss es eine elegantere Lösung geben, bzw. würde ich gerne wissen, ob dies nun der Fall ist oder nicht.


Ich werde aus deinem Ergebnis nun nicht wirklich schlau: Bei balu und mir läuft das Makro nicht rund (ohne Box), bei mir wird das Problem über das Einfügen der MessageBox an folgender Stelle gelöst:

Code: Alles auswählen

Sub Test
   MsgBox "Test"
   Dim b as String
   Dim doc as Object
   
   Table = thiscomponent.GetTextTables().GetByIndex(0)
   Tablex = thiscomponent.GetTextTables().GetByIndex(2)
Öffne ich die Vorlage OHNE irgendetwas zu tuen (im Code ist nun keine MsgBox), so steht in meiner dritten Tabelle ein "a". Und mehr passiert nicht. Das Makro wird nicht angestoßen, auch wenn ich etwas Zeit verstreichen lasse.
Ich arbeite mit XP SP3 und der OOo Version 3.3.0.
Ihr scheint die Vorlage unter Win7 zu testen.
Stephan hat geschrieben:weshalb ich nach genauem Code fragte den wir weiterhin nicht bekommen haben da Du ja davon überzeugt bist das die 'anderen' Mitarbeiter REcht haben wenn sie sagen das es damit ohnehin nicht zu tun haben kann.
Du willst den Quellcode unserer Schnittstelle oder welchen Code soll ich dir liefern?
Dabei ist garkein weiterer Code von Belang. Ich habe die Beispiel-Vorlage auf meinem Desktop liegen, starte sie dort und bekomme ein Dokument "Unbekannt _", in dem das Makro "Test" nur dann automatisch angestoßen wird, wenn ich eine MsgBox dadrin verwende.

Grüße

Edit: Du sagtest, dass die MsgBox nicht unbeteiligt ist an der Sache, doch eben nicht ausschlaggebend. Genau das sehe ich aber, habe aber auch nie behauptet, dass es der einzige Faktor ist. Ich habe da wohl zu fest drauf argumentiert. Meine Beobachtungen sind eben, dass durch das hinzufügen der MsgBox das Makro angestoßen wird.
Allem Anschein nach wird es was mit dem Fokus zu tun zu haben, den die MessageBox beim Schließen zum Dokument herstellt. Das das Dokument dann den Fokus bekommt. Aber wie umgehe ich das?
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
Philipp_19
****
Beiträge: 115
Registriert: Mo, 29.08.2011 09:01
Wohnort: Duisburg

Re: Start eines Makros

Beitrag von Philipp_19 »

Kleine Ergänzung:
Ist euch aufgefallen, dass das erste "a" in der Tabelle3 durch das Makro eingefügt wird?
Das heißt, dass das Makro durchaus startet (ohne MsgBox), aber in der Do-Loop-Schleife irgendwie stecken bleibt, oder sehe ich das falsch?

Grüße
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Start eines Makros

Beitrag von balu »

Philipp_19 hat geschrieben:
balu hat geschrieben:Der Text-Cursor ist eingefroren, er blinkt nicht. Und das bedeutet in meinen Augen, dass OOo sehr beschäftigt ist. Es weiß wohl nur nicht so recht was es machen soll, und gibt deshalb den Cursor nicht frei.
Aber warum bewirkt dann das einfügen einer MessageBox (bei mir), dass er, nach deinen Wort, weiß was er tun soll und allem Anschein nach nicht mehr so sehr beschäftigt ist?
Weiß ich nicht, und habe ich nicht weiter nachgeforscht, da keine Zeit mehr war. Und ganz ehrlich, ist aber nicht bös gemeint, habe ich jetzt auch keine Lust dazu das weiter zu untersuchen.


Stephan hat geschrieben:
-Öffnen der Vorlage
-In Tabelle 3 wird EIN "a" eingetragen
-Es passiert nichts weiter.
Bei mir nicht.
Das Makro läuft OHNE Mesage-Box ununterbrochen durch

sowie fortlaufend weitere a. (Windows7, OOo 3.3.0)
Also nun wird es aber endgültig komisch und merkwürdig!
Meine Testumgebung heute Mittag:
WinXP
OOo 3.2.1
Bis auf den eingefrorenen Text-Cursor geschah nichts weiter. Und nun hatte ich die gleiche Datei noch mal unter der 3.3.0 (selbst gemachte Portable) getestet, und keinen Unterschied zu der 3.2.1 festgestellt. Ach ja! Auch die 3.3.0 unter WinXP. Also gleicher Rechner, nur zwei erschiedene OOo-Versionen.

Blöde Frage: "Welches Windows spinnt denn nun, XP oder 7?"

Philipp_19 hat geschrieben: Ist euch aufgefallen, dass das erste "a" in der Tabelle3 durch das Makro eingefügt wird?
Das heißt, dass das Makro durchaus startet (ohne MsgBox), aber in der Do-Loop-Schleife irgendwie stecken bleibt, oder sehe ich das falsch?
Deine Beobachtung kann ich so weit bestätigen. Das liegt aber wohl an deiner DO-LOOP selbst, denn es gibt da ja verschiedene Variationen wie eine LOOP aufgebaut werden kann. Kenne mich aber noch nicht damit so aus, da mir das Verständnis dazu fehlt. Und außerdem ist die Hilfe (F1) in dieser Hinsicht nicht wirklich hilfreich. Im Wiki habe ich bis jetzt noch keine passende Stelle gefunden wo mehr darüber nacvhzulesen ist. Wenn da jemand den richtigen Link dazu hat, bitte her damit. Würd mich sehr darüber freuen.

Ich habe aber in meinem alten SO 5.2 etwas mehr darüber in der Hilfe gefunden.

Code: Alles auswählen

Do...Loop-Anweisung [Runtime]
Wiederholt die zwischen der Do- und der Loop-Anweisung aufgeführten Anweisungen solange (While) die angegebene Bedingung wahr ist oder bis (Until) die angegebene Bedingung wahr wird.

Syntax:
see Parameter see

Parameter:
Syntax

Do [{While | Until} Bedingung = True]

Befehlsblock

[Exit Do]

Befehlsblock

Loop

oder

Do

Befehlsblock

[Exit Do]

Befehlsblock

Loop [{While | Until} Bedingung = True]

Param./Element

Bedingung : Ein Vergleichsausdruck, numerischer Ausdruck oder Zeichenfolgenausdruck, der wahr (True) oder falsch (False) ist.

Befehlsblock : Die Anweisungen, die wiederholt werden, solange die angegebene Bedingung wahr ist oder sobald die angegebene Bedingung wahr wird.

Die Do...Loop-Anweisung eignet sich, um eine Schleife zu konstruieren, die solange durchlaufen wird, bis oder solange eine bestimmte Bedingung erfüllt ist. Die Abbruchkriterien müssen entweder hinter der Do-Anweisung oder hinter der Loop-Anweisung angegeben werden; beides kombiniert ist nicht statthaft. Folgende vier Kombinationen sind also möglich.

Syntax

Do While Bedingung = True

...Befehlsblock

Loop

Das Programm überprüft, ob die Bedingung wahr ist. Ist sie falsch, geht es mit der Programmausführung direkt hinter Loop weiter. Ist die Bedingung wahr, wird die Schleife durchlaufen, das Programm trifft auf Loop und springt zurück zur Do-Anweisung. Ist die Bedingung jetzt immer noch wahr, wird die Schleife abermals durchlaufen, ansonsten fährt das Programm mit der Ausführung des hinter der Loop-Anweisung stehenden Befehls fort.

Kurz zusammengefaßt: Die Schleife wird nur dann und nur solange, wie die Bedingung wahr ist, ausgeführt.

Do Until Bedingung = True

...Befehlsblock

Loop

Das Programm überprüft, ob die Bedingung wahr ist. Ist sie es, geht es mit der Programmausführung direkt hinter Loop weiter. Ist die Bedingung nicht wahr, wird die Schleife durchlaufen, das Programm trifft auf Loop, springt zurück zur Do-Anweisung. Ist die Bedingung jetzt immer noch nicht wahr, wird die Schleife abermals durchlaufen, ansonsten fährt das Programm mit der Ausführung der hinter der Loop-Anweisung stehenden Anweisung fort.

Kurz zusammengefaßt: Die Schleife wird nur dann ausgeführt, wenn die Bedingung zunächst falsch ist, und dann solange bis die Bedingung wahr ist.

Do

...Befehlsblock

Loop While Bedingung = True

Das Programm tritt sofort in die Schleife ein. Trifft es auf Loop, überprüft es, ob die Bedingung wahr ist. Ist sie es, geht es mit der Programmausführung bei Do weiter - die Schleife wird wiederholt. Erst wenn die Bedingung hinter Loop falsch wird, tritt das Programm aus der Schleife aus.

Kurz zusammengefaßt: Die Befehle innerhalb der Schleife werden in jedem Fall einmal und solange wie die Bedingung wahr ist, ausgeführt.

Do

...Befehlsblock

Loop Until Bedingung = True

Das Programm tritt sofort in die Schleife ein. Trifft es auf Loop, überprüft es, ob die Bedingung wahr ist. Ist sie es nicht, geht es mit der Programmausführung bei Do weiter - die Schleife wird wiederholt. Erst, wenn die Bedingung hinter Loop wahr wird, tritt das Programm aus der Schleife aus.

Kurz zusammengefaßt: Die Befehle innerhalb der Schleife werden in jedem Fall einmal und solange bis die Bedingung wahr wird, ausgeführt.

Wichtigster Unterschied zwischen den ersten beiden und den letzten beiden Konstruktionen: Bei den ersten beiden Konstruktionen wird die Schleife nicht unbedingt, also nur in Abhängigkeit von der Bedingung ausgeführt. Bei den letzten beiden Konstruktionen werden die zwischen Do und Loop stehenden Befehle wenigstens ein einziges Mal ausgeführt.

Mit Hilfe der Anweisung Exit Do kann die Schleife unbedingt verlassen werden. Dieser Befehl befindet sich innerhalb eines Befehlsblocks, der durch Do und Loop umschlossen ist. In der Regel konstruieren Sie hier mit Hilfe der If...Then-Struktur eine Abbruchbedingung im Sinne von:

Do...

Befehle

If Bedingung = True Then Exit Do

Befehle

Loop...

Beispiel:

Sub ExampleDoLoop 
Dim sDatei As String 
Dim sPath As String 
sPath = "c:\" 
sDatei = Dir$( sPath ,22) 
If sDatei <> "" Then 
Do 
Msgbox sDatei 
sDatei = Dir$ 
Loop Until sDatei = "" 
End If 
End sub 
Vielleicht hilft ja der Hilfe-Text. Wenn nicht, is auch nicht schlimm.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Philipp_19
****
Beiträge: 115
Registriert: Mo, 29.08.2011 09:01
Wohnort: Duisburg

Re: Start eines Makros

Beitrag von Philipp_19 »

balu hat geschrieben:Weiß ich nicht, und habe ich nicht weiter nachgeforscht, da keine Zeit mehr war. Und ganz ehrlich, ist aber nicht bös gemeint, habe ich jetzt auch keine Lust dazu das weiter zu untersuchen.
Wird wohl auch eher unwichtig sein, wenn die Tatsache ernst zu nehmen ist, das die DO-LOOP nicht korrekt ist.
balu hat geschrieben:Also nun wird es aber endgültig komisch und merkwürdig!
Meine Testumgebung heute Mittag:
WinXP
OOo 3.2.1
Ich teste ebenfalls unter WinXP, werde die Beispieldatei von mir nochmals unter Win7 ausprobieren.
balu hat geschrieben:Im Wiki habe ich bis jetzt noch keine passende Stelle gefunden wo mehr darüber nacvhzulesen ist. Wenn da jemand den richtigen Link dazu hat, bitte her damit. Würd mich sehr darüber freuen.
Mein Wissen über die DO-LOOP habe ich von Andrew Pitonyak, der die unterschiedlichen Variationen durchaus ganz ansehnlich beschreibt. Hatte die Loop nach meiner Beobachtung nochmals angeschaut, kann mir aber nicht erklären, was daran fehlerhaft ist.
Ich denke mir aber, das hier jemand einen Fehler durchaus gesehen hätte, auch wenn (keine Unterstellung) wohl keiner darauf geachtet hat.

Ich werde das ganze nochmals mit abgeänderten DO-LOOPs ausprobieren, vielleicht findet sich der Fehler.
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
Philipp_19
****
Beiträge: 115
Registriert: Mo, 29.08.2011 09:01
Wohnort: Duisburg

Re: Start eines Makros

Beitrag von Philipp_19 »

Und tatsächlich, der einzige logische Fehler der mir auf Anhieb auffiel war das Wait.
Nach dem entfernen läuft das Makro direkt flüssig durch.

Hat dafür jemand eine mögliche Erklärung? Ich frage mich warum sich die DO-LOOP beim ersten Durchlauf (den die Schleife ja auf alle Fälle macht, das beweist ja das einzelne "a") aufhängt.

Nunja, ich werde das Makro nun wieder so ändern wie ich es für mich benötige und dann nochmals ausprobieren.

Grüße
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Start eines Makros

Beitrag von F3K Total »

DPunch hat geschrieben:Aloha

Das liegt daran, dass das Ausführen eines Dialogs zu einem so frühen Zeitpunkt offensichtlich den Verbindungsaufbau zwischen Model<->Controller<->View unterbricht.
XRay *wird* ausgeführt, hängt aber hinter dem Dokument fest, weil ein Dialog an das aktive Frame gebunden ist, welches zu diesem Zeitpunkt noch nicht identifiziert bzw zugeordnet ist.
Dem kann man manuell z.B. so (vor dem Aufruf von XRay) entgegenwirken:

Code: Alles auswählen

	frame = thisComponent.CurrentController.Frame
	thisComponent.CurrentController.Frame.ActiveFrame = frame
	xray thisComponent
Hallo DPunch,
das habe ich versucht, es ändert sich nix.
Der Code von Stephan wird ausgeführt, der Cusor steht, Xray startet nicht.
Fenster klein/groß-> Xray startet, Cursor blinkt.
Wie gesagt, an "Dokument neu" gehängt geht es nicht, an "Ansicht wurde erzeugt" geht es.

Gruß R
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Start eines Makros

Beitrag von Stephan »

Sagst du mir damit nun, dass das Makro erst gestartet ist, nachdem du in die IDE gewechselt bist?

Nein, ich kann mit Hilfe von:

Code: Alles auswählen

ThisComponent.title = "Test"
eindeutig feststellen das das Makro nach Öffnen der Datei sofort startet.
Ich habe den Hinweis durchaus zur Kenntnis genommen, doch hilft mir das nicht wirklich weiter.
Es hätte aber der Diskussion geholfen. Sorry, nur Du bist es doch der ernst genommen werden will und so sehr ich bezüglich der MSGbox anderer Meinung bin so sehr gehe ich aber gleichzeitig davon aus das ich mich irren könnte und das solange bis Du bestätigst das Du auch zu der Einsicht gekommen bist das es nicht direkt an der MsgBox-Codezeile liegt.

Du bist es der mehrfach behauptet hat das das Makro nicht läuft und das ist eine eigentlich klare Aussage, aber auch eine Falsche und diesse Dinge muß man doch klären sonst sucht man nach falschen Lösungen weil man falsche Voraussetzungen annimmt.
Selbst wenn durch die MessageBox der Objekt-Bezug hergestellt wird, muss es eine elegantere Lösung geben, bzw. würde ich gerne wissen, ob dies nun der Fall ist oder nicht.
Also ich würde das tun was jemand anderes doch hier bereits geäußert hat (oder bilde ich mir das nur ein) und das Makro an das Ereignis "Ansicht wurde erzeugt" binden, bei mir läuft es dann.

Falls dieses VGorgehen nicht aktzeptabel ist müßte man wissen wwarum um weiterüberlegen zu können. Falls dass Makro nur Aktionen bei der Dokumenterzeugung ausführen soll ließe sich das jedenfalls auch ohne 'Dokument wurde erzeugt' regeln.




Gruß
Stephan
Dateianhänge
Beispiel-neu.ott
(13.87 KiB) 135-mal heruntergeladen
Philipp_19
****
Beiträge: 115
Registriert: Mo, 29.08.2011 09:01
Wohnort: Duisburg

Re: Start eines Makros

Beitrag von Philipp_19 »

Okay, das sehe ich alles ein.
Die Lösung des Problems lag nun jedoch in der DO-LOOP Schleife.
Das dort vorhandene Wait schien das Makro zu unterbrechen (?) bzw. anzuhalten.

Die eingefügte MessageBox muss dies aber doch irgendwie unterbunden bzw. beeinflusst haben.

1. Ohne Wait läuft das Makro so, wie du das Verhalten beschrieben hast.
2. Mit Wait ohne MessageBox hat es bei mir und balu zu aussetzern geführt.
3. Mit Wait mit MessageBox lief es bei mir dann wieder problemlos.

Dies ist meine Beobachtung unter WinXP.
Nach deinen Aussagen Stefan hast du keinerlei Probleme mit dem Makro unter Win7.

Man könnte nun mutmaßen, dass das ganze am Betriebssystem liegt, der Verdacht liegt doch, denke ich, irgendwo nahe.
Ein Widerspruch ist jedoch, dass das Makro nur unter der Bedingung (siehe 2.) nicht richtig läuft. Zwei Möglichkeiten funktionieren.

Stephan hat geschrieben:Du bist es der mehrfach behauptet hat das das Makro nicht läuft und das ist eine eigentlich klare Aussage, aber auch eine Falsche und diesse Dinge muß man doch klären sonst sucht man nach falschen Lösungen weil man falsche Voraussetzungen annimmt.
Was auch nur bedingt stimmt. Du hast durchaus recht, da lag ich falsch, dass das Makro läuft. Doch es läuft eben nicht flüssig, sondern unterbricht sich.
Und ich denke, auch wenn ich nun die Lösung habe, dass es dafür eine Erkärung geben muss.

Also nochmal zusammengefasst: Das entfernen von Wait hat das Makro bei mir lauffähig gemacht. Ich habe also die Annahme, dass das Wait das Makro in irgendeine Art und Weise aufgehalten hat. Durch das Hinzufügen einer MessageBox wurde dieser "Zwischenstopp" nicht eingelegt.
Auch wurde das pausierte (ich nenn es mal so) Makro durch verkleinern/vergrößern wieder angestupst und lief weiter.
Das hat man an dem "a" in der Tabelle 3 wohl deutlich gesehen (wenn es denn bei einem gestoppt hat).
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
Antworten