Start eines Makros

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: Start eines Makros

Re: Start eines Makros

von DPunch » Sa, 08.10.2011 17:18

Aloha
F3K Total hat geschrieben: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.
Ich habe den Code gerade nochmal getestet, unter XP + 3.2.1 funktioniert er bei mir einwandfrei - sowohl das Problem mit XRay, als auch das von Philipp_19 geschilderte Problem treten mit diesen 2 Codezeilen nicht mehr auf.

Re: Start eines Makros

von Philipp_19 » Do, 06.10.2011 15:46

Hallo
balu hat geschrieben:Nein! Wenn der Text-Cursor eingefroren ist, dann ist das Makro eben nicht unterbrochen! Es verhart nur an einer ganz bestimmten Stelle.
Okay, dazu bin ich wahrscheinlich nicht so tief drin wie ihr. Für mich hat es eben den Eindruck gehabt, dass es pausiert, sich unterbricht oder wie man es nennen mag.
balu hat geschrieben:Würde das Makro wirklich unterbrochen sein, dann würde der Text-Cursor auch wieder blinken. Oder reden wir jetzt von 2 verschiedenen Paar Schuhe?
Das verstehe ich durchaus.
balu hat geschrieben:Jaeien!
Stephan (mit *ph* und nicht mit *f* :wink:) hat aber auch noch mal deutlich gemacht, dass es durchaus noch eine Alternative gibt.
Entschuldige, dann mit ph ;-). Ich werde diese Alternative natürlich testen, hatte mich aber nun erstmal an eine andere Aufgabe gemacht. Das ganze klingt aber durchaus interessant.
balu hat geschrieben:Was ich zumindest nicht weiß, ob das Makro auch startet und ordnungsgemäß durchläuft, wenn die Datei durch eine andere Datei per Makro im Hintergrund geladen wird. Funktioniert dann auch "Ansicht wurde erzeugt"? Das habe ich jetzt nicht getestet. Das müsstest Du selber mal auf der Arbeit probieren.
Werde ich machen. Was genau du mit dem Öffnen der Datei über eine andere meinst, kann ich nicht richtig nachvollziehen. Wenn du auf die Schnittstelle anspielst, so scheint es damit nur ein kleines Problem zu geben, was ich mit dem Makro "Test" umgehen muss.
Werde mir das ganze aber anschauen.
balu hat geschrieben:Also würde ich das jetzt so für mich interpretieren, dass die Ansicht noch nicht komplett erstellt wurde. Und von daher es ratsamer wäre das Makro, so wie von Stephan gesagt, an diesem Punkt zu aktivieren, anstatt bei "Neues Dokument".

Und wenn wir jetzt wieder an die Messagebox denken, dann ergibt das zumindest für mich ein Sinn wenn das Makro dadurch läuft. Denn durch sie wird eine neue Ansicht erzwungen. Oder Stephan wie siehst Du das?
Genau das würde die Veränderung durch die MsgBox erklären. Das wäre eine akzeptable Erklärung, die man sich wohl im Hinterkopf abspeichern sollte.

Aber wenn durch die MessageBox eine neue Ansicht erzwungen wird, würde das bedeuten, dass das Makro ohne MessageBox nicht weiterlaufen würde. Das Entfernen der Codezeile "Wait _" hat das Makro ja aber mit dem Event "Neues Dokument" lauffähig gemacht. Nach deiner Erklärung könnte man schlussfolgern, dass das Wait das Laden der Ansicht "unterbricht" bzw. das dort der Cursor einfriert.

Noch eine Verständnisfrage: Während das Makro (der Cursor) bei mir einfriert, kann ich heiter in dem Dokument arbeiten. Ich kann Texte schreiben, löschen, makieren und bearbeiten. Solange ich nicht in die Menüleiste springe, nimmt er die Veränderungen alle hin, ohen dass das Makro "weiterläuft".
Kann mir das jemand erklären?
Edit: Nach einigen kleinen Tests muss ich das letzte Statement zurücknehmen: Ich bin lediglich in der Lage, Text zu schreiben bzw. zu löschen. Makieren und bearbeiten ist nicht möglich. Frage besteht dennoch.

Grüße

Re: Start eines Makros

von balu » Do, 06.10.2011 15:25

