用Printer对象 对返回的记录集做循环打印 虽然比较烦一点, 但速度比较快Public Sub PrtPap(sStr As String, Optional sX As Integer, Optional sY As Integer, Optional sFontsize As Integer = 11) '打印调用:字符串,起点(可选),字体(可选) If sFontsize > 0 Then Printer.FontSize = sFontsize If sY > 0 Then Printer.CurrentY = sY Printer.CurrentX = sX Printer.Print sStr End SubPrivate Sub PrintPYKZJ(ByVal rstZL As Recordset, Optional ByVal strFilter As String = "") Dim CBQMC As String, CJXMC As String Dim oriX As Integer, stepX As Integer, stepY As Single, intY As Integer Dim CSQL As String Dim CRSET As String
If rstZL.RecordCount = 0 Then MsgBox "没有原始数据!", vbOKOnly, "提示!" Exit Sub End If
rstZL.MoveFirst
Printer.ScaleMode = 6 '毫米 Printer.FontName = "楷体"
Do While Not rstZL.EOF If intY > 260 Then Printer.NewPage intY = 4 End If CBQMC = Trim(rstZL!BQMC) CJXMC = IIf(IsNull(Trim(rstZL!JXMC)), "0", Trim(rstZL!JXMC))
If Trim(rstZL!BQMC) <> CBQMC Or IIf(IsNull(rstZL!JXMC), "0", Trim(rstZL!JXMC)) <> CJXMC Then CBQMC = Trim(rstZL!BQMC) CJXMC = IIf(IsNull(rstZL!JXMC), "0", Trim(rstZL!JXMC)) Exit Do End If
If intY > 260 Then Printer.NewPage intY = 4 End If Loop intY = Printer.CurrentY + 4 * stepY Loop
对返回的记录集做循环打印
虽然比较烦一点,
但速度比较快Public Sub PrtPap(sStr As String, Optional sX As Integer, Optional sY As Integer, Optional sFontsize As Integer = 11)
'打印调用:字符串,起点(可选),字体(可选)
If sFontsize > 0 Then Printer.FontSize = sFontsize
If sY > 0 Then Printer.CurrentY = sY
Printer.CurrentX = sX
Printer.Print sStr
End SubPrivate Sub PrintPYKZJ(ByVal rstZL As Recordset, Optional ByVal strFilter As String = "")
Dim CBQMC As String, CJXMC As String
Dim oriX As Integer, stepX As Integer, stepY As Single, intY As Integer
Dim CSQL As String
Dim CRSET As String
Dim iYM As Integer
Dim IX(6) As Integer
iYM = 1
oriX = 10
stepX = 8
stepY = 2.5
intY = 4
IX(0) = oriX - 2
IX(1) = oriX + 45
IX(2) = oriX + 75
IX(3) = oriX + 95
IX(4) = oriX + 120
IX(5) = oriX + 145
IX(6) = oriX + 175
rstZL.Filter = strFilter
If rstZL.RecordCount = 0 Then
MsgBox "没有原始数据!", vbOKOnly, "提示!"
Exit Sub
End If
rstZL.MoveFirst
Printer.ScaleMode = 6 '毫米
Printer.FontName = "楷体"
Do While Not rstZL.EOF
If intY > 260 Then
Printer.NewPage
intY = 4
End If
CBQMC = Trim(rstZL!BQMC)
CJXMC = IIf(IsNull(Trim(rstZL!JXMC)), "0", Trim(rstZL!JXMC))
Printer.FontBold = True
If DYSCbz = True Then
PrtPap "*", 5, intY
End If
PrtPap "病区名称:" & rstZL!BQMC, IX(0), intY
PrtPap "剂型:" & IIf(IsNull(Trim(rstZL!JXMC)), " ", Trim(rstZL!JXMC)), IX(2) + 20, intY
PrtPap Format(Now, "YYYY-MM-DD HH:MM"), IX(4) + 20, intY
intY = Printer.CurrentY + 2 * iYM
'横线
Printer.Line (IX(0), intY - iYM + 0.1)-(IX(6), intY - iYM + 0.1)
'竖线 - 第二行的
Printer.Line (IX(0), intY - iYM)-(IX(0), intY + stepY * 2 - iYM)
Printer.Line (IX(1), intY - iYM)-(IX(1), intY + stepY * 2 - iYM)
Printer.Line (IX(2), intY - iYM)-(IX(2), intY + stepY * 2 - iYM)
Printer.Line (IX(3), intY - iYM)-(IX(3), intY + stepY * 2 - iYM)
Printer.Line (IX(4), intY - iYM)-(IX(4), intY + stepY * 2 - iYM)
Printer.Line (IX(5), intY - iYM)-(IX(5), intY + stepY * 2 - iYM)
Printer.Line (IX(6), intY - iYM)-(IX(6), intY + stepY * 2 - iYM)
PrtPap "药品名称", IX(0) + 2, intY
PrtPap "规格", IX(1) + 2, intY
PrtPap "单位", IX(2) + 2, intY
PrtPap "单价", IX(3) + 2, intY
PrtPap "总数量", IX(4) + 2, intY
PrtPap "金额", IX(5) + 2, intY
Printer.Line (IX(0), intY + 2 * stepY - iYM)-(IX(6), intY + 2 * stepY - iYM)
Printer.FontBold = False
intY = Printer.CurrentY + iYM
Do While Trim(rstZL!BQMC) = CBQMC And IIf(IsNull(Trim(rstZL!JXMC)), "0", Trim(rstZL!JXMC)) = CJXMC
Printer.Line (IX(0), intY - iYM)-(IX(0), intY + 2 * stepY - iYM)
Printer.Line (IX(1), intY - iYM)-(IX(1), intY + 2 * stepY - iYM)
Printer.Line (IX(2), intY - iYM)-(IX(2), intY + 2 * stepY - iYM)
Printer.Line (IX(3), intY - iYM)-(IX(3), intY + 2 * stepY - iYM)
Printer.Line (IX(4), intY - iYM)-(IX(4), intY + 2 * stepY - iYM)
Printer.Line (IX(5), intY - iYM)-(IX(5), intY + stepY * 2 - iYM)
Printer.Line (IX(6), intY - iYM)-(IX(6), intY + stepY * 2 - iYM)
PrtPap rstZL!sfxmmc, IX(0) + 2, intY
PrtPap rstZL!GG, IX(1) + 2, intY
PrtPap rstZL!DW, IX(2) + 2, intY
CRSET = "12345678901"
RSet CRSET = Format(rstZL!DJ, "#,##0.0000")
PrtPap CRSET, IX(3) + 2, intY
CRSET = "12345678901"
RSet CRSET = Format(rstZL!sl, "#,##0.00")
PrtPap CRSET, IX(4) + 2, intY
CRSET = "1234567890111"
RSet CRSET = Format(rstZL!sl * rstZL!DJ, "#,##0.00")
PrtPap CRSET, IX(5) + 2, intY
Printer.Line (IX(0), intY + 2 * stepY - iYM)-(IX(6), intY + 2 * stepY - iYM)
intY = Printer.CurrentY + iYM
rstZL.MoveNext
If rstZL.EOF Then Exit Do
If Trim(rstZL!BQMC) <> CBQMC Or IIf(IsNull(rstZL!JXMC), "0", Trim(rstZL!JXMC)) <> CJXMC Then
CBQMC = Trim(rstZL!BQMC)
CJXMC = IIf(IsNull(rstZL!JXMC), "0", Trim(rstZL!JXMC))
Exit Do
End If
If intY > 260 Then
Printer.NewPage
intY = 4
End If
Loop
intY = Printer.CurrentY + 4 * stepY
Loop
Printer.EndDocEnd Sub