Printer.PaperSize = 9 If Printer.PaperSize <> 9 Then '如果无法改变则调用mySetPrinter uu = mySetPrinter(Printer.DeviceName, 1, 9, 0, 0) Printer.EndDoc End If Public Function mySetPrinter(prnName As String, Optional eOrientation As Integer, Optional iDmpaper As Integer, Optional iDmpaperLength As Single, Optional iDmpaperWidth As Single) As BooleanDim bDevMode() As Byte Dim bPrinterInfo2() As Byte Dim hPrinter As Long Dim lResult As Long Dim nSize As Long Dim sPrnName As StringDim dm As DEVMODE Dim olddm As DEVMODE Dim pd As PRINTER_DEFAULTS Dim pi2 As PRINTER_INFO_2 On Error GoTo err_proc
If pi2.pDevMode Then Call CopyMemory(bDevMode(1), ByVal pi2.pDevMode, Len(dm)) Else Call DocumentProperties(0&, hPrinter, sPrnName, bDevMode(1), 0&, DM_OUT_BUFFER) End If
With dm If eOrientation <> 0 Then '*设置新的走向 .dmOrientation = eOrientation .dmFields = DM_ORIENTATION End If If iDmpaper <> 0 And iDmpaper <> vbPRPSUser Then '*设纸张大小 .dmPaperSize = iDmpaper .dmFields = DM_PAPERSIZE End If If iDmpaper = vbPRPSUser Then '*用户自定义 .dmFields = DM_PAPERLENGTH Or DM_PAPERWIDTH .dmPaperLength = iDmpaperLength .dmPaperWidth = iDmpaperWidth End If End With
在win2000以上直接改是不行的,只能到打印机设置里去改默认选项才行。
有没有哪位大侠有解决的方法?
If Printer.PaperSize <> 9 Then '如果无法改变则调用mySetPrinter
uu = mySetPrinter(Printer.DeviceName, 1, 9, 0, 0)
Printer.EndDoc
End If
Public Function mySetPrinter(prnName As String, Optional eOrientation As Integer, Optional iDmpaper As Integer, Optional iDmpaperLength As Single, Optional iDmpaperWidth As Single) As BooleanDim bDevMode() As Byte
Dim bPrinterInfo2() As Byte
Dim hPrinter As Long
Dim lResult As Long
Dim nSize As Long
Dim sPrnName As StringDim dm As DEVMODE
Dim olddm As DEVMODE
Dim pd As PRINTER_DEFAULTS
Dim pi2 As PRINTER_INFO_2 On Error GoTo err_proc
'*获取打印机的设备名称
sPrnName = prnName
'*由于要调用SetPrinter,所以
'*如果是在NT下就要求PRINTER_ALL_ACCESS
pd.DesiredAccess = PRINTER_ALL_ACCESS
'*获取打印机句柄
If OpenPrinter(sPrnName, hPrinter, pd) Then
'*获取PRINTER_INFO_2结构要求的字节数
Call GetPrinter(hPrinter, 2&, 0&, 0&, nSize)
ReDim bPrinterInfo2(1 To nSize) As Byte
lResult = GetPrinter(hPrinter, 2, bPrinterInfo2(1), nSize, nSize)
Call CopyMemory(pi2, bPrinterInfo2(1), Len(pi2))
nSize = DocumentProperties(0&, hPrinter, sPrnName, 0&, 0&, 0)
ReDim bDevMode(1 To nSize)
If pi2.pDevMode Then
Call CopyMemory(bDevMode(1), ByVal pi2.pDevMode, Len(dm))
Else
Call DocumentProperties(0&, hPrinter, sPrnName, bDevMode(1), 0&, DM_OUT_BUFFER)
End If
Call CopyMemory(dm, bDevMode(1), Len(dm))
Call CopyMemory(olddm, bDevMode(1), Len(olddm))
With dm
If eOrientation <> 0 Then '*设置新的走向
.dmOrientation = eOrientation
.dmFields = DM_ORIENTATION
End If
If iDmpaper <> 0 And iDmpaper <> vbPRPSUser Then '*设纸张大小
.dmPaperSize = iDmpaper
.dmFields = DM_PAPERSIZE
End If
If iDmpaper = vbPRPSUser Then '*用户自定义
.dmFields = DM_PAPERLENGTH Or DM_PAPERWIDTH
.dmPaperLength = iDmpaperLength
.dmPaperWidth = iDmpaperWidth
End If
End With
Call CopyMemory(bDevMode(1), dm, Len(dm))
Call DocumentProperties(0&, hPrinter, sPrnName, _
bDevMode(1), bDevMode(1), DM_IN_BUFFER Or _
DM_OUT_BUFFER)
pi2.pDevMode = VarPtr(bDevMode(1))
lResult = SetPrinter(hPrinter, 2, pi2, 0&)
Call ClosePrinter(hPrinter)
mySetPrinter = True
Else
mySetPrinter = False
End If
Exit Function
err_proc:
mySetPrinter = False
End Function相关API声明未列