- ©«¤l
- 2
- ¥DÃD
- 2
- ºëµØ
- 0
- ¿n¤À
- 15
- ÂI¦W
- 0
- §@·~¨t²Î
- win 7
- ³nÅ骩¥»
- 7600
- ¾\ŪÅv
- 10
- ©Ê§O
- ¨k
- ¨Ó¦Û
- ·s¦Ë
- µù¥U®É¶¡
- 2012-7-25
- ³Ì«áµn¿ý
- 2015-7-22
|
[µo°Ý] DUPLEX-¦p¦ó±N¤Uz»yªkÀ³¥Î¦ÜVBA7
- Option Explicit
- Private Sub Command1_Click()
- Dim MyWord As Object
- Set MyWord = CreateObject("Word.application")
- MyWord.Visible = True
- MyWord.documents.Open FileName:=CurDir & "\¤u¨ã²MÂI³æ.doc"
- SetPrinterDuplex Printer.DeviceName, 2
- MyWord.PrintOut
- MyWord.documents.Close 'FileName:=CurDir & "\¤u¨ã²MÂI³æ.doc"
- ' SetPrinterDuplex Printer.DeviceName, 1
- MyWord.documents.Open FileName:=CurDir & "\¶Ô«e·|ij.doc"
- SetPrinterDuplex Printer.DeviceName, 2
- MyWord.PrintOut
- MyWord.documents.Close
- MyWord.documents.Open FileName:=CurDir & "\¶Ô°È¤À°tªí.doc"
- SetPrinterDuplex Printer.DeviceName, 2
- MyWord.PrintOut
- MyWord.documents.Close
-
-
- MyWord.Quit
- Set MyWord = Nothing
- End Sub
- ¼Ò²Õ:
- Option Explicit
- Public Type PRINTER_DEFAULTS
- pDatatype As Long
- pDevmode As Long
- DesiredAccess As Long
- End Type
- Public Type PRINTER_INFO_2
- pServerName As Long
- pPrinterName As Long
- pShareName As Long
- pPortName As Long
- pDriverName As Long
- pComment As Long
- pLocation As Long
- pDevmode As Long ' Pointer to DEVMODE
- pSepFile As Long
- pPrintProcessor As Long
- pDatatype As Long
- pParameters As Long
- pSecurityDescriptor As Long ' Pointer to SECURITY_DESCRIPTOR
- Attributes As Long
- Priority As Long
- DefaultPriority As Long
- StartTime As Long
- UntilTime As Long
- Status As Long
- cJobs As Long
- AveragePPM As Long
- End Type
- Public Type DEVMODE
- dmDeviceName As String * 32
- dmSpecVersion As Integer
- dmDriverVersion As Integer
- dmSize As Integer
- dmDriverExtra As Integer
- dmFields As Long
- dmOrientation As Integer
- dmPaperSize As Integer
- dmPaperLength As Integer
- dmPaperWidth As Integer
- dmScale As Integer
- dmCopies As Integer
- dmDefaultSource As Integer
- dmPrintQuality As Integer
- dmColor As Integer
- dmDuplex As Integer
- dmYResolution As Integer
- dmTTOption As Integer
- dmCollate As Integer
- dmFormName As String * 32
- dmUnusedPadding As Integer
- dmBitsPerPel As Integer
- dmPelsWidth As Long
- dmPelsHeight As Long
- dmDisplayFlags As Long
- dmDisplayFrequency As Long
- dmICMMethod As Long
- dmICMIntent As Long
- dmMediaType As Long
- dmDitherType As Long
- dmReserved1 As Long
- dmReserved2 As Long
- End Type
- Public Const DM_DUPLEX = &H1000&
- Public Const DM_IN_BUFFER = 8
- Public Const DM_OUT_BUFFER = 2
- Public Const PRINTER_ACCESS_ADMINISTER = &H4
- Public Const PRINTER_ACCESS_USE = &H8
- Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
- Public Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _
- PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)
- Public Declare Function ClosePrinter Lib "winspool.drv" _
- (ByVal hPrinter As Long) As Long
- Public Declare Function DocumentProperties Lib "winspool.drv" _
- Alias "DocumentPropertiesA" (ByVal hwnd As Long, _
- ByVal hPrinter As Long, ByVal pDeviceName As String, _
- ByVal pDevModeOutput As Long, ByVal pDevModeInput As Long, _
- ByVal fMode As Long) As Long
- Public Declare Function GetPrinter Lib "winspool.drv" Alias _
- "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
- pPrinter As Byte, ByVal cbBuf As Long, pcbNeeded As Long) As Long
- Public Declare Function OpenPrinter Lib "winspool.drv" Alias _
- "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _
- pDefault As PRINTER_DEFAULTS) As Long
- Public Declare Function SetPrinter Lib "winspool.drv" Alias _
- "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
- pPrinter As Byte, ByVal Command As Long) As Long
- Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
- (pDest As Any, pSource As Any, ByVal cbLength As Long)
-
- ' ==================================================================
- ' SetPrinterDuplex.
- '
- ' Programmatically set the Duplex flag for the specified default properties
- ' of the printer driver.
- '
- ' Returns: True on success and False on error. An error also
- ' displays a message box. This message box is displayed for information
- ' only. You must modify the code to support better error
- ' handling in your production application.
- '
- ' Parameters:
- ' sPrinterName - The name of the printer to be used.
- '
- ' nDuplexSetting - One of the following standard settings:
- ' 1 = None
- ' 2 = Duplex on long edge (book)
- ' 3 = Duplex on short edge (legal)
- '
- ' ==================================================================
- Public Function SetPrinterDuplex(ByVal sPrinterName As String, _
- ByVal nDuplexSetting As Long) As Boolean
- Dim hPrinter As Long
- Dim pd As PRINTER_DEFAULTS
- Dim pinfo As PRINTER_INFO_2
- Dim dm As DEVMODE
-
- Dim yDevModeData() As Byte
- Dim yPInfoMemory() As Byte
- Dim nBytesNeeded As Long
- Dim nRet As Long, nJunk As Long
-
- On Error GoTo cleanup
-
- If (nDuplexSetting < 1) Or (nDuplexSetting > 3) Then
- MsgBox "Error: dwDuplexSetting is incorrect."
- Exit Function
- End If
-
- pd.DesiredAccess = PRINTER_ALL_ACCESS
- nRet = OpenPrinter(sPrinterName, hPrinter, pd)
- If (nRet = 0) Or (hPrinter = 0) Then
- If Err.LastDllError = 5 Then
- MsgBox "Access denied -- See the article for more info."
- Else
- MsgBox "Cannot open the printer specified " & _
- "(make sure the printer name is correct)."
- End If
- Exit Function
- End If
-
- nRet = DocumentProperties(0, hPrinter, sPrinterName, 0, 0, 0)
- If (nRet < 0) Then
- MsgBox "Cannot get the size of the DEVMODE structure."
- GoTo cleanup
- End If
-
- ReDim yDevModeData(nRet + 100) As Byte
- nRet = DocumentProperties(0, hPrinter, sPrinterName, _
- VarPtr(yDevModeData(0)), 0, DM_OUT_BUFFER)
- If (nRet < 0) Then
- MsgBox "Cannot get the DEVMODE structure."
- GoTo cleanup
- End If
-
- Call CopyMemory(dm, yDevModeData(0), Len(dm))
-
- If Not CBool(dm.dmFields And DM_DUPLEX) Then
- MsgBox "You cannot modify the duplex flag for this printer " & _
- "because it does not support duplex or the driver " & _
- "does not support setting it from the Windows API."
- GoTo cleanup
- End If
-
- dm.dmDuplex = nDuplexSetting
- Call CopyMemory(yDevModeData(0), dm, Len(dm))
-
- nRet = DocumentProperties(0, hPrinter, sPrinterName, _
- VarPtr(yDevModeData(0)), VarPtr(yDevModeData(0)), _
- DM_IN_BUFFER Or DM_OUT_BUFFER)
- If (nRet < 0) Then
- MsgBox "Unable to set duplex setting to this printer."
- GoTo cleanup
- End If
-
- Call GetPrinter(hPrinter, 2, 0, 0, nBytesNeeded)
- If (nBytesNeeded = 0) Then GoTo cleanup
-
- ReDim yPInfoMemory(nBytesNeeded + 100) As Byte
- nRet = GetPrinter(hPrinter, 2, yPInfoMemory(0), nBytesNeeded, nJunk)
- If (nRet = 0) Then
- MsgBox "Unable to get shared printer settings."
- GoTo cleanup
- End If
-
- Call CopyMemory(pinfo, yPInfoMemory(0), Len(pinfo))
- pinfo.pDevmode = VarPtr(yDevModeData(0))
- pinfo.pSecurityDescriptor = 0
- Call CopyMemory(yPInfoMemory(0), pinfo, Len(pinfo))
-
- nRet = SetPrinter(hPrinter, 2, yPInfoMemory(0), 0)
- If (nRet = 0) Then
- MsgBox "Unable to set shared printer settings."
- End If
-
- SetPrinterDuplex = CBool(nRet)
- cleanup:
- If (hPrinter <> 0) Then Call ClosePrinter(hPrinter)
- End Function
½Æ»s¥N½X |
|