LibreOffice(Calc)でのマクロ : 15. 見積書作成 (8) – 書式定義ダイアログの作成

ユーザー Mr. Union の写真
2014年7月24日 -- Mr. Union

この見積書作成ファイルでは、「見積書定義」というシートに、フォーマットとして定めておく事項がまとめられています。そのシートには、見積書を発行する自社側の情報や、見積書に記載すべき各項目をどのセルに入力させるかなどの情報が、以下のように整理されています。

クリックで拡大します

これらの設定を変更したいときは、この「見積書定義」シートで、直接、書き込むこともできますが、ここでは、その作業をダイアログで行えるようにしてみます。

まずは、「Dialog3」として、以下のようなダイアログを作成してみましょう。

クリックで拡大します

ダ イアログができたら、これを表示させるためのマクロを記述します。ただし、その新しいマクロを書き始める前に、まずは「Dialog3」を扱うた めの「Dlg3」というオブジェクト型変数を宣言します。宣言の仕方は、それまでに作った「Dlg1」や「Dlg2」などと同様で、Module1の先頭 部分で、「Dim Dlg3 As Object」と書きます。

REM ***** BASIC *****

 Dim Dlg1 As Object Dim Dlg2 as Object Dim Dlg3 As Object

ここまでできたら、次に以下のようなマクロを書きます。このマクロは、上で作った「Dialog3」を表示させるためのもので、既に設定されているデータを、初期値として、デフォルト表示させるようにします。

Sub Dlg3Show

 Dlg1.EndExecute() ' 「Dialog1」を閉じる

 DialogLibraries.LoadLibrary("Standard") Dlg3=CreateUnoDialog(DialogLibraries.Standard.Dialog3)

 Dim i As Long Dim oDoc As Object Dim oSheet As Object Dim oCel As Object Dim Fld(1 to 34) As Object

 oDoc=StarDesktop.CurrentComponent oSheet=oDoc.getSheets.getByName("見積書定義")

 REM===== 自社情報 For i=1 to 6 ' 自社情報の内容をデフォルト値として設定 oCel=oSheet.getCellByPosition(2,i) Fld(i*2-1)=Dlg3.getControl("TextField" & i*2-1) Fld(i*2-1).Text=oCel.String

 oCel=oSheet.getCellByPosition(3,i) ' 自社情報のセル座標をデフォルト値に設定 Fld(i*2)=Dlg3.getControl("TextField" & i*2) Fld(i*2).Text=oCel.String Next i

 REM=====記載事項1 For i=1 to 4 ' 「日付」、「見積番号」、「宛先」、「有効期限」の前言葉の内容をデフォルト値として設定 oCel=oSheet.getCellByPosition(1,i+10) Fld(i*3+12)=Dlg3.getControl("TextField" & i*3+12) Fld(i*3+12).Text=oCel.String

 oCel=oSheet.getCellByPosition(2,i+10) ' 「日付」、「見積番号」、「宛先」、「有効期限」の後ろ言葉の内容をデフォルト値として設定 Fld(i*3+13)=Dlg3.getControl("TextField" & i*3+13) Fld(i*3+13).Text=oCel.String

 oCel=oSheet.getCellByPosition(3,i+10) ' 「日付」、「見積番号」、「宛先」、「有効期限」のセル座標をデフォルト値として設定 Fld(i*3+14)=Dlg3.getControl("TextField" & i*3+14) Fld(i*3+14).Text=oCel.String Next i

 REM=====記載事項2 For i=1 to 8 ' 「記載事項2(品名~合計)」のセル座標などをデフォルト値として設定

  oCel=oSheet.getCellByPosition(3,i+15) Fld(i+26)=Dlg3.getControl("TextField" & i+26) Fld(i+26).Text=oCel.String Next i

 REM=====消費税 oCel=oSheet.getCellByPosition(2,7)

 ' 「消費税」の税率をデフォルト値として設定 Fld(13)=Dlg3.getControl("TextField13") Fld(13).Text=oCel.String

 oCel=oSheet.getCellByPosition(3,7) ' 「消費税」のセル座標をデフォルト値として設定 Fld(14)=Dlg3.getControl("TextField14") Fld(14).Text=oCel.String

 Dlg3.Execute() ' 「Dialog3」を表示する

 End Sub

上 記のマクロができたら、これを表示させるためのイベント設定をします。ここでは、「Dialog1」に「設定変更」というボタンを作って、それを クリックすると、「Dialog3」が表示させるようにします(このマクロが、「Dlg1.EndExecute()で、「Dialog1」を消すという 記述から始まっているのは、そのためです」。

そこで、「Dialog1」には、以下のように「設定変更」というボタンを追加します。

クリックで拡大します

「設定変更」ボタンを作ったら、そのボタンを選択した状態で、左ウィンドウの「イベント」タグをクリックし、「実行時」の右側の「…」ボタンを押します。

クリックで拡大します

表示された「アクションの割り当て」のウィンドウで、「実行時」のイベントを選択した状態で、右の「マクロ」ボタンをクリックします。

クリックで拡大します

「マクロセレクター」ウィンドウで、「Dialog3」を表示させる「Dlg3Show」を選択して、「OK」ボタンをクリックします。

クリックで拡大します

これで、「Dialog1」の「設定変更」ボタンをクリックすると、「Dialog3」が表示されるようになりました。表示された「Dialog3」には、既に設定されてある情報が、デフォルト値として入力された状態になります。

クリックで拡大します