Top > OOobbs2 > 84

OOobbs2/84 Edit

  • サマリ: セルの値が変化したときにマクロを起動させたい。
  • 環境: Calc
  • 状態: 未解決
  • 投稿者: ito yuki?
  • 投稿日: 2007-11-11 (日) 17:40:23

質問 Edit

エクセルでいうところのイベントプロシージャですが、 OOoにはそれに該当するイベントがないのですが、何か別の仕組みが あるのでしょうか。

イベントの種類がすくないような感じがしますが、今後増えるのでしょうか。以上何か知っていましたらお教えください。ありがとうございます。

回答 Edit

  • 変化などのイベント駆動にするには Broadcaster と Listener を利用します。

例として単一のセルを挙げます。セルオブジェクトは com.sun.star.util.XModifyBroadcaster インターフェースをサポートしていますが、このインターフェースのメソッド 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 にリスナーを追加する必要があるので、まずドキュメントを開いたときなどのイベントにマクロを割り当ててリスナーを追加するマクロを実行させる必要があります。

  • はにゃ?? 2007-11-11 (日) 21:19:35
  • おかげさまで、Calcで「セルの値が変化したときにマクロを起動」することができました。 -- KOMPas 2008-08-22 (金) 10:59:57

感想,コメント,メモ Edit

  • 早い回答ありがとうございます。マニュアルなどでもっと深く勉強したいと思います。 -- ito yuki? 2007-11-12 (月) 23:59:19


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