可変フォームサンプルプログラム
レポートライブラリOCXを使って可変フォームを印刷するVisual Basicサンプルプログラムを紹介します。
Private Sub XXXX_Click()
Dim DrawHeight As Long
Dim HeaderHeight As Long
Dim FooterHeight As Long
Dim PageFooterHeight As Long
Dim MeisaiHeight As Long
Dim ipage As Integer
Dim fMeisaiOut As Boolean
Dim lPageSum As Long
Dim lTotalSum As Long
Dim lKingaku As Long
'可変フォームを指定します
Jvrlib.FormName = "C:\可変フォーム.jfm"
'印刷を開始します
Call Jvrlib.Start
On Error GoTo SampleError
'各セクションの高さを取得します
Jvrlib.SectionKey = "ヘッダー"
HeaderHeight = Jvrlib.SectionHeight
Jvrlib.SectionKey = "フッター"
FooterHeight = Jvrlib.SectionHeight
Jvrlib.SectionKey = "ページフッター"
PageFooterHeight = Jvrlib.SectionHeight
Jvrlib.SectionKey = "明細"
MeisaiHeight = Jvrlib.SectionHeight
ipage = 1
'ヘッダーセクションを指定します
Jvrlib.SectionKey = "ヘッダー"
'ヘッダーセクションのテキストフィールド゙に値を設定します
Call Jvrlib.SetFieldText("ページ", CStr(ipage)
& "page")
'セクションを描画すると、改ページ要求の時もエラーが発生します
'そこで、改ページ要求エラーが発生しても処理を続行するように設定します
On Error Resume Next
ヘッダーセクションを描画します
Call Jvrlib.DrawSection
If Err <> 0 Then
'ここでは改ページ要求(1131)は発生しないため、エラー処理のみ行います
MsgBox "DrawSection Error ヘッダー" +
CStr(ret)
GoTo Error_Trap
End If
lTotalSum = 100
lPageSum = lTotalSum
fMeisaiOut = False
'明細セクションを指定します
Jvrlib.SectionKey = "明細"
'データをすべて印刷するまで明細セクションを繰り返し描画します
'このサンプルでは、1データにつき1行の明細セクションを使うものとします
For i = 1 To n
'明細セクションのテキストフィールドに値を設定します
lKingaku = x *
1.05 '←これが実際に描画するデータだとします
lPageSum = lPageSum + lKingaku
lTotalSum = lTotalSum + lKingaku
Call Jvrlib.SetFieldText("金額", CStr(lKingaku)
& "円")
'明細セクションを描画します
Call Jvrlib.DrawSection
If Err <> 0 Then
If Err = 1131 Then '←1131は「DrawSectionの改ページ要求」です
'戻り値「改ページ要求(1131)」を使って、ここで改ページの処理を行うこともできます
'このサンプルでは改ページの判定に「1131」を使わないため、ここでの処理はありません
Else
MsgBox "DrawSection Error 明細 " +
Error(Err)
GoTo Error_Trap
End If
End If
fMeisaiOut = True
'このサンプルの改ページ判定は「描画領域、現在位置、セクション高」を使って行います
'ここでは、明細セクションを描画したタイミングで、改ページの必要性を判定します
'各ページの最後には必ずページフッターを描画するものとし、
'「現在位置+明細セクションの高さ+ページフッターの高さ」が描画領域の高さを超える時は
'次の明細セクションは描画できないものと判断し、ページフッターを描画して改ページします
If Jvrlib.CurrentTop + MeisaiHeight + PageFooterHeight
> Jvrlib.DrawHeight Then
'ページフッターセクションを指定します
Jvrlib.SectionKey = "ページフッター"
'ページフッターセクションのテキストフィールドに値を設定します
Call Jvrlib.SetFieldText("ページ合計",
CStr(lPageSum) & "円")
'ページフッタセクションを描画します
Call Jvrlib.DrawSection
'改ページします
Jvrlib.NewPage
'ページ毎の変数をクリアします
lPageSum = 0
fMeisaiOut = False
'新しいページのためのヘッダーセクションを描画します
ipage = ipage + 1
Jvrlib.SectionKey = "ヘッダー"
Call Jvrlib.SetFieldText("ページ", CStr(ipage)
& "page")
Call Jvrlib.DrawSection
'セクションをヘッダーセクションから明細セクションへ戻します
Jvrlib.SectionKey = "明細"
End If
Next i
'すべてのデータを描画したら、最後の処理を行います(※注意参照)
'明細セクションが1行以上描画されている場合には、ページフッターを描画します
If fMeisaiOut = True Then
Jvrlib.SectionKey = "ページフッター"
Call Jvrlib.SetFieldText("ページ合計",
CStr(lPageSum) & "円")
Call Jvrlib.DrawSection
End If
'最後のページにフッターセクションを描画します
Jvrlib.SectionKey = "フッター"
Call Jvrlib.SetFieldText("総合計", CStr(lTotalSum)
& "円")
Call Jvrlib.DrawSection
'改ページします
Jvrlib.NewPage
'レポートライブラリの終了処理を行います
Jvrlib.End
On Error GoTo 0
Exit Sub
SampleError:
'クローズ
Jvrlib.End
On Error GoTo 0
Exit Sub
Error_Trap:
MsgBox CStr(Jvrlib.LastDllError)
End Sub
※注意
このプログラムはサンプルのため、処理が簡素化されています。
きめ細かなエラー処理、ループ終了後にフッターセクションが描画可能かどうかの判定、データ量によって最終ページにヘッダーとフッターだけが描画されることへの対応、などのきめ細かな処理はすべて省かれています。