Anwendung editieren während Macro lauft

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: Anwendung editieren während Macro lauft

Re: Anwendung editieren während Macro lauft

von DPunch » Fr, 24.12.2010 14:45

Aloha

Du musst natürlich alle Kontrollelemente, die Du im Dialog verbaut hast, auch dem Model mitgeben und Du darfst natürlich kein Kontrollelement dem Model mitgeben, dass Du im Dialog nicht verbaut hast.

Hast Du also in Deinem Dialog keine "CheckBox1", dann fallen diese zwei Zeilen weg:

Code: Alles auswählen

oChk = _MyDialog.getControl("CheckBox1")
oDlgModel.insertByName("CheckBox1", oChk.Model)
analog funktioniert das bei allen anderen Kontrollelementen.

Re: Anwendung editieren während Macro lauft

von DPunch » Mi, 22.12.2010 13:21

Aloha
Stephan hat geschrieben:Meines Wissens ist dafür eine praktische Möglichkeit eine Schleife, die auf Änderung einer Variable wartet.
Zum Überprüfen von einfachen Abbruchbedingungen für komplexere Dinge erscheint diese Vorgehensweise durchaus sinnvoll, keine Frage - allerdings fehlte Deinem ersten Einwurf dieser Kontext und dementsprechend habe ich auch darauf geantwortet.
Denn für sich allein gestellt gefiel mir der Vorschlag, vor allem in Bezug auf das ursprüngliche Thema und das geschilderte Anliegen, - man möge es mir verzeihen - überhaupt nicht.
Stephan hat geschrieben: Also genau den Fall DEiner Beispieldatei, nur mit automatischen Beenden des Dialogs, sobald die Auswahl beendet ist.
Dafür müsste ich wissen, wann der Anwender seine Auswahl beendet hat. Vielleicht hat er sich verklickt? Vielleicht will er noch mehr selektieren? Vielleicht will er noch schnell in irgendeiner Zelle etwas eintragen?
Ich nehme dem Anwender prinzipiell nur in den seltensten Fällen die Entscheidung ab, wann er mit etwas fertig ist, das sollte er in meinen Augen schon selber entscheiden und entsprechend mitteilen (z.B. per Buttonklick).
Abgesehen davon erfordert auch die Verwendung einer Schleife, die auf eine Variablenänderung wartet, dass diese Variable geändert wird - und diese Änderung kann ja letztendlich auch nur manuell oder als Reaktion auf eine bestimmte Aktion folgen. In diesem Fall kann ich statt der Variablenänderung aber auch einfach den Dialog ausblenden und brauche keine Schleife im Hintergrund.
Stephan hat geschrieben:
aber auch in diesem Fall ist die Kontrolle über das Sheet *nicht* wieder in den Händen des Benutzers, es wird lediglich eine Bereichsauswahl zugelassen.

Keine Ahnung was das meint. Der Benutzer fragte nach einer Möglichkeit einen Bereich zur Laufzeit des Makros markieren zu können, genau das macht das Beispiel.

Wie ich schon schrub:
Das ist wohl die Variante, die dem Threadersteller vorschwebt
Aber, man möge die Haarspalterei verzeihen, die einzige Frage, die der Threadersteller direkt gestellt hat, war:
Ist es möglich, während des Macro-Laufes die Kontrolle über das sheet wieder an den User zu übergeben?
Und diese Frage muss man auch bei der Verwendung z.B. des Standard-Auswahldialogs verneinen.
Bereichsauswahl: ja
Kontrolle über das Sheet: nein

Re: Anwendung editieren während Macro lauft

von Stephan » Mi, 22.12.2010 12:54

Das "selbst" ist in diesem Fall die völig falsche Wortwahl, denn eigentlich ist es *nur* bei derart simplen Dingen überhaupt überlegenswert, eine solche Lösung zu implementieren - und selbst dann würde ich niemandem empfehlen wollen, im Hintergrund möglicherweise eine Endlos-Schleife zu starten.
Dann solltest Du erklären wie Du bei StarBasic einen nichtmodalen Dialog, denn Du NICHT zur Laufzeit erzeugst, sondern nur zur Laufzeit sichtbar machst, ohne Benutzerinteraktion abbrichst. Also genau den Fall DEiner Beispieldatei, nur mit automatischen Beenden des Dialogs, sobald die Auswahl beendet ist.
Meines Wissens ist dafür eine praktische Möglichkeit eine Schleife, die auf Änderung einer Variable wartet. (Ein Listener wäre eine weitere Möglichkeit)

So wende ich das auch bei sehr komplexen Dingen an, zu beachten ist lediglich das OOo ein sehr kurzes Wait in der SChleife braucht, 1ms (WAIT 1) reicht dafür.

Beispiel wäre meine recht umfangreiche Serienbriefextension, welche z.B. im Zusammenhang mit einem Artikel von Thomas Krumbein (hier im Forum Toxitom) vor einigen Monaten in der C't veröffentlicht wurde:
http://www.heise.de/artikel-archiv/ct/2010/14/166_kiosk

http://www.heise.de/ct/ftp/10/14/166/

