有关打印时选择打印机.

SeeSunSet 2003-04-13 07:18:44
由于系统需要,系统默认打印机为打印机A,还装有一打印机B,本人的VB程序中的DATAREPORT需要用打印机B,在执行时如果用rpt.show,从show中打印则可以选择打印机B进行正确打印,现不想出现show框,直接用rpt.PrintReport False,rptAllPages
,可是如何在进行打印之前将打印机B设成本报表需要打印的打印机呢?
dim pr as printer
For each pr in printers
if pr.devicename='Epson Lq-300K' then
set printer=pr
exit for
end if
next
如此只能得到需要用的打印机B,但无法跟报表联系上啊.有何新解呢?谢谢大家..
...全文
213 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xysophie 2003-04-16
  • 打赏
  • 举报
回复
up
lihonggen0 2003-04-15
  • 打赏
  • 举报
回复
***************打印机***************************
取得打印机:
If Printers.Count < 1 Then
MsgBox "系统没有安装打印机!", vbCritical, App.Title
Unload Me
Exit Sub
End If

Dim Prns As Printer
For Each Prns In Printers
List1.AddItem Prns.DeviceName
Next
List1.ListIndex = 0

设定默认打印机:
Set Printer = Printers(List1.ListIndex)
SeeSunSet 2003-04-15
  • 打赏
  • 举报
回复
楼上的朋友们,你们都误解啦.我并非得不到打印机对象,麻烦你们再仔细看看我的问题.(后面那个第四回复).原因是这样的.:Epson lq-570装在98下就可以有自定义纸张(custom)选项,但在WIN2K下面则就没有了.而在VB的DATAREPROT中,纸张的大小取决系统默认打印机的纸型设置.没办法,我只有在机中装了一台CANON SP400,这个驱动是有CUSTOM选项的 ,把它设置成系统的默认打印机,将报表SHOW的时候再选择EPSON这个打印机来打印,这样报表就可以按照CUSTOM的纸张大小打印出来.现在我不想SHOW这个报表,想直接用代码来完成打印, RPT.printerreport False ,rptAllPages 这个方法不会SHOW报表出来.由于默认打印机是CANON才能保证纸型,可是又要打印到EPSON上面.用set printer只能把某个打印机赋给printer对象,但是打印的时候,还是打印到Canon上面去了..哪位有用API 将另一台打印机换成默认打印机的.我想在报表刷新后再用代码将系统的默认打印机换掉,打印到它上面之后再换回来.不知道可不可行.......


AndyZhang_ 2003-04-14
  • 打赏
  • 举报
回复
意见同上,去试试吧.
qiqif 2003-04-14
  • 打赏
  • 举报
回复
set printer=printers(0) '将预设打印机设成第一种打印机
set printer=printers(1) '将预设打印机设成第二种打印机

网络老男孩了 2003-04-14
  • 打赏
  • 举报
回复
Dim prtPrinter As Printer
Dim iPrinter As Integer
Dim sPrinter As String
For Each prtPrinter In Printers
sPrinter = prtPrinter.DeviceName & " on "
If Right$(prtPrinter.Port, 1) = ":" Then
sPrinter = sPrinter & Left$(prtPrinter.Port, Len(prtPrinter.Port) - 1)
Else
sPrinter = sPrinter & prtPrinter.Port
End If
cboPrinter.AddItem sPrinter'cboPrinter是combobox
cboPrinter.ItemData(cboPrinter.NewIndex) = iPrinter
If prtPrinter.DeviceName = Printer.DeviceName And Printer.Port = prtPrinter.Port Then
cboPrinter.ListIndex = cboPrinter.NewIndex
mvarPrinter = iPrinter
End If
iPrinter = iPrinter + 1
Next
SeeSunSet 2003-04-14
  • 打赏
  • 举报
回复
If DE1.Connection1.State = 0 Then DE1.Connection1.Open
DE1.Commands.Item("send_分组").CommandText = "SQL 语句"
DE1.Commands.Item("send_分组").Execute
If DE1.rssend_分组.State = 0 Then DE1.rssend_分组.Open
DE1.rssend_分组.Requery
rptSend.Refresh
Set Printer = Printers(1)
rptSend.PrintReport False, rptRangeAllPages

我的代码如上,我试过了,可是它始终还是打印到系统默认的打印机上.实在没办法啊.因为printer被指定为了新的打印机,此时如何用方法:
printer.print "content"
printer.endDoc
的方法来打印,的确可以打印到一个新指定的打印机,但是用报表打印,报表对象根本无法跟printer对象发生任何关系.它并不是指定打印输出到printer这个打印机.它还是认了系统默认的打印机....探索中........


809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