當前位置:偏方大全网 - 藥品查詢 - 請問各位高手 VB6.0裏面如何打印報表?最好可以把那段代碼送我ia!小弟跪求!!

請問各位高手 VB6.0裏面如何打印報表?最好可以把那段代碼送我ia!小弟跪求!!

本文介紹了VB6.0中各種報表打印技術以及各種技術之間的優缺點,特別詳細地介紹了利用編程的方法實現報表打印等內容。

關鍵詞 VB6.0,編程,報表

壹 、 前言

Visual Basic開發數據庫系統中,報表打印是其中最重要也是最常用的功能之壹。按照報表實現的方法可大體上分為3類:第1類是較原始的方法,直接控制打印機對象Printer進行畫線和打印;第2類是使用控件,如Data Report、Crystal Report、Active Report等;第3類是將需要打印的報表保存成其他程序可以識別的格式或直接輸入到其他程序中,利用其他程序的打印功能操作,典型代表就是通過Word和Excel打印報表。

二、方法簡介

使用Printer對象編程進行打印,最大的問題是要經常進行坐標運算,需要考慮很多瑣碎的問題,代碼量大,打印的內容無法預覽。優點是控制靈活,且打印效果比較好,在實際應用中,對於壹些靈活度較高,功能較復雜的報表使用本方法是較理想的方法。本文的實例中主要介紹了此種方法的實現過程。

VB自帶的Data Report與Printer比起來,編程強度小了很多,而且它以所見即所得的方式設計報表,比較直觀,打印出來的報表比較美觀,實現打印預覽功能比較簡單。它缺點是不夠靈活,綁定內容只能是Recordset,且還有諸多限制。

Crystal Report是Seagate公司出品的報表打印控件,8.0以上的版式本的功能已經十分強大,控制靈活,堪稱經典的報表解決方案。它的缺點體積比較強大,且是商用軟件,價格比較昂貴。

Active Report是Data Dynamic公司出品的優秀打印控件。Active Report作為Data Report的增強型,控制靈活,功能完備,完全可以勝任日常報表打印工作。

借助VBA調用壹些外部軟件解決打印問題,其中Word和Excel是常用的“打印代理”。這種方法的好處是控制比較簡單,打印功能強大。它的缺點是要求運行報表打印程序的計算機必須安裝相應軟件(如Word或Excel等)。

三、程序實現

1.新建壹個標準工程,名稱為工程1。在工程中創建壹個窗體,名稱為Forml

2.單擊工程菜單下的部件選取項,在彈出的列表中選中Microsoft FlexGrid Control6.0(sp3)選項,然後單擊確定按鍵,MSFlexGrid控件就添加到工具箱中了。

3.在Forml窗體中放置1個MSFlexGrid控件、8個TextBox控件、8個Label控件、5個CommandButton控件等。主要控件對象的屬性如下表所示。

主要控件的屬性列表

對 象

屬 性

功 能

MSFlexGrid

名稱

MSFlexGrid1

輸入入庫信息

Text1

名稱

Text1

Text2

名稱

TxtWhm_1

輸入單據號

Text3

名稱

TxtWhm_2

顯示品種數

Text4

名稱

TxtWhm_3

顯示合計數量

Text5

名稱

TxtWhm_4

顯示合計金額

Text6

名稱

TxtWhm_6

輸入供貨商名稱

Text7

名稱

TxtWhm_7

輸入日期

Text8

名稱

TxtWhm_8

輸入經手人

Command1

名稱

CmdRegister

登記命令

Caption

登記

Command2

名稱

CmdSave

保存命令

Caption

保存

Command3

名稱

Cmdprint

打印命令

Caption

打印

Command4

名稱

CmdCancel

取消命令

Caption

取消

Command5

名稱

CmdEnd

退出命令

Caption

退出

4.添加程序代碼

這裏以藥品入庫單為例實現報表的打印、核心代碼如下:

Private Sub CmdPrint_Click() '編程實現票據連續分頁打印

'參數定義,作用為確定打印坐標

Dim i, A As Integer

Dim v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13 As Integer

v1 = 5

v2 = v1 + MSFlexGrid1.ColWidth(0) * 1.2 '序號

v3 = v2 + MSFlexGrid1.ColWidth(1) * 1# '藥品代碼

