LibreOffice(Calc)でのマクロ : 12. 見積書作成 (5) – 見積もり明細の入力ダイアログ処理

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

見積書明細の入力ダイアログを作ったら、「作成」ボタンをクリックしたときのマクロを作ります。以下、その時のマクロを「AddItem」という名前で記してみます。

Sub AddItem

 Dim Fld(1 to 41 ) As Object Dim ChBox As Object Dim oSheet1 As Object Dim oSheet2 As Object Dim oCel As Object Dim Str(1 to 41) As String Dim Val(1 to 41) As Long Dim i As Long Dim iMod As long Dim iWari As long Dim RowPos As Long Dim BCol(3) As Long Dim BRow(3) As Long Dim Position As String Dim

  ItemVol As Integer Dim Tax As Currency Dim TaxS As Long Dim Sum As Long

' 変数の定義

 oDoc=StarDesktop.CurrentComponent oSheet1=oDoc.getSheets.getByName("見積書フォーム") oSheet2=oDoc.getSheets.getByName("見積書定義")

 oCel=oSheet2.getCellByPosition(4,21) ItemVol=oCel.Value ' ダイアログに入力できる最大品目数の取得

 For i=0 to 3 If i=0 Then oCel=oSheet2.getCellByPosition(4,20) Position=oCel.String oCel=oSheet1.getCellRangeByName(Position) BCol(i)=oCel.CellAddress.Column BRow(i)=oCel.CellAddress.Row ' 「備考」の1品目目の入力セル座標を取得 Else oCel=oSheet2.getCellByPosition(4,i+15) Position=oCel.String oCel=oSheet1.getCellRangeByName(Position) BCol(i)=oCel.CellAddress.Column  BRow(i)=oCel.CellAddress.Row ' 「品名」、「単価」、「数量」の1品目目の入力セル座標を取得 End If Next i

 For i=1 to ItemVol*4 ' 各品目(最大品目数)の「品名」、「単価」、「数量」、「備考」の入力セル座標の取得と、そのセルへのデータ入力

 Fld(i)=Dlg2.getControl("TextField" & i) iMod=i Mod 4 iWari=i \ 4

 If iMod=1 Then Str(i)=Fld(i).Text If Str(i)<>"" Then RowPos=iWari+BRow(iMod) oCel=oSheet1.getCellByPosition(BCol(iMod),RowPos) oCel.String=Str(i) ' 「品名」の入力 End If Elseif iMod=2 Then Val(i)=Fld(i).Text If Val(i)<>0 Then RowPos=iWari+BRow(iMod) oCel=oSheet1.getCellByPosition(BCol(iMod),RowPos) oCel.Value=Val(i) ' 「金額」の入力 End If Elseif iMod=3 Then Val(i)=Fld(i).Text If Val(i)<>0 Then RowPos=iWari+BRow(iMod) oCel=oSheet1.getCellByPosition(BCol(iMod),RowPos) oCel.Value=Val(i) ' 「数量」の入力 End If Elseif iMod=0 Then Str(i)=Fld(i).Text If Str(i)<>"" Then RowPos=iWari+BRow(iMod)-1 oCel=oSheet1.getCellByPosition(BCol(iMod),RowPos) oCel.String=Str(i) ' 「備考」の入力 End If End If

 Next i

 REM=====消費税対応 ChBox=Dlg2.getControl("CheckBox1") If ChBox.State Then ' 消費税のチェックボックスが入っていた時の処理 oCel=oSheet2.getCellByPosition(2,7) Tax=oCel.Value ' 消費税率の取得

 oCel=oSheet2.GetCellByPosition(4,19) Position=oCel.String

 oCel=oSheet1.getCellRangeByName(Position) BCol(0)=oCel.CellAddress.Column0 BRow(0)=oCel.CellAddress.Row  oCel=oSheet1.getCellByPosition(BCol(0),BRow(0)+ItemVol) ' 「合計金額」のセル取得 Sum=oCel.Value ' 合計金額の取得 TaxS=Sum*Tax ' 消費税額の取得

 oCel=oSheet2.GetCellByPosition(4,7) Position=oCel.String ' 「消費税」入力セル座標の取得 oCel=oSheet1.getCellRangeByName(Position) oCel.Value=TaxS ' 「消費税」の入力

 End If

 REM=====支払条件転記 oCel=oSheet2.getCellByPosition(4,22) Position=oCel.String Fld(41)=Dlg2.getControl("TextField41") Str(41)=Fld(41).Text oCel=oSheet1.getCellRangeByName(Position) oCel.String=Str(41) ' 「支払条件」の入力

 REM=====合計金額計算 oCel=oSheet2.getCellByPosition(4,23) Position=oCel.String oCel=oSheet1.getCellRangeByName(Position) BCol(0)=oCel.CellAddress.Column  BRow(0)=oCel.CellAddress.Row ' 「合計金額」のセル座標の取得 oCel=oSheet1.getCellByPosition(BCol(0),BRow(0)-2) Sum=oCel.Value ' 税抜き合計金額の取得 oCel=oSheet1.getCellByPosition(BCol(0),BRow(0)-1) Tax=oCel.Value ' 税額の取得 TaxS=Sum+Tax ' 税込合計金額の取得 oCel=oSheet1.getCellByPosition(BCol(0),BRow(0)) oCel.Value=TaxS ' 税込合計金額の入力

 Dlg2End ' 「Dialog2」を閉じる

 End Sub

 Sub Dlg2End Dlg2.EndExecute() End Sub ' 「Dialog2」を閉じるマクロ

これで、「Dialog2」で「作成」ボタンをクリックしたときに、各オブジェクトに入力されたデータが、「請求書フォーム」のシートに反映される マクロが出来上がりました。このマクロが出来上がったら、「Dialog2」の「作成」ボタンのイベント設定をし、このマクロを指定しておきます。

クリックで拡大します

クリックで拡大します

これで、「Dialog2」で、「作成」ボタンをクリックすると、そこに入力した内容が、「請求書フォーム」の各欄に反映されるようになったと思います。

ところで、「Dialog2」には、「作成」ボタンだけでなく、「戻る」というボタンもあったので、これを押した時のマクロも、以下のように用意しておきます。

Sub Dlg1BackShow Dlg2.EndExecute() Dlg1Show End Sub

これは「戻る」をクリックすると、「Dialog2」が消えて、「Dialog1」が表示されるというマクロになります。このマクロが出来上がった ら、「AddItem」の時と同じように、「Dialog2」の「戻る」ボタンのイベントを「Dlg1BackShow」に設定しましょう。

これで、「Dialog2」に関するマクロは完成です。

サンプルファイルはこちら