aber auch in diesem Fall ist die Kontrolle über das Sheet *nicht* wieder in den Händen des Benutzers, es wird lediglich eine Bereichsauswahl zugelassen.


Keine Ahnung was das meint. Der Benutzer fragte nach einer Möglichkeit einen Bereich zur Laufzeit des Makros markieren zu können, genau das macht das Beispiel.


Gruß
Stephan

Re: Anwendung editieren während Macro lauft

von DPunch » Mi, 22.12.2010 12:37

Aloha

Ich glaube, dass Deine Einwürfe etwas am Problem des Threaderstellers vorbeigehen.
Stephan hat geschrieben:Keine Ahnung was das meint, da selbst bei so völlig einfachen Dingen wie:
(...)
jederzeit während des Makroablaufs auf das Tabellenblatt zugegriffen werden kann.
(...)
Das "selbst" ist in diesem Fall die völig falsche Wortwahl, denn eigentlich ist es *nur* bei derart simplen Dingen überhaupt überlegenswert, eine solche Lösung zu implementieren - und selbst dann würde ich niemandem empfehlen wollen, im Hintergrund möglicherweise eine Endlos-Schleife zu starten.
Stephan hat geschrieben:Das ist nicht nur möglich, sondern das ist der Normalfall.
Das mag streng genommen so sein, aber dafür müsste der Anwender seine Aktionen schnell genug durchführen können, bevor das Makro durchgelaufen ist.
Will man aber eine Interaktion mit dem Benutzer (wie der Threadersteller zum Markieren eines Bereichs o.Ä.), wird man nicht um Workarounds herumkommen (ala mottco, das erzeugen eines Dialogs, (evtl ohne ihn auszuführen) und das Handlen der Interaktion pur über die zugewiesenen Events halte ich für ein Workaround, die Tatsache, dass die Ansicht des Dialogs unter Umständen unentfernbar im Dokument festhängt, bis es neu gestartet wird, unterstreicht das noch - und abgesehen davon wird ein neues Makro gestartet, so gesehen ist auch hier "während des Macro-Laufes" die Kontrolle *nicht* beim Anwender).
Stephan hat geschrieben:UNd warum verwendest Du nicht den Standard-Auswahldialog, der dafür vorgesehen ist? Beispiel hängt an(...)
Das ist wohl die Variante, die dem Threadersteller vorschwebt (und ich muss zugeben, dass ich sie noch gar nicht kannte) - aber auch in diesem Fall ist die Kontrolle über das Sheet *nicht* wieder in den Händen des Benutzers, es wird lediglich eine Bereichsauswahl zugelassen.

Re: Anwendung editieren während Macro lauft

von Stephan » Mi, 22.12.2010 12:00

Das entprechende calc-sheet ist jedoch nicht zugänglich.
Keine Ahnung was das meint, da selbst bei so völlig einfachen Dingen wie:

Code: Alles auswählen

Sub Main
Do
  x = ThisComponent.Sheets().GetByIndex(0).getCellRangeByName("A1").Value
Loop While x <> 1

Msgbox "Ende"

End Sub
jederzeit während des Makroablaufs auf das Tabellenblatt zugegriffen werden kann.
Ist es möglich, während des Macro-Laufes die Kontrolle über das sheet wieder an den User zu übergeben?
Das ist nicht nur möglich, sondern das ist der Normalfall.
Als workaround könnte ich evtl. eine ja/nein-Abfrage in die msgbox einbauen, aufgrund das Macro beendet wird, falls die Markierung noch nicht vorgenommen wurde. Die bisher vorgesehene Variante halte ich allerdings für benutzerfreundlicher.
UNd warum verwendest Du nicht den Standard-Auswahldialog, der dafür vorgesehen ist? Beispiel hängt an und stammt aus dem englischen Forum, ist hier im Forum sicher schon mehrfach beschrieben, z.B. wohl im ZUsammenhang mit mottco:
http://www.calc-info.de/makros.htm#mottco




Gruß
Stephan
Dateianhänge
Zellauswahldialog.ods
(8.91 KiB) 32-mal heruntergeladen

Re: Anwendung editieren während Macro lauft

von DPunch » Mi, 22.12.2010 11:18

Aloha
j_gon hat geschrieben:Ist es möglich, während des Macro-Laufes die Kontrolle über das sheet wieder an den User zu übergeben?
Nein, soweit ich weiss, ist das ohne Weiteres nicht möglich.
Das Makro läuft entweder ín einem Rutsch durch oder wartet auf eine Interaktion des Benutzers über ein entsprechendes Fenster (Messagebox, Inputbox, Dialog). Während das Makro auf eine Eingabe wartet, ist das aufrufende Dokument für den Benutzer nicht zugänglich.
Du wirst also auf ein Workaround zurückgreifen müssen.
Ich verwende in solchen Fällen einen Dialog, der zwar sichtbar gemacht wird, aber nicht ausgeführt wird (da dies wiederum das aufrufende Dokument blockieren würde).
Schau mal, ob Du mit der Beispieldatei was anfangen kannst:
Dateianhänge
Bsp.ods
(11.01 KiB) 48-mal heruntergeladen

Nach oben