打印函数如下:
Sub printOurP2(ByVal page As Integer)
'套打票据二
On Error GoTo haveErr
Dim tmp As SellProduct
Dim i As Integer
Dim tmpA As Single
Dim tmpM As Currency
Dim rowheight As Single
'打印自定义的票据
Printer.Scale
'Printer.PaperSize = vbPRPSUser
Printer.FontSize = 15
Printer.ScaleHeight = 132 * 56.7
Printer.ScaleWidth = 191 * 56.7
'Printer.Zoom = 100
' Printer.Width = 56.7 * 191
' Printer.Height = 56.7 * 132
' Printer.FontSize = 15
'打印日期
Printer.CurrentX = 56.7 * 148: Printer.CurrentY = 56.7 * 19: Printer.Print Right(Year(Date), 2) '打印两位年编号
Printer.CurrentX = 56.7 * 160: Printer.CurrentY = 56.7 * 19: Printer.Print Month(Date) '打印月份
Printer.CurrentX = 56.7 * 170: Printer.CurrentY = 56.7 * 19: Printer.Print Day(Date) '打印日期
If Not NowMember Is Nothing Then '有会员,打印会员编号及姓名
Printer.CurrentX = 56.7 * 37: Printer.CurrentY = 56.7 * 25: Printer.Print NowMember.bh
Printer.CurrentX = 56.7 * 72: Printer.CurrentY = 56.7 * 25: Printer.Print NowMember.Name
End If
rowheight = 6
i = 0
For i = 0 To 9
If i + 1 + page * 10 > NowSell.Products.Count Then Exit For
Set tmp = NowSell.Products(i + 1 + page * 10)
tmpA = tmpA + tmp.Amount
tmpM = tmpM + tmp.Money
Printer.CurrentX = 56.7 * 17: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print tmp.Name '打印商品名称
Printer.CurrentX = 56.7 * 62: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print tmp.Spcd '打印单位
Printer.CurrentX = 56.7 * 95: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print tmp.Unit '打印单位
Printer.CurrentX = 56.7 * 109: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print tmp.Amount '打印数量
Printer.CurrentX = 56.7 * 126: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print Format(tmp.price, "0.00") '打印单价
Printer.CurrentX = 56.7 * 148: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print Format(tmp.Money, "0.00") '打印金额
Next
Printer.CurrentX = 56.7 * 109: Printer.CurrentY = 56.7 * 104: Printer.Print tmpA '打印本单总数量
Printer.CurrentX = 56.7 * 148: Printer.CurrentY = 56.7 * 104: Printer.Print Format(tmpM, "0.00")
Printer.EndDoc
If (page + 1) * 10 < NowSell.Products.Count Then printOurP2 page + 1
Exit SubhaveErr:
isPrint = False
WP = False
End Sub上面打函数打印,同样的代码、同一台打印机、不同的电脑打印效果居然不一样。好像是会继承打印机的某项默认设置来打印,我尝试修改了不少Printer属性没有反应。有人能指点一下么?
Sub printOurP2(ByVal page As Integer)
'套打票据二
On Error GoTo haveErr
Dim tmp As SellProduct
Dim i As Integer
Dim tmpA As Single
Dim tmpM As Currency
Dim rowheight As Single
'打印自定义的票据
Printer.Scale
'Printer.PaperSize = vbPRPSUser
Printer.FontSize = 15
Printer.ScaleHeight = 132 * 56.7
Printer.ScaleWidth = 191 * 56.7
'Printer.Zoom = 100
' Printer.Width = 56.7 * 191
' Printer.Height = 56.7 * 132
' Printer.FontSize = 15
'打印日期
Printer.CurrentX = 56.7 * 148: Printer.CurrentY = 56.7 * 19: Printer.Print Right(Year(Date), 2) '打印两位年编号
Printer.CurrentX = 56.7 * 160: Printer.CurrentY = 56.7 * 19: Printer.Print Month(Date) '打印月份
Printer.CurrentX = 56.7 * 170: Printer.CurrentY = 56.7 * 19: Printer.Print Day(Date) '打印日期
If Not NowMember Is Nothing Then '有会员,打印会员编号及姓名
Printer.CurrentX = 56.7 * 37: Printer.CurrentY = 56.7 * 25: Printer.Print NowMember.bh
Printer.CurrentX = 56.7 * 72: Printer.CurrentY = 56.7 * 25: Printer.Print NowMember.Name
End If
rowheight = 6
i = 0
For i = 0 To 9
If i + 1 + page * 10 > NowSell.Products.Count Then Exit For
Set tmp = NowSell.Products(i + 1 + page * 10)
tmpA = tmpA + tmp.Amount
tmpM = tmpM + tmp.Money
Printer.CurrentX = 56.7 * 17: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print tmp.Name '打印商品名称
Printer.CurrentX = 56.7 * 62: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print tmp.Spcd '打印单位
Printer.CurrentX = 56.7 * 95: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print tmp.Unit '打印单位
Printer.CurrentX = 56.7 * 109: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print tmp.Amount '打印数量
Printer.CurrentX = 56.7 * 126: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print Format(tmp.price, "0.00") '打印单价
Printer.CurrentX = 56.7 * 148: Printer.CurrentY = 56.7 * (43 + i * rowheight): Printer.Print Format(tmp.Money, "0.00") '打印金额
Next
Printer.CurrentX = 56.7 * 109: Printer.CurrentY = 56.7 * 104: Printer.Print tmpA '打印本单总数量
Printer.CurrentX = 56.7 * 148: Printer.CurrentY = 56.7 * 104: Printer.Print Format(tmpM, "0.00")
Printer.EndDoc
If (page + 1) * 10 < NowSell.Products.Count Then printOurP2 page + 1
Exit SubhaveErr:
isPrint = False
WP = False
End Sub上面打函数打印,同样的代码、同一台打印机、不同的电脑打印效果居然不一样。好像是会继承打印机的某项默认设置来打印,我尝试修改了不少Printer属性没有反应。有人能指点一下么?
肯定一太win9X,另一台是win2000或XP
基于NT核心的打印直接用pinter设置是无效的
一台是XP,一台是2000
试过,设为匙或毫米都试过。
Printer.PaperSize = vbPRPSA3 '设置纸张大小
Printer.Orientation = vbPRORPortrait '设置打印方向为纸向设置纸张宽度或者高度的时候,不要使用ScaleWidth或者ScaleHeight,其与WIDTH和HEIGHT的具体区别请见MSDN。我用PRINTER做过在98、2000及XP下的打印,打印位置可能会有一些细微的误差,但不会出现你说的整体放大或者缩小,出现你说的这种情况,具我估计就是你用ScaleWidth或者ScaleHeight设置的宽度和高度的比例造成的。你可以写个简单的程序测试一下,比如只画几条线,再打几个字,只用WIDTH/HEIGHT设置纸张的大小,用Printer.ScaleMode = vbMillimeters 设置座标模式为毫米,测试一下。其他的设置先不用。
应使用 ScaleMode 属性。把其它任何 Scale 属性设置为任何值都将使 ScaleMode 自动地设置为 0。
ScaleMode 等于 0 是用户定义。
把 ScaleMode 设置为一个大于 0 的数,
将使 ScaleHeight 和 ScaleWidth 的度量单位发生改变,
并将 ScaleLeft 和 ScaleTop 设置为 0。
另外,CurrentX 和 CurrentY 的设置值将发生改变以反映当前点的新坐标。 以上帮助希望对楼主有用
同意楼上的思路,虽然你设置了绝对尺寸
可是你不能确定你的语句真的会产生你预期的效果
你要先测试一下