Hallo Philipp,

mag sein das sich meine Worte nach Haarspalterei anhören, aber dennoch sollte man sich in manchen Situationen genau überlegen was man sagt. Das wiederum ist aber auch nicht immer grad einfach.
Doch es läuft eben nicht flüssig, sondern unterbricht sich.
Nein! Wenn der Text-Cursor eingefroren ist, dann ist das Makro eben nicht unterbrochen! Es verhart nur an einer ganz bestimmten Stelle. Man kann in diesem Zusammenhang auch folgendes sagen: "Das Makro befindet sich in einer Endlos-Schleife!" Eigentlich ist das ein geflügeltes Wort *Endlos-Schleife*, aber es passt ausnahmsweise sehr gut.

Würde das Makro wirklich unterbrochen sein, dann würde der Text-Cursor auch wieder blinken. Oder reden wir jetzt von 2 verschiedenen Paar Schuhe?


Die Lösung des Problems lag nun jedoch in der DO-LOOP Schleife.
Das dort vorhandene Wait schien das Makro zu unterbrechen (?) bzw. anzuhalten.
Jaeien!
Stephan (mit *ph* und nicht mit *f* :wink:) hat aber auch noch mal deutlich gemacht, dass es durchaus noch eine Alternative gibt.
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.
Und das kann ich nur bestätigen, dass es dann läuft. Deine Makros sind unverändert, nur der Aufruf hat sich geändert. Und gut ist!
Was ich zumindest nicht weiß, ob das Makro auch startet und ordnungsgemäß durchläuft, wenn die Datei durch eine andere Datei per Makro im Hintergrund geladen wird. Funktioniert dann auch "Ansicht wurde erzeugt"? Das habe ich jetzt nicht getestet. Das müsstest Du selber mal auf der Arbeit probieren.

Was mir in diesem Zusammenhang wohl schon früher aufgefallen war, ich aber nicht für Beachtungswürdig hielt, war folgendes.
Deine Beispieldatei geöffnet, und ca. 20 bis 30 sekunden nichts gemacht. Auch nicht den Maus-Cursor bewegt. Erst nach dieser Zeit hatte ich die Maus Richtung Symbolleiste bewegt. Und da war mir dann aufgefallen, dass sich die Leiste durch die "Berührung" des Maus-Cursor etwas geändert hatte. Der Name bei dem Textfeld *Schriftname* und das Symbol für Textausrichtung Links wurden befüllt, beziehungsweise aktiv. Das ist aber nicht der Zustand wenn die Datei geöffnet wurde.

Also würde ich das jetzt so für mich interpretieren, dass die Ansicht noch nicht komplett erstellt wurde. Und von daher es ratsamer wäre das Makro, so wie von Stephan gesagt, an diesem Punkt zu aktivieren, anstatt bei "Neues Dokument".

Und wenn wir jetzt wieder an die Messagebox denken, dann ergibt das zumindest für mich ein Sinn wenn das Makro dadurch läuft. Denn durch sie wird eine neue Ansicht erzwungen. Oder Stephan wie siehst Du das?



Gruß
balu

Re: Start eines Makros

von Philipp_19 » Do, 06.10.2011 14:05

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).

Re: Start eines Makros

von Stephan » Do, 06.10.2011 10:05

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) 136-mal heruntergeladen

Re: Start eines Makros

von F3K Total » Mi, 05.10.2011 20:28

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

Re: Start eines Makros

von Philipp_19 » Mi, 05.10.2011 17:00

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

Re: Start eines Makros

von Philipp_19 » Mi, 05.10.2011 16:45

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.

Re: Start eines Makros

von balu » Mi, 05.10.2011 16:30

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

Re: Start eines Makros

von Philipp_19 » Mi, 05.10.2011 14:42

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

Re: Start eines Makros

von Philipp_19 » Mi, 05.10.2011 14:05

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?

Re: Start eines Makros

von Stephan » Mi, 05.10.2011 13:52

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

Re: Start eines Makros

von Stephan » Mi, 05.10.2011 13:10

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) 3763 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

Re: Start eines Makros

von balu » Mi, 05.10.2011 13:00

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

Re: Start eines Makros

von Philipp_19 » Mi, 05.10.2011 12:55

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

Nach oben