v4 = v3 + MSFlexGrid1.ColWidth(2) * 0.95 '藥品名稱

v5 = v4 + MSFlexGrid1.ColWidth(3) * 0.9 '規格

v6 = v5 + MSFlexGrid1.ColWidth(4) * 0.8 '產地

v7 = v6 + MSFlexGrid1.ColWidth(5) * 0.9 '批號

v8 = v7 + MSFlexGrid1.ColWidth(6) * 0.8 '有效期

v9 = v8 + MSFlexGrid1.ColWidth(7) * 0.9 '單位

v10 = v9 + MSFlexGrid1.ColWidth(8) * 1.4 '數量

v11 = v10 + MSFlexGrid1.ColWidth(9) * 1.2 '單價-----進貨價

v12 = v11 + MSFlexGrid1.ColWidth(10) * 1.3 '金額

v13 = 11500

Dim m As Integer '總記錄數

Dim N As Integer '每頁記錄數

Dim ii As Integer '總頁數

Dim j As Integer '頁碼數

Dim k As Integer '每頁起始記錄控制

Dim TmpLowerPageMoney As Single '每頁合計金額

m = Val(TxtWhm_2.Text) '(TxtWhm_2 入庫品種數)----總記錄數

N = 4 '每頁 4 條記錄

If Int(m / N) - m / N = 0 Then

ii = m / N

Else

ii = Int(m / N) + 1

End If

Printer.Height = 750 + 300 + 450 * N + 900 + 1000 '定義紙張高度----根據每頁記錄數

Printer.Width = 12000 '定義紙張寬度

For j = 1 To ii '外循環控制打印頁數

TmpLowerPageMoney = 0# '每頁合計金額 ------ 新頁開始清零

Printer.CurrentX = 4000

Printer.CurrentY = 200

Printer.FontSize = 16

Printer.Print "湘潭市維民貿易有限公司入庫單 "

Printer.CurrentX = 9250 '頁碼置於左上角

Printer.CurrentY = 200

Printer.FontSize = 10

Printer.Print "第 " + Trim(Str(j)) + " 頁 *** " & Trim(Str(ii)) + " 頁"

Printer.CurrentX = 200

Printer.CurrentY = 750

Printer.FontSize = 10

Printer.Print "供貨單位:" & TxtWhm_6.Text

Printer.CurrentX = 5000

Printer.CurrentY = 750

Printer.FontSize = 10

'Printer.Print "(此入庫單不做報銷憑證)"

Printer.CurrentX = 8800

Printer.CurrentY = 750

Printer.FontSize = 10

Printer.Print "票號:" & "" & TxtWhm_1.Text

'列標題

'A -------- 表主體縱向高度

A = 1050

Printer.Line (v1, A)-(v13, A) '畫頂橫線

If MSFlexGrid1.ColWidth(0) > 0 Then '第1列

Printer.Line (v1, A)-(v1, A + 450) '畫左堅邊線

Printer.CurrentX = 50

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "序號"

End If

If MSFlexGrid1.ColWidth(1) > 0 Then '第2列

Printer.Line (v2, A)-(v2, A + 450)

Printer.CurrentX = v2 + 10

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "藥品代碼"

End If

If MSFlexGrid1.ColWidth(2) > 0 Then '第3列

Printer.Line (v3, A)-(v3, A + 450)

Printer.CurrentX = v3 + 40

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "藥品名稱"

End If

If MSFlexGrid1.ColWidth(3) > 0 Then '第4列

Printer.Line (v4, A)-(v4, A + 450)

Printer.CurrentX = v4 + 40

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "規格"

End If

If MSFlexGrid1.ColWidth(4) > 0 Then '第5列

Printer.Line (v5, A)-(v5, A + 450)

Printer.CurrentX = v5 + 40

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "產地"

End If

If MSFlexGrid1.ColWidth(5) > 0 Then '第6列

Printer.Line (v6, A)-(v6, A + 450)

Printer.CurrentX = v6 + 40

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "批號"

End If

If MSFlexGrid1.ColWidth(6) > 0 Then '第7列

Printer.Line (v7, A)-(v7, A + 450)

Printer.CurrentX = v7 + 40

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "有效期"

End If

