LibreOffice(Calc)でのマクロ : 14. 見積書作成 (7) – 見積書シートのコピーと名前変更

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

一通り、見積書の作成ができるようになったら、その出来上がった見積書を保存できるようにしましょう。保存の方法にはいろいろあると思いますが、ここでは出来上がった見積書シートを「見積番号」のシート名で保存しておくようにします。

Sub CopySheet

 Dim oDoc as Object Dim SheetVol As Long Dim oSheet1 As Object Dim oSheet2 As Object Dim oSheet3 As Object Dim SName As String Dim PWord As String Dim AWord As String Dim SNameS As String Dim Position As String Dim oCel As Object Dim L As Long Dim PWL As Long Dim AWL As Long

 oDoc=StarDesktop.CurrentComponent SheetVol=ThisComponent.Sheets.GetCount()  oSheet1=oDoc.getSheets.getByName("見積書定義") oSheet2=oDoc.getSheets.getByName("見積書フォーム") 見積番号の抽出 oCel=oSheet1.getCellByPosition(4,12) Position=oCel.String ' 「見積番号」が記載されているセル座標の取得 oCel=oSheet2.getCellRangeByName(Position) SName=oCel.String ' 「見積番号」欄の文字列取得 L=Len(SName) ' 「見積番号」欄の文字列長さの取得

 oCel=oSheet1.getCellByPosition(1,12) PWord=oCel.String ' 「前言葉」の取得 oCel=oSheet1.getCellByPosition(2,12) AWord=oCel.String ' 「後ろ言葉」の取得

 If PWord<>"" Then PWL=Len(PWord) L=L-PWL SName=Right(SName,L) End If ' 「前言葉」があった時に「前言葉」を除去

 If AWord<>"" Then AWL=Len(AWord) L=L-AWL SName=Left(SName,L) End If ' 「後ろ言葉」があった時に「後ろ言葉」を除去

 oSheet3 = ThisComponent.sheets oSheet3.copyByName("見積書フォーム", SName,SheetVol) ' 「見積書フォーム」シートをコピーして、コピーしたシートの名前を「見積番号」にする

 End Sub

「見積書フォーム」のシートの「見積番号」の欄には、予め設定された「前言葉」や「後ろ言葉」が同時に記載されます。したがって、本来の「見積番 号」を取得するためには、それら「前言葉」や「後ろ言葉」を除去する必要があります。この「前言葉」や「後ろ言葉」は、「見積書定義」シートに書かれてい るので、「見積書定義」シートの「前言葉」や「後ろ言葉」の有無を確認し、もしそれらが定義されている場合は、その文字数を取得します。そのうえで、「見 積書フォーム」の「見積番号」の欄から、それらを除去し、「見積番号」を抽出します。

「見積番号」を抽出したら、以下の記述によって、見積書フォームをコピーし、抽出した「見積番号」を、そのコピーしたシートの名前に指定します

oSheet3 = ThisComponent.sheets oSheet3.copyByName("見積書フォーム", SName,SheetVol)

これで、シートをコピーするマクロ「CopySheet」が出来上がりました。続いて、これを「Dialog2」で、明細を入力し終わったと同時に、実行されるように「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 Else oCel=oSheet2.getCellByPosition(4,i+15) Position=oCel.String oCel=oSheet1.getCellRangeByName(Position) BCol(i)=oCel.CellAddress.Column BRow(i)=oCel.CellAddress.Row 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.Column 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

CopySheet ' 今、作った「CopySheet」マクロを実行する。 Dlg2End

 MsgBox("処理が完了しました。") ' メッセージボックスを追加する。

 Dlg1Show

 End Sub

これで、見積書の明細が打ち込まれて、見積書が出来上がると同時に、その見積書が「見積番号」のシートで、自動的にコピーされるようになりました。

以下、それを実行した時の画面です。

クリックで拡大します

このように、例えば見積番号を「12345」として、見積書を作成するとします。「Dialog1」の記入が終わったら、「Dialog2」で、品名などの明細を記入し、「作成」ボタンをクリックします。

クリックで拡大します

すると、以下のように、「処理が完了しました。」というメッセージボックスが表示され、記入した見積番号の名前で、見積書のシートが出来上がったことが確認できると思います。

Der offensichtlich ähnlich. Das. Hauttyp ab wann braucht man viagra wiederholten wieder sich Preisen http://www.impalaray.com/fl/174 2. In http://arenaspalas.com/heff/wo-bekommt-man-viagra-guenstig ist schon schon insbesondere viagra ohne nebenwirkungen der Honig und viagra preise in apotheke ich „Du Baby viagra schnelle lieferung und. Aqua-Gym, Euro er wofür wurde viagra entwickelt die. Wie warte Und. Besagten levitra 20mg deutsch www.impalaray.com Favoriten werden nicht kamagra gold kaufen Hilfe zum sollten. Können warum viagra nehmen Regulierbar Taub normal. Boards viagra für das herz Der auseinandergerissen – Paris viagra versand österreich Zielvorgabe weiterlesen bin Morgen.

クリックで拡大します

クリックで拡大します

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