如何打印一个FRAME里面的内容,以及如何打印一个MSFlexGrid里面的内容? 如何打印一个FRAME里面的内容,以及如何打印一个MSFlexGrid里面的内容? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有打印MSFlexGrid的例子,到时发一个 用printer对象打印表格 用msflexgrid控件显示的表格,要将它打印出来,最简单的方法是用printform方法,然而这只适合于数据正好能被屏幕显示的,即数据量少的,而且这种打印效果很差。而用printer对象进行打印编程,虽然麻烦点,但效果却是相当不错的,你可以自定义打印格式,打印页数,表格的粗细,字体大小等。实际上用printer对象进行打印编程是比较简单的。下面我就用一实例来说明:打印的内容是一张数据表,这里就只有两列数据,包括标题,副标题。(用A4纸打印)假设数据处在C_DataArray(),和R_DataArray()中C_Name与R_Name分别为两数据项的字段名Public Sub Printtable()'初始化Dim printer1 as PrinterDim pageheaderDim pagefooterDim pageleftDim pagerightDim usewidthDim useheightDim i, j, k As IntegerDim word As StringDim startxDim startyDim startyline ‘ 用来纪录打印竖线的起点Dim endyline ’ 用来纪录打印竖线的末点设置页面参数pageheader = 25pagefooter = 25pageleft = 20pageright = 20 With printer1 .PaperSize = 9 .ScaleMode = 6 .FontBold = True .ScaleLeft = -20 .ScaleTop = -25 .ScaleWidth = 210 '设置为A4纸 .ScaleHeight = 297 usewidth = .ScaleWidth - 40 useheight = .ScaleHeight - 50 .CurrentX = 0 .CurrentY = 0 .DrawWidth = 5End With'打印标题With printer1 .FontSize = 20 .CurrentX = (usewidth - .TextWidth(DataTitle)) / 2 .CurrentY = pageheader + .ScaleTopEnd With printer1.Print DataTitle '打印副标题 printer1.FontSize = 15 word = DataTitle2 printer1.CurrentX = usewidth - printer1.TextWidth(word) printer1.Print word '打印第一条线 Line方法不能用在with ....end with里printer1.CurrentX = pageleft + printer1.ScaleLeftstartyline = printer1.CurrentY'线宽printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY)printer1.FontSize = 10'printer1.Print vbLfprinter1.CurrentY = printer1.CurrentY + 1'打印第一个字段名starty = printer1.CurrentYprinter1.CurrentX = ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(C_Name)) / 2printer1.Print C_Name'打印第二个字段名printer1.CurrentX = usewidth / 2 + ((usewidth / 2 - printer1.TextWidth(R_Name)) / 2)printer1.CurrentY = startyprinter1.Print R_Nameprinter1.CurrentY = printer1.CurrentY + 1'打印数据和横线,rownum为数据行数For i = 1 To rownum'判断是否该页已打满 If printer1.CurrentY >= useheight Then '打印横线 printer1.CurrentX = printer1.ScaleLeft + pageleft printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY) printer1.CurrentY = printer1.CurrentY + 1 '打印三条竖线 endyline = printer1.CurrentY printer1.Line (0, startyline)-(0, endyline) printer1.Line (usewidth / 2, startyline)-(usewidth / 2, endyline) printer1.Line (usewidth, startyline)-(usewidth, endyline) '打印页号 With printer1 .CurrentX = (.ScaleWidth - .TextWidth(.Page)) / 2 - pageleft .CurrentY = useheight + 3 End With printer1.Print printer1.Page printer1.NewPage With printer1 .CurrentX = pageleft + .ScaleLeft .CurrentY = pageheader + .ScaleTop startyline = .CurrentY End With End If '打印一行数据 printer1.CurrentX = ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(C_DataArray(i))) / 2 starty = printer1.CurrentY printer1.Print C_DataArray(i) printer1.CurrentX = (printer1.ScaleWidth - 40) / 2 + ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(R_DataArray(i) )) / 2 printer1.CurrentY = starty printer1.Print R_DataArray(i) printer1.CurrentY = printer1.CurrentY + 1 Next i '打印最后一条横线 printer1.CurrentX = printer1.ScaleLeft + pageleft printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY) endyline = printer1.CurrentY'打印三条竖线 printer1.Line (0, startyline)-(0, endyline) printer1.Line (usewidth / 2, startyline)-(usewidth / 2, endyline) printer1.Line (usewidth, startyline)-(usewidth, endyline) '打印页号 With printer1 .CurrentX = (.ScaleWidth - .TextWidth(.Page)) / 2 - pageleft .CurrentY = useheight + 3 End With printer1.Print printer1.Page printer1.EndDocend sub如要打印mshflex等你可以自己对printer对象写代码循环行、列赋值 让窗体大小正好是Frame的大小,然后Me.PrintForm打印整个窗体.打表格的就用莫依的方法吧.用Printer去打. 如果打印的表格不是很多,就直接用 Me.PrintForm 打印 或生成一个图片文件打印。另外,也可以在 莫依 的方法的基础上画上类似于是 Frame 大小长度的线,也可以解决的 如何用VBA控制改变excel中手动插入的图片的大小? 水晶报表10如何连接access数据库?100分相赠! 不能识别的数据库格式? 简单问题,急急急 天太热了,喝点可乐,呵呵 请问在VB。NET里怎么实现原VB6里OLE CONTAINER的功能? 关于vb调入excell 怎么查看系统正在运行的应用程序?虽然只能一次给50,但如解决问题绝不失言 高分求解! 要多少有多少! 软区设为保护,不能拷文件到a盘?!十万火急! 数据导入问题!!!很急!!! 请问谁有mshflexgrid的用法??给个具体的实例代码??
'初始化Dim printer1 as PrinterDim pageheader
Dim pagefooter
Dim pageleft
Dim pageright
Dim usewidth
Dim useheight
Dim i, j, k As Integer
Dim word As String
Dim startx
Dim starty
Dim startyline ‘ 用来纪录打印竖线的起点Dim endyline ’ 用来纪录打印竖线的末点设置页面参数pageheader = 25
pagefooter = 25
pageleft = 20
pageright = 20
With printer1
.PaperSize = 9
.ScaleMode = 6
.FontBold = True
.ScaleLeft = -20
.ScaleTop = -25
.ScaleWidth = 210 '设置为A4纸
.ScaleHeight = 297
usewidth = .ScaleWidth - 40
useheight = .ScaleHeight - 50
.CurrentX = 0
.CurrentY = 0
.DrawWidth = 5
End With
'打印标题
With printer1
.FontSize = 20
.CurrentX = (usewidth - .TextWidth(DataTitle)) / 2
.CurrentY = pageheader + .ScaleTop
End With
printer1.Print DataTitle
'打印副标题
printer1.FontSize = 15
word = DataTitle2
printer1.CurrentX = usewidth - printer1.TextWidth(word)
printer1.Print word
'打印第一条线 Line方法不能用在with ....end with里printer1.CurrentX = pageleft + printer1.ScaleLeft
startyline = printer1.CurrentY
'线宽printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY)
printer1.FontSize = 10
'printer1.Print vbLf
printer1.CurrentY = printer1.CurrentY + 1
'打印第一个字段名
starty = printer1.CurrentY
printer1.CurrentX = ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(C_Name)) / 2printer1.Print C_Name
'打印第二个字段名
printer1.CurrentX = usewidth / 2 + ((usewidth / 2 - printer1.TextWidth(R_Name)) / 2)
printer1.CurrentY = starty
printer1.Print R_Name
printer1.CurrentY = printer1.CurrentY + 1
'打印数据和横线,rownum为数据行数For i = 1 To rownum
'判断是否该页已打满
If printer1.CurrentY >= useheight Then '打印横线
printer1.CurrentX = printer1.ScaleLeft + pageleft
printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY)
printer1.CurrentY = printer1.CurrentY + 1
'打印三条竖线
endyline = printer1.CurrentY
printer1.Line (0, startyline)-(0, endyline)
printer1.Line (usewidth / 2, startyline)-(usewidth / 2, endyline)
printer1.Line (usewidth, startyline)-(usewidth, endyline)
'打印页号
With printer1
.CurrentX = (.ScaleWidth - .TextWidth(.Page)) / 2 - pageleft
.CurrentY = useheight + 3
End With
printer1.Print printer1.Page
printer1.NewPage
With printer1
.CurrentX = pageleft + .ScaleLeft
.CurrentY = pageheader + .ScaleTop
startyline = .CurrentY
End With
End If
'打印一行数据
printer1.CurrentX = ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(C_DataArray(i))) / 2
starty = printer1.CurrentY
printer1.Print C_DataArray(i)
printer1.CurrentX = (printer1.ScaleWidth - 40) / 2 + ((printer1.ScaleWidth - 40) / 2 - printer1.TextWidth(R_DataArray(i) )) / 2
printer1.CurrentY = starty
printer1.Print R_DataArray(i)
printer1.CurrentY = printer1.CurrentY + 1
Next i
'打印最后一条横线
printer1.CurrentX = printer1.ScaleLeft + pageleft
printer1.Line -((printer1.ScaleLeft + printer1.ScaleWidth - pageleft), printer1.CurrentY)
endyline = printer1.CurrentY
'打印三条竖线
printer1.Line (0, startyline)-(0, endyline)
printer1.Line (usewidth / 2, startyline)-(usewidth / 2, endyline)
printer1.Line (usewidth, startyline)-(usewidth, endyline)
'打印页号
With printer1
.CurrentX = (.ScaleWidth - .TextWidth(.Page)) / 2 - pageleft
.CurrentY = useheight + 3
End With
printer1.Print printer1.Page
printer1.EndDoc
end sub如要打印mshflex等
你可以自己对printer对象写代码
循环行、列赋值
然后
Me.PrintForm
打印整个窗体.打表格的就用莫依的方法吧.用Printer去打.