If MSFlexGrid1.ColWidth(7) > 0 Then '第8列

Printer.Line (v8, A)-(v8, A + 450)

Printer.CurrentX = v8 + 20

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "單位"

End If

If MSFlexGrid1.ColWidth(8) > 0 Then '第9列

Printer.Line (v9, A)-(v9, A + 450)

Printer.CurrentX = v9 + 30

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "數量"

End If

If MSFlexGrid1.ColWidth(9) > 0 Then '第10列

Printer.Line (v10, A)-(v10, A + 450)

Printer.CurrentX = v10 + 80

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "單價" '註意: 此處“單價”對應“進貨價”

End If

If MSFlexGrid1.ColWidth(10) > 0 Then '第11列

Printer.Line (v11, A)-(v11, A + 450)

Printer.CurrentX = v11 + 20

Printer.CurrentY = A + 100

Printer.FontSize = 10

Printer.Print "金額"

Printer.Line (v12 + 10, A)-(v12 + 10, A + 450) '畫右堅邊線(封口)

End If

A = 1500 'A -------- 表主體縱向高度

Printer.Line (v1, A)-(v13, A) '畫橫線

If j = 1 Then 'k 每頁起始記錄控制

k = 1 'k=0 表示第1行,k=1 表示第2行

Else

k = (j - 1) * N + 1

End If

For i = k To j * N '內循環控制每頁打印-------------分頁打印

If MSFlexGrid1.ColWidth(0) > 0 Then '第1列 序號

Printer.Line (v1, A)-(v1, A + 450) '畫左堅邊線

Printer.CurrentX = 245

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 0) <> "" Then 'i=0 時為第1行,標題行

Printer.Print MSFlexGrid1.TextMatrix(i, 0)

End If

End If

If MSFlexGrid1.ColWidth(1) > 0 Then '第2列 藥品代碼

Printer.Line (v2, A)-(v2, A + 450)

Printer.CurrentX = v2 + 10

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 1) <> "" Then

Printer.Print MSFlexGrid1.TextMatrix(i, 1)

End If

End If

If MSFlexGrid1.ColWidth(2) > 0 Then '第3列 藥品名稱

Printer.Line (v3, A)-(v3, A + 450)

Printer.CurrentX = v3 + 10

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 2) <> "" Then

Printer.Print MSFlexGrid1.TextMatrix(i, 2)

End If

End If

If MSFlexGrid1.ColWidth(3) > 0 Then '第4列 規格

Printer.Line (v4, A)-(v4, A + 450)

Printer.CurrentX = v4 + 20

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 3) <> "" Then

Printer.Print MSFlexGrid1.TextMatrix(i, 3)

End If

End If

If MSFlexGrid1.ColWidth(4) > 0 Then '第5列 產地

Printer.Line (v5, A)-(v5, A + 450)

Printer.CurrentX = v5 + 50

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 4) <> "" Then

Printer.Print MSFlexGrid1.TextMatrix(i, 4)

End If

End If

If MSFlexGrid1.ColWidth(5) > 0 Then '第6列 批號

Printer.Line (v6, A)-(v6, A + 450)

Printer.CurrentX = v6 + 30

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 5) <> "" Then

Printer.Print MSFlexGrid1.TextMatrix(i, 5)

End If

End If

If MSFlexGrid1.ColWidth(6) > 0 Then '第7列 有效期

Printer.Line (v7, A)-(v7, A + 450)

Printer.CurrentX = v7 + 60

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 6) <> "" Then

Printer.Print MSFlexGrid1.TextMatrix(i, 6)

End If

End If

If MSFlexGrid1.ColWidth(7) > 0 Then '第8列 單位

Printer.Line (v8, A)-(v8, A + 450)

Printer.CurrentX = v8 + 30

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 7) <> "" Then

Printer.Print MSFlexGrid1.TextMatrix(i, 7)

End If

End If

If MSFlexGrid1.ColWidth(8) > 0 Then '第9列 數量

Printer.Line (v9, A)-(v9, A + 450)

Printer.CurrentX = v9 + 60

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 8) <> "" Then

Printer.Print MSFlexGrid1.TextMatrix(i, 8)

End If

End If

If MSFlexGrid1.ColWidth(9) > 0 Then '第10列 進貨價

