Top > OOobbs2 > 84
** [[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

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes