在 excel vba 中选择纸张尺寸(非默认尺寸)
Choosing paper size (NOT DEFAULT sizes) in excel vba
我有兄弟QL-720NW标签打印机,想打印一些标签。
打印机有一卷宽度为 62mm
当我尝试向其打印内容时,我需要设置页面并定义页面大小。
如果页面大小不正确(宽度超过 62 毫米),打印机将不会打印任何内容。
现在我的问题是我正在使用 excel 和宏将一些数据发送到打印机。
我知道有一些预定义的页面大小 (http://msdn.microsoft.com/en-us/library/office/ff834612%28v=office.15%29.aspx) 可以使用,但在我的情况下,所有这些都太大了。
这是我目前拥有的代码示例:
Sub CreateTestCode()
' setting printer
Dim objPrinter As String
objPrinter = ActivePrinter
ActiveSheet.PageSetup.PrintArea = Range("Img")
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
.PrintHeadings = False
.PrintGridlines = False
.RightMargin = Application.InchesToPoints(0.39)
.LeftMargin = Application.InchesToPoints(0.39)
.TopMargin = Application.InchesToPoints(0.39)
.BottomMargin = Application.InchesToPoints(0.39)
.PaperSize = xlPaperUser
.Orientation = xlLandscape
.Draft = False
End With
Dim printerName As String
printerName = "BrotherQL720NW Labelprinter on XYZ"
ActiveSheet.PrintOut Preview:=True, ActivePrinter:=printerName
ActivePrinter = objPrinter
End Sub
现在我有3个问题:
1:在 .PaperSize = xlPaperUser 处,我收到运行时错误“1004”。无法设置 PageSetup class 的 PaperSize。这里有什么问题?
2:如何将纸张尺寸设置为 62mm x 50mm?
3:即使我将打印区域定义为 Range("Img") 它仍然打印整个 sheet ?!?
顺便说一句,我是 vba 的新手,这是我第一次尝试使用 vba。
问题 1
xlPaperUser
是一个用户定义的纸张尺寸,它被分配了一个常量值 256。如果没有定义它,它可能会抛出一个错误。
问题二
无法在 Excel、 中创建自定义纸张尺寸,但是 您可以在许多打印机上创建自定义纸张尺寸。在页面设置下,单击选项按钮。这将调出打印机属性对话框。使用此对话框将您的纸张尺寸更改为自定义尺寸,然后单击“确定”。
然后在 Excel 运行 这个:MsgBox PageSetup.PaperSize
。这将为您提供分配给 Excel 中该纸张尺寸的新常量值。然后将宏中的 .PaperSize = xlPaperUser
更改为 .PaperSize =
以及您刚刚找到的常数。
问题 3
.PrintArea
接受字符串输入,而不是范围。将您的行更改为 ActiveSheet.PageSetup.PrintArea = Range("Img").Address
,它应该可以工作。
我想补充一点。
您还可以添加此行 Application.Dialogs(xlDialogPageSetup).Show
例如:
Sub printGraphs()
Application.Dialogs(xlDialogPrinterSetup).Show
Application.Dialogs(xlDialogPageSetup).Show
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintQuality = 1200
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.FitToPagesWide = 1
.FitToPagesTall = False
.PrintErrors = xlPrintErrorsDisplayed
End With
ActiveWorkbook.PrintOut From:=1, To:=3, Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End Sub
这会提示用户根据所选打印机选择页面大小。我用它来同时打印一个包含多个选项卡的工作簿,并且只打印我想要的选项卡。
我有兄弟QL-720NW标签打印机,想打印一些标签。
打印机有一卷宽度为 62mm
当我尝试向其打印内容时,我需要设置页面并定义页面大小。 如果页面大小不正确(宽度超过 62 毫米),打印机将不会打印任何内容。
现在我的问题是我正在使用 excel 和宏将一些数据发送到打印机。 我知道有一些预定义的页面大小 (http://msdn.microsoft.com/en-us/library/office/ff834612%28v=office.15%29.aspx) 可以使用,但在我的情况下,所有这些都太大了。
这是我目前拥有的代码示例:
Sub CreateTestCode()
' setting printer
Dim objPrinter As String
objPrinter = ActivePrinter
ActiveSheet.PageSetup.PrintArea = Range("Img")
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
.PrintHeadings = False
.PrintGridlines = False
.RightMargin = Application.InchesToPoints(0.39)
.LeftMargin = Application.InchesToPoints(0.39)
.TopMargin = Application.InchesToPoints(0.39)
.BottomMargin = Application.InchesToPoints(0.39)
.PaperSize = xlPaperUser
.Orientation = xlLandscape
.Draft = False
End With
Dim printerName As String
printerName = "BrotherQL720NW Labelprinter on XYZ"
ActiveSheet.PrintOut Preview:=True, ActivePrinter:=printerName
ActivePrinter = objPrinter
End Sub
现在我有3个问题:
1:在 .PaperSize = xlPaperUser 处,我收到运行时错误“1004”。无法设置 PageSetup class 的 PaperSize。这里有什么问题?
2:如何将纸张尺寸设置为 62mm x 50mm?
3:即使我将打印区域定义为 Range("Img") 它仍然打印整个 sheet ?!?
顺便说一句,我是 vba 的新手,这是我第一次尝试使用 vba。
问题 1
xlPaperUser
是一个用户定义的纸张尺寸,它被分配了一个常量值 256。如果没有定义它,它可能会抛出一个错误。
问题二
无法在 Excel、 中创建自定义纸张尺寸,但是 您可以在许多打印机上创建自定义纸张尺寸。在页面设置下,单击选项按钮。这将调出打印机属性对话框。使用此对话框将您的纸张尺寸更改为自定义尺寸,然后单击“确定”。
然后在 Excel 运行 这个:MsgBox PageSetup.PaperSize
。这将为您提供分配给 Excel 中该纸张尺寸的新常量值。然后将宏中的 .PaperSize = xlPaperUser
更改为 .PaperSize =
以及您刚刚找到的常数。
问题 3
.PrintArea
接受字符串输入,而不是范围。将您的行更改为 ActiveSheet.PageSetup.PrintArea = Range("Img").Address
,它应该可以工作。
我想补充一点。
您还可以添加此行 Application.Dialogs(xlDialogPageSetup).Show
例如:
Sub printGraphs()
Application.Dialogs(xlDialogPrinterSetup).Show
Application.Dialogs(xlDialogPageSetup).Show
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintQuality = 1200
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.FitToPagesWide = 1
.FitToPagesTall = False
.PrintErrors = xlPrintErrorsDisplayed
End With
ActiveWorkbook.PrintOut From:=1, To:=3, Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End Sub
这会提示用户根据所选打印机选择页面大小。我用它来同时打印一个包含多个选项卡的工作簿,并且只打印我想要的选项卡。