【问题标题】:How to use VB Printer object in VBA如何在 VBA 中使用 VB 打印机对象
【发布时间】:2011-09-16 16:07:35
【问题描述】:

我正在尝试使用 VBA 代码打印到 Epson 打印机,但没有成功。使用 VB6,我有以下代码,它工作得很好:

Printer.Print "Hello"
Printer.EndDoc 

我的问题是我在 VBA 中看不到 Printer 对象(使用 MS Access 宏)。 我必须包含特定的参考吗?如果是,那会是什么?这样我就在同一台机器上安装了 VB6 运行时。

【问题讨论】:

标签: ms-access vba printing


【解决方案1】:

您不能从 MS Access 执行此操作,但 KB154078 显示的 VBA 代码可以使用 Win32 API 直接与打印假脱机程序通信并将原始数据发送到打印机:

  Option Explicit

  Private Type DOCINFO
      pDocName As String
      pOutputFile As String
      pDatatype As String
  End Type

  Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long) As Long
  Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long) As Long
  Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long) As Long
  Private Declare Function OpenPrinter Lib "winspool.drv" Alias _
     "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _
      ByVal pDefault As Long) As Long
  Private Declare Function StartDocPrinter Lib "winspool.drv" Alias _
     "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
     pDocInfo As DOCINFO) As Long
  Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long) As Long
  Private Declare Function WritePrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long, pBuf As Any, ByVal cdBuf As Long,  _
     pcWritten As Long) As Long

  Private Sub Command1_Click()
      Dim lhPrinter As Long
      Dim lReturn As Long
      Dim lpcWritten As Long
      Dim lDoc As Long
      Dim sWrittenData As String
      Dim MyDocInfo As DOCINFO
      lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)
      If lReturn = 0 Then
          MsgBox "The Printer Name you typed wasn't recognized."
          Exit Sub
      End If
      MyDocInfo.pDocName = "AAAAAA"
      MyDocInfo.pOutputFile = vbNullString
      MyDocInfo.pDatatype = vbNullString
      lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
      Call StartPagePrinter(lhPrinter)
      sWrittenData = "How's that for Magic !!!!" & vbFormFeed
      lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, _
         Len(sWrittenData), lpcWritten)
      lReturn = EndPagePrinter(lhPrinter)
      lReturn = EndDocPrinter(lhPrinter)
      lReturn = ClosePrinter(lhPrinter)
  End Sub

KB175083 中给出了另一个示例。

【讨论】:

  • Win32 API 对我不起作用,因为我需要格式化要打印的文本,例如更改字体粗细等。我最终采用了一种解决方法:我创建了一个 VB6 ActiveX DLL 和我在我的 VBA 脚本中使用它。但问题是我需要在我的客户端机器上安装 VB6 运行时。
  • @rsleiman,您也可以使用 win32 api 更改字体和内容,查找 SelectObjectCreateFont
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多