Do I need to select a specific Reference to make printers p开发者_开发问答roperty visible? Which one?
The Excel VBA Worksheet object has a PrintPreview method. You can select your printer from the Preview Screen if the default is not desirable. Also, the PageSetup object on the Worksheet has lots of properties to prepare the worksheet for printing.
Here's an example:
Public Sub PrintActiveSheet_S()
Dim worksheetPrintable As Worksheet
Dim iLastDataRow As Integer
Dim iRowCount As Integer
Dim iPrintAreaEndRow As Integer
Dim origScreenUpdating As Boolean
Dim origCalcMode As Integer
On Error GoTo eh
Set worksheetPrintable = ActiveSheet
worksheetPrintable.PageSetup.PrintArea = "$A$1:$AD$" & iPrintAreaEndRow
'Speed up printing setup 'http://stackoverflow.com/questions/230382/how-to-print-faster-in-excel-vba
origScreenUpdating = Application.ScreenUpdating
Application.ScreenUpdating = False
origCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
With ActiveSheet.PageSetup
If Not .BlackAndWhite = False Then .BlackAndWhite = False
If Not .BottomMargin = Application.InchesToPoints(0.25) Then .BottomMargin = Application.InchesToPoints(0.25)
If Not .CenterFooter = "Page &P of &N" Then .CenterFooter = "Page &P of &N"
If Not .CenterHeader = "" Then .CenterHeader = ""
If Not .CenterHorizontally = True Then .CenterHorizontally = True
If Not .CenterVertically = False Then .CenterVertically = False
If Not .Draft = False Then .Draft = False
If Not .FirstPageNumber = xlAutomatic Then .FirstPageNumber = xlAutomatic
If Not .FitToPagesTall = 50 Then .FitToPagesTall = 50
If Not .FitToPagesWide = 1 Then .FitToPagesWide = 1
If Not .TopMargin = Application.InchesToPoints(0.25) Then .TopMargin = Application.InchesToPoints(0.25)
If Not .FooterMargin = Application.InchesToPoints(0.25) Then .FooterMargin = Application.InchesToPoints(0.25)
If Not .HeaderMargin = Application.InchesToPoints(0.25) Then .HeaderMargin = Application.InchesToPoints(0.25)
If Not .LeftMargin = Application.InchesToPoints(0.25) Then .LeftMargin = Application.InchesToPoints(0.25)
If Not .LeftFooter = "" Then .LeftFooter = ""
If Not .LeftHeader = "" Then .LeftHeader = ""
If Not .Order = xlDownThenOver Then .Order = xlDownThenOver
If Not .Orientation = xlLandscape Then .Orientation = xlLandscape
If Not .PaperSize = xlPaperLegal Then .PaperSize = xlPaperLegal
If Not .PrintComments = xlPrintNoComments Then .PrintComments = xlPrintNoComments
If Not .PrintGridlines = False Then .PrintGridlines = False
If Not .PrintHeadings = False Then .PrintHeadings = False
If Not .PrintTitleColumns = "" Then .PrintTitleColumns = ""
If Not .PrintTitleRows = "$3:$5" Then .PrintTitleRows = "$3:$5"
If Not .RightFooter = "" Then .RightFooter = ""
If Not .RightHeader = "" Then .RightHeader = ""
If Not .RightMargin = Application.InchesToPoints(0.25) Then .RightMargin = Application.InchesToPoints(0.25)
If Not .RightFooter = Now Then .RightFooter = Now
If Not .Zoom = False Then .Zoom = False
End With
worksheetPrintable.PrintPreview
GoTo func_exit
eh:
gEStruc.iErrNum = Err.Number
gEStruc.sErrorDescription = Err.Description
gEStruc.sErrorSource = Err.Source
m_rc = iErrorHandler_F(gEStruc)
If m_rc = CMD_RETRY Then
Resume
End If
func_exit:
Application.ScreenUpdating = origScreenUpdating
Application.Calculation = origCalcMode
Exit Sub
End Sub
Application.Printers is not available in Excel, though it is in Access.
精彩评论