データを表形式で印刷する |
データを表形式で印刷する (024) 1.表形式に罫線を引いて印刷します。 2.見やすいように行の高さを1.5倍にします。 3.汎用性を持たすために改ページ処理をいれます。 4.変更が容易なように変数での処理をしました。 印刷でフォントサイズの変更等がうまくいかなかった人は、マイクロソフトの技術情報、 印刷関連の制限事項および注意点を参考にし、対処して下さい。 |
|
印刷処理 (024) | |
メニューを作成し Private Sub mnuFilePrint_Click() 'メニューの印刷部分 Dim i As Integer Dim j As Integer Dim Zan As Integer '最後ページの人員 Dim Mai As Integer '印刷枚数 Dim Peji As Integer '印刷済ページ Dim Ken As Integer 'データ個数 Dim KaigyoH As Single '改行高さ Dim Tyousei As Single '調整値 Dim Uyohaku As Integer '上余白 Dim Lyohaku As Integer '左余白 Dim Kamoku As Integer '科目数 Dim CharX As Single '印刷桁位置 Dim CharY As Single '印刷行位置 Dim Ken1 As Integer '現在のページのデータ数 Ken = MSFlexGrid1.Rows - 1 KaigyoH = 1.5 '改行高さを1.5倍に設定 Tyousei = 0.25 '微調整分を1/4行 Uyohaku = 3 '上余白を2行分 Lyohaku = 7 '左余白を7桁分 Kamoku = 5 '科目数 Printer.PaperSize = vbPRPSA4 '用紙サイズをA4に Printer.Orientation = vbPRORPortrait '縦向き印刷 Me.MousePointer = vbHourglass '砂時計 'カレントセルの反転表示を解除(表示を早くする) MSFlexGrid1.HighLight = flexHighlightNever DoEvents '砂時計を表示してから次に進む Printer.ScaleMode = 4 'キャラクター単位に設定 Printer.CurrentX = 31: Printer.CurrentY = 1 'タイトルの印刷位置 Printer.FontName = "MS 明朝": Printer.FontBold = True Printer.FontSize = 16 Printer.Print "成 績 表" Printer.FontSize = 12: Printer.FontBold = False CharX = Printer.TextWidth("あ") 'プリンター上での文字の幅を取得 CharY = Printer.TextHeight("あ") 'プリンター上での文字の高さを取得 Printer.CurrentX = Lyohaku + 1 '左余白 Printer.CurrentY = Uyohaku '上余白 Printer.Print "No" & Space$(3) & _ "氏 名" & Space$(4) & _ "国 語 数 学 英 語 合 計 平均点" Printer.CurrentY = Printer.CurrentY + 0.5 '印刷枚数の計算 If Ken <= 42 Then Ken1 = Ken Mai = 1 Else Peji = 1 Mai = Ken \ 42 Zan = Ken Mod 42 If Zan Then Mai = Mai + 1 End If End If '各個人データの印刷 For i = 1 To Ken MSFlexGrid1.Row = i MSFlexGrid1.Col = 1 Printer.CurrentX = Lyohaku + 1 '左余白 Printer.Print Right$(" " & MSFlexGrid1.Text, _ 3) & " "; 'Noの印刷 MSFlexGrid1.Col = 2 Printer.Print MSFlexGrid1.Text; '氏名の印刷 For j = 3 To Kamoku + 2 MSFlexGrid1.Col = j If j = 7 Then '平均点の印刷 Printer.Print Tab(11 + (j - 1) * 8 + 1) _ ; Right$(" " & Format$(MSFlexGrid1. _ Text, "######.0"), 8) Else '各科目の点数印刷 Printer.Print Tab(11 + (j - 1) * 8 + 1); _ Right$(" " & Format$(MSFlexGrid1.Text, _ "########"), 8); End If Next j '改行幅を1.5倍に設定 Printer.CurrentY = Printer.CurrentY + 0.5 Printer.CurrentX = Lyohaku + 1 '左余白 If Mai > Peji And (i Mod 42) = 0 Then '2ページ以上の場合の罫線処理及び改ページ Ken1 = 42 Call sLinePrint(KaigyoH, Tyousei, Uyohaku, _ Lyohaku, Kamoku, CharX, CharY, Ken1) Peji = Peji + 1 Printer.NewPage '改ページ Printer.CurrentX = 31: Printer.CurrentY = 1 'タイトルの印刷位置 Printer.FontName = "MS 明朝": Printer.FontBold = True Printer.FontSize = 16 Printer.Print "成 績 表" Printer.FontSize = 12: Printer.FontBold = False Printer.CurrentX = Lyohaku + 1 '左余白 Printer.CurrentY = Uyohaku '上余白 Printer.Print "No" & Space$(3) & _ "氏 名" & Space$(4) & _ "国 語 数 学 英 語 合 計 平均点" Printer.CurrentY = Printer.CurrentY + 0.5 End If If Mai = 1 And Ken = i Then '1枚以内の場合の処理 Call sLinePrint(KaigyoH, Tyousei, Uyohaku, _ Lyohaku, Kamoku, CharX, CharY, Ken1) Mai = 0 End If If Mai = Peji And i = Ken And Zan Then '最後のページの罫線処理 Ken1 = Zan Call sLinePrint(KaigyoH, Tyousei, Uyohaku, _ Lyohaku, Kamoku, CharX, CharY, Ken1) End If Next i Printer.EndDoc '印刷終了 Form1.MousePointer = vbDefault '砂時計から元に戻す 'カレントセルを反転表示に戻す MSFlexGrid1.HighLight = flexHighlightAlways End Sub Private Sub sLinePrint(KaigyoH As Single, Tyousei As Single, _ Uyohaku As Integer, Lyohaku As Integer, Kamoku As Integer, _ CharX As Single, CharY As Single, Ken1 As Integer) '罫線処理のサブルーチン Dim X As Integer Dim Y As Integer '最初の縦罫線 Printer.Line (Lyohaku, Uyohaku - Tyousei)-(Lyohaku, _ (Ken1 + Uyohaku) * (CharY * KaigyoH) - Tyousei) '2本目の縦罫線 Printer.Line (12, Uyohaku - Tyousei)-(12, _ (Ken1 + Uyohaku) * (CharY * KaigyoH) - Tyousei) '名前の後の縦罫線を科目事に引く For X = 0 To Kamoku * 4 Step 4 Printer.Line ((14 + X) * CharX, Uyohaku - Tyousei _ )-((14 + X) * CharX, (Ken1 + Uyohaku) _ * (CharY * KaigyoH) - Tyousei) Next X '横罫線 For Y = Uyohaku - 1 To Ken1 + Uyohaku Printer.Line (Lyohaku, (Y * CharY * KaigyoH _ ) - Tyousei)-((14 + Kamoku * 4) * CharX, _ (Y * CharY * KaigyoH) - Tyousei) Next Y End Sub ついでに終了のメニュー Private Sub mnuFileExit_Click() '終了のメニュー Unload Me End Sub |