Printer.Line (v10, A)-(v10, A + 450)

Printer.CurrentX = v10 + 150

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 9) <> "" Then

Printer.Print Format(MSFlexGrid1.TextMatrix(i, 9), "0.00")

End If

End If

If MSFlexGrid1.ColWidth(10) > 0 Then '第11列 金額

Printer.Line (v11, A)-(v11, A + 450)

Printer.CurrentX = v11 + 200

Printer.CurrentY = A + 100

Printer.FontSize = 10

If MSFlexGrid1.TextMatrix(i, 10) <> "" Then

Printer.Print Format(MSFlexGrid1.TextMatrix(i, 10), "0.00")

End If

TmpLowerPageMoney = TmpLowerPageMoney + Val(MSFlexGrid1.TextMatrix(i, 10)) '每頁合計金額

TxtPageLowerMoney = Round(TmpLowerPageMoney, 2)

Printer.Line (v12, A)-(v12, A + 450) '畫右堅邊線(封口)

End If

Printer.Line (v1, A + 450)-(v13, A + 450) '“本頁合計金額大寫”上邊橫線

A = A + 450 '行距每次增加 450

Next i '內循環結束

Printer.FontSize = 10

Printer.Line (v1, A + 450)-(v13, A + 450)

Printer.CurrentX = v1 + 300

Printer.CurrentY = A + 100

Printer.Print "本頁合計金額大寫 " & "" & Format(LabPageUpperMoney, "0.00") '每頁合計金額(大寫)

Printer.Line (v3 + 550, A)-(v3 + 550, A + 450) '“本頁合計金額大寫”右邊豎線

Printer.FontSize = 10

Printer.CurrentX = v9 + 60 'v1 + 7500

Printer.CurrentY = A + 100

Printer.Print "小寫: " & Format(TxtPageLowerMoney, "0.00") & "元" '每頁合計金額(小寫)

Printer.Line (v9, A)-(v9, A + 450) '“小寫:”右邊豎線

Printer.Line (v1, A + 450)-(v13, A + 450) '畫橫線

Printer.FontSize = 10

Printer.CurrentX = v1 + 20

Printer.CurrentY = A + 550

Printer.Print "備註"

Printer.Line (v2, A + 450)-(v2, A + 900) '“備註”右邊豎線

Printer.FontSize = 10

Printer.CurrentX = v9 + 60 'v1 + 7500

Printer.CurrentY = A + 550

Printer.Print "本次開票總金額: " & "" & Format(TxtWhm_4, "0.00") & "元" '總金額(小寫)

Printer.Line (v9, A + 450)-(v9, A + 900) '“本次開票總金額:”右邊豎線

Printer.Line (v1, A + 900)-(v13, A + 900) '畫底邊橫線

Printer.FontSize = 10

Printer.CurrentX = v1 + 10

Printer.CurrentY = A + 1000

Printer.Print "開票人:" & "" & TxtWhm_8.Text

Printer.FontSize = 10

Printer.CurrentX = v1 + 2200

Printer.CurrentY = A + 1000

Printer.Print "收貨人: 復核人: 送貨人:"

Printer.NewPage '新的壹頁

Printer.EndDoc '換頁

Next j '外循環結束

Call MsgBox("正在打印......!", vbOKOnly + vbInformation, "提示...")

End Sub

5.程序運行結果

程序運行效果如圖1所示,打印效果如圖2所示。

圖1 藥品入庫單窗體運行結果

圖2 藥品入庫單報表打印結果

四、 結束語

Printer是Visual Basic提供的壹個操作打印機進行基本打印操作的對象。通過它,可以實現強大的打印功能,可以自定義打印格式、打印頁數、表格的粗細和字體的大小等。編碼雖然稍微麻煩(需要進行多次坐標計算),但也是最靈活的報表打印方式之壹。作者在利用此方法設計《醫藥進銷存管理系統》中的入(出)庫單時,取得了很好的較果,大家可以根據自己開發MIS系統中報表打印的實際要求,借鑒此設計思路,實現屬於自己系統的報表打印。

  • 上一篇:瀘州警校怎麽樣?想要全面的情況!
  • 下一篇:什麽是壹般稅率控制?
  • copyright 2024偏方大全网