** [[OOobbs2/84]] [#o9573baf] -''サマリ'': セルの値が変化したときにマクロを起動させたい。 -''環境'': Calc -''状態'': 未解決 -''投稿者'': [[ito yuki]] -''投稿日'': 2007-11-11 (日) 17:40:23 *** 質問 [#ze4b6aab] エクセルでいうところのイベントプロシージャですが、 OOoにはそれに該当するイベントがないのですが、何か別の仕組みが あるのでしょうか。 イベントの種類がすくないような感じがしますが、今後増えるのでしょうか。以上何か知っていましたらお教えください。ありがとうございます。 *** 回答 [#vab0e810] - 変化などのイベント駆動にするには Broadcaster と Listener を利用します。 例として単一のセルを挙げます。セルオブジェクトは [[com.sun.star.util.XModifyBroadcaster>http://api.openoffice.org/docs/common/ref/com/sun/star/util/XModifyBroadcaster.html]] インターフェースをサポートしていますが、このインターフェースのメソッド addModifyListener でリスナーを追加してやると、セルが編集されたときにそのリスナーの modified メソッドが呼ばれます。 OOo Basic で書くと次のような感じになります。 Sub Main oDoc = ThisComponent oSheet = oDoc.getSheets().getByIndex(0) oCell = oSheet.getCellByPosition(0,0) oModifyListener = CreateUnoListener( _ "ModifyListener_", "com.sun.star.util.XModifyListener") oCell.addModifyListener(oModifyListener) End Sub ' com.sun.star.util.XModifyListener Sub ModifyListener_modified( oEv ) msgbox oEv.Source.getValue() End Sub Sub ModifyListener_disposing( oEv ) End Sub セルオブジェクトでは上記のリスナーも含めて次のようなリスナーが利用できます。 -com.sun.star.beans.XPropertiesChangeListener -com.sun.star.beans.XPropertyChangeListener -com.sun.star.beans.XVetoableChangeListener -com.sun.star.chart.XChartDataChangeEventListener -com.sun.star.util.XModifyListener XPropertyChangeListener はセルのプロパティの変化によるイベント駆動に利用できます (とはいえ、Bound や Constrained なプロパティが全然ないのでほとんど利用する場面がありませんが)。 これらリスナーを利用するには Broadcaster にリスナーを追加する必要があるので、まずドキュメントを開いたときなどのイベントにマクロを割り当ててリスナーを追加するマクロを実行させる必要があります。 -- [[はにゃ?]] &new{2007-11-11 (日) 21:19:35}; - おかげさまで、Calcで「セルの値が変化したときにマクロを起動」することができました。 -- KOMPas &new{2008-08-22 (金) 10:59:57}; #comment *** 感想,コメント,メモ [#u8701b5f] - 早い回答ありがとうございます。マニュアルなどでもっと深く勉強したいと思います。 -- [[ito yuki]] &new{2007-11-12 (月) 23:59:19}; #comment |