LibreOffice(Calc)でのマクロ : 9. 見積書作成 (2) – ダイアログからの基本情報入力

ユーザー Mr. Union の写真
2014年6月28日 -- Mr. Union

ダイアログが出来上がったら、そこに入力した情報が、見積書に反映されるようにします。

と ころで、見積書のフォームというのは様々で、例えば、日付の欄が4行目にあったり、5行目にあったりまちまちですし、自社の住所欄が1行で済む会 社もあれば、2行必要なところもあります。ダイアログからの入力内容を、予めその請求書フォームに合わせて決めてしまえばいいですが、それだとフォームが 変更になったときに、いちいちマクロの中身を変えていかなければならず厄介です。

そこで、ここではいろいろなフォームに対応できるよう、見積書の定義をするシートを別途作ってみたいと思います。

Calcのシートを追加して、そのシートに「見積書定義」という名前をつけてみましょう。

クリックで拡大します

新規挿入した「見積書定義」シートでは、以下のように見積書のフォームに関する情報を入れていきます。

クリックで拡大します

自 社表記の部分は、2~8行目までで、請求書を発行する側の情報を入力します。ここは基本的に、自分側の情報なので、発行先がどこになっても、基本 的に変わりません。実際に請求書に反映されるのは、C列の情報で、自社の住所や社名だけでなく、請求時に計上する消費税の税率などを書き込んでおきます。

11行目以降は、ダイアログで入力した情報に関する項目です。実際にダイアログに入力した内容に対して、どのように請求書上に表記するかを「前言葉」、「後ろ言葉」という項目で設定できるようにします。

例 えば、ダイアログ上で請求書の宛先を「イッセイ株式会社」としたとしても、請求書上は「イッセイ株式会社 御中」としたければ、「後ろ言葉」の列 に「御中」というワードを入力しておくと、ダイアログに入力した「イッセイ株式会社」の後ろに、自動的に「御中」という言葉が追記されるようにすることを イメージしています。

ここまでの設定が終わったら、さらにそれらの自社情報やダイアログの入力内容を、請求書フォーム上のどこに表示させるかの座標を指定します。例えば、下のような請求書があったときに、自社の情報は「F8」から「F11」に表示させる、といった具合です。

クリックで拡大します

それらの座標をD列とE列に書き込んでおきます。ここでは、あとで行う処理を考慮して、便宜上、「座標」と「使用座標」という二つを使うようにしています。どちらにも同じ座標を入力しておいてください。

クリックで拡大します

次に、ダイアログのボタンを押したら、上で設定した座標にそれぞれの情報が転記されるようにしてみます。そのマクロは、以下の通りです。

Sub Dlg1CommandButton1Click()

 Dim Fld(1 to 6) As Object Dim Str(1 to 6) As String Dim ChStr(1 to 6) As String Dim i As Long Dim oDoc As Object Dim oSheet1 As Object Dim oSheet2 As Object Dim oCel As Object Dim Pos(1 to 6) As String Dim Position As String Dim PreWord(1 to 6) As String Dim AftWord(1 to 6 ) As String

 oDoc=StarDesktop.CurrentComponent oSheet1=oDoc.getSheets.getByName("見積書フォーム") '  oSheet2=oDoc.getSheets.getByName("見積書定義") ' シート名でシートを指定する

 REM 自社情報の転記 For i=1 to 6 oCel=oSheet2.getCellByPosition(1,i) ChStr(i)=oCel.String ' 自社情報の項目名(例:「住所1」など) oCel=oSheet2.getCellByPosition(2,i) Str(i)=oCel.String ' 自社情報の内容 If Str(i)<>"" Then oCel=oSheet2.getCellByPosition(4,i) Pos(i)=oCel.String Position=Pos(i) oCel=oSheet1.getCellRangeByName(Position) ' 自社情報転記先のセルを特定 If ChStr(i)="〒" Then oCel.String=ChStr(i) & Str(i) ' 郵便番号の場合は「〒」を入れる ElseIf ChStr(i)="電話番号" Then oCel.String=ChStr(i) & ":" & Str(i) ' 電話番号の場合は「電話番号:」を入れる ElseIf ChStr(i)="FAX番号" Then oCel.String=ChStr(i) & ":" & Str(i) ' FAX番号の場合は「FAX番号:」を入れる Else oCel.String=Str(i) End If End If Next i

 REM 見積書毎の情報転記 For i=1 to 4 ' 「TextField1」~「TextField4」で繰り返し処理 Fld(i) = Dlg1.GetControl("TextField" & i) Str(i)=Fld(i).Text

 If InStr(Str(i), "/")>0 Then Str(i)= Format(Str(i),"yyyy年m月d日") ' 日付の場合の表示形式の指定 End If

 oCel=oSheet2.GetCellByPosition(4,i+10) Pos(i)=oCel.String Position=Pos(i) oCel=oSheet2.GetCellByPosition(1,i+10) PreWord(i)=oCel.String ' 「前言葉」の取得 oCel=oSheet2.GetCellByPosition(2,i+10) AftWord(i)=oCel.String ' 「後ろ言葉」の取得

 oCel=oSheet1.getCellRangeByName(Position)

 ' 転記先のセルを特定 oCel.String=PreWord(i) & Str(i) & AftWord(i) ' 「前言葉」と「後ろ言葉」を結合させて Next i

 Dlg1End

 End Sub

上 記のマクロが書けたら、ボタンをクリックしたときに、このマクロが実行されるように設定します。設定の方法は、まずマクロの管理で、 「Dialog1」の管理画面に入ります。そこで、「次へ」のボタンをアクティブにして、左側のウィンドウの「イベント」タブで、「実行時」のイベントを 選択します。

クリックで拡大します

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

クリックで拡大します

すると、「マクロセレクター」のウィンドウが現れるので、さきほど作成したマクロ「Dlg1CommandButton1Click」を選択して、「OK」ボタンを押します。

クリックで拡大します

これで、ダイアログの「次へ」のボタンで、それぞれの情報が見積書に転記されるようになりました。

試しに実行してみましょう。既に作ってある「Dlg1Show」のマクロを実行してみます。

クリックで拡大します

すると、ダイアログが表示されます。ここで「日付」、「見積番号」、「宛先」、「有効期限」を入れて、「次へ」のボタンをクリックすると、「見積書フォーム」のシートに、それぞれの情報が転記されることが確認できると思います。

クリックで拡大します

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