LibreOffice 6 Calcでフォーム(ダイアログ)を作成してマクロで表示
- ここで用いたLibreOfficeのバージョンと設定
- LibreOffice 6.1
- LibreOfficeの「ツール」-「オプション」-「LibreOffice」の「詳細」で「Java実行環境を使用」にチェックが入っていること。「インストール済みのJava実行環境(JRE)」が表示されていること。
LibreOffice 6.1 Calcにはデータを入力したり表示したりするのに使うことができるフォームが用意されている。そしてそのフォームはダイアログと呼ばれている。今回はそのダイアログを作成し、それを表示させたり閉じたりするマクロをLibreOffice Basicを使って実装してみる。
フォームコントロールの作成
- LibreOffice Calcを起動。
- トップメニューで「表示」-「ツールバー」-「フォームコントロール」という順に選び、フォームコントロールのツールバーを表示させる。
- フォームコントロールのツールバーの中から「ボタン」(プッシュ・ボタン)を選び、スプレッドシートの適当な場所にプッシュ・ボタンを作成して配置する。
- 作成されたプッシュ・ボタンの上でマウスの右クリックメニューを表示させ、その中から「コントロール」を選ぶ。
- 「属性 プッシュボタン」というダイアログが表示されるので、「全般」タブ内にある「タイトル」の項目を「ダイアログ表示」に変える。
- トップメニューで「ファイル」-「保存」を選んで変更内容を保存する。
スプレッドシート上でのプッシュ・ボタンの作成とその属性の設定はこれで終わり。
ダイアログを作成
「閉じる」というコマンド・ボタンだけを持つ単純なダイアログを作成する。
- LibreOffice Calcのトップメニューで「ツール」-「マクロ」-「ダイアログの管理」を選ぶ。
- そうすると「LibreOffice Basicマクロの管理」というダイアログが開く。「ダイアログ」というタブを選び、ダイアログに表示されている.odsファイル(今開いているスプレッドシート名)を選ぶ。
- 「新規作成」ボタンを押して「Dialog1」を作成し、「編集」ボタンを押す。
- そうすると統合開発環境(IDE)が起動し、ダイアログの雛形が表示されるはず。
- ツールバーの中から「ボタン」(コマンド・ボタン)を選び、ダイアログの雛形の中の適当な位置に適当な大きさのコマンド・ボタンを作る。
- そのコマンド・ボタンが選択されている状態ではその属性一覧がプロパティ・ウィンドウに表示されているはず。その中の「全般」タブを選び、その名前を「CommandButton_closeDialog」と入力し、そのタイトルを「閉じる」と入力する。
- トップメニューの「ファイル」-「保存」を選んで変更内容を保存する。
ダイアログの作成とコマンド・ボタンの作成とその属性の設定はこれで終わり。
ダイアログを表示するマクロ(LibreOffice Basicのコード)を記述
- スプレッドシート中に配置した「ダイアログ表示」ボタンが押されるとダイアログが表示される。
- ダイアログ中にある「閉じる」ボタンが押されるとそのダイアログが閉じる。
これらの働きを持つマクロ(LibreOffice Basicコード)を記述する。
- LibreOffice Calcのトップメニューで「ツール」-「マクロ」-「マクロの管理」-「LibreOffice Basic」という順に選び、「LibreOffice Basic マクロ」というダイアログを開く。
- 「マクロの記録先」の一覧から今表示しているスプレッドシートを意味する.odsファイルを選び、「新規作成」を押して「Module1」を加える。
統合開発環境(IDE)のウィンドウのほうでは、「ツール」-「モジュールの選択」を選び、「LibreOffice Basicマクロ管理」というダイアログを開いても「新規作成」ボタンを押してModule1を追加することができる。
- そうすると統合開発環境(IDE)が起動する。「オブジェクトカタログ」の中にそのModule1が表示されてそれが選ばれていれば、エディタには次のようなコードが表示されるはず。
REM ***** BASIC ***** Sub Main End Sub
- 次のようなコードをここに付け加える。
REM ***** BASIC ***** '全ての変数を明示的に宣言 Option Explicit 'oDialogというオブジェクト型変数を宣言 Dim oDialog As Object 'ダイアログを開くサブルーチン Sub openDialog 'LoadLibraryメソッドでStandardというライブラリを読み込む DialogLibraries.LoadLibrary("Standard") 'CreateUnoDialog函数でダイアログオブジェクトを生成 '末尾のDialog1が先ほど作成したダイアログ名 oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1) 'Executeメソッドでダイアログを開く oDialog.Execute() 'Disposeメソッドでリソースを廃棄 oDialog.Dispose() End Sub 'ダイアログを閉じるサブルーチン Sub closeDialog 'endExecuteメソッドでダイアログを閉じる oDialog.endExecute() End Sub
コードは上から順番に実行されるのが基本原則。
Option Explicitは、このモジュールで使用する全ての変数を宣言してから使わなければならないという規則を適用するオプション。こうすることで使用する変数をはっきりさせ、変数を比較的安全に使うことができる。
サブルーチン(Sub サブルーチン名......End Subブロック)の外側でオブジェクト型変数oDialogを宣言しておく。
openDialogと名付けたサブルーチン内には、ダイアログを用いるための準備とそのダイアログの表示を行うためのコードを置く。
DialogLibraries.LoadLibrary("Standard")とoDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)はダイアログを使うためのおまじないのようなもの。CreateUnoDialogk()函数の引数の末尾の.Dialog1が先ほど作成したダイアログの名前になっていることに要注意。
closeDialogと名付けたサブルーチン内には、表示されているダイアログを閉じるためのコードを置く。endExecute()メソッドを使うとダイアログを閉じることができる。
- トップメニューの「ファイル」-「保存」を選んでコードを保存する。
LibreOffice Basicでダイアログを使う方法には、LoadDialog()函数を用いたもう一つのおまじないがある。それが次のとおり。
Sub openDialog Dim oDialog As Object BasicLibraries.LoadLibrary("Tools") oDialog = LoadDialog("Standard", "Dialog1") oDialog.Execute() oDialog.Dispose()
これでコードの作成(コーディング)は終わった。次はこれらのマクロ(サブルーチン)とイベントを関連付ける手順に入る。
ダイアログの「閉じる」ボタンのイベントにマクロを割り当てる
- 統合開発環境(IDE)のオブジェクトカタログの一覧から、または下のほうのタブの中から、先ほど作成したDialog1を選んで表示させる。
- 「閉じる」と名づけたコマンド・ボタンを選択した状態にすると、その属性の一覧がプロパティ・ウィンドウに表示されるはず。表示されていなければ、トップメニューの「表示」-「プロパティ」を選んで表示させる。
- プロパティ・ウィンドウの「イベント」タブを選び、イベントの中から「マウスボタンを離した時」を見つけてその右端にあるボタンを押す。
- そうすると「アクションの割り当て」というダイアログが開く。イベントの中で「マウスボタンを離した時」が選択されているのを確認し、「マクロ」ボタンを押す。
- そうすると「マクロセレクター」というダイアログが開く。ライブラリの一覧から先ほど作成したModule1を選ぶ。
- マクロ名の一覧の中からcloseDialogを選び、OKを押す。
- 割り当てられたアクションに「Standard.Module1.closeDialog」と表示されていることを確認してOKボタンを押す。
- イベントの「マウスボタンを離した時」の項目にマクロ名が割り当てられたことを確認する。
- トップメニューの「ファイル」-「保存」を押して保存し、統合開発環境(IDE)を閉じる。
「閉じる」ボタンのイベントにマクロ(LibreOffice Basicコード)を割り当てることがこれでできた。
「ダイアログ表示」ボタンのイベントにマクロを割り当てる
- フォームコントロールというツールバーで「デザインモード」を押し、デザインモードにする。
- 「ダイアログ表示」ボタンの上でマウスの右クリック・メニューを表示させ、その一覧から「コントロール」を選ぶ。
- 「属性 プッシュ・ボタン」ダイアログの「イベント」タブを選び、その中から「マウスボタンを離したとき」という項目の右端にあるボタンを押す。そうすると「アクションの割り当て」というダイアログが開く。
- イベントとして「マウスボタンを離したとき」という項目が選ばれていることを確認して「マクロ」というボタンを押す。
- 「マクロセレクター」というダイアログが開くので、そこに表示されているライブラリの一覧から先ほど作成したModule1を選ぶ。
- そうすると「マクロ名」として先ほど作成したサブルーチン名が表示されるはず。そのうちの「openDialog」を選ぶ。そしてOKを押す。
- 「アクションの割り当て」ダイアログでは、イベントとそれに割り当てられたマクロ名が確認できるはず。そしてOKを押す。
- 「属性 プッシュボタン」ダイアログの「イベント」タブ内の「マウスボタンを離した時」の項目には、ライブラリStandardと、モジュール名Module1と、マクロ名openDialogが指定されたことが分かるはず。
- 「属性 プッシュボタン」ダイアログを閉じ、トップメニューで「ファイル」-「保存」を選んで変更内容を保存する。
これで完成。デザインモードを解除してスプレッドシート上の「ダイアログ表示」ボタンを押し、ダイアログが表示されることを確認する。そしてダイアログ中の「閉じる」ボタンを押してダイアログが閉じることを確認する。
コメント
コメントを投稿