[英]How do I print all sheets using VBA in Excel? My code doesn't behave like I think it should
我有一个 Excel 工作簿,只有一张开始。 然后,有一个宏从该工作表中获取数据并为第一张工作表中的每一行创建一个新工作表。 它创建的工作表数量是动态的,并且会随着时间的推移或根据我们设置的过滤器而增加或减少。 例如,假设它现在产生大约 20 个新工作表。
我有另一个宏,旨在打印所有新创建的工作表,但这就是我遇到问题的地方。 宏首先隐藏第一张纸,然后它应该是 select 所有可见纸, select 所有这些纸上的范围,最后打印选择。
(旁注:我通常使用“选择”而不是工作表或工作簿,因为打印区域不会在纸上居中。)
在我的脑海中,这应该为每张纸打印一页,但我无法让它正常运行。 当我通过手动操作 go 记录宏时,一切正常——打印命令显示它要打印 19 页。 太好了,但是当我播放相同的宏时。 它只想打印任何处于活动状态的工作表,而不是 rest? 任何想法:这是我的代码:
'Declare variables
Dim ws As Worksheet
'Temporarily hide the Customer List so the rest of the workbook can print
Worksheets("Customer List").Visible = False
'Select all visible sheets
For Each ws In Sheets
If ws.Visible Then ws.Select False
Next
'Select the range of cells on whatever sheets is active
Range("A1:J49").Select
'Promp user for which printer to use
Application.Dialogs(xlDialogPrinterSetup).Show
'Page setup
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.2)
.TopMargin = Application.InchesToPoints(0.25)
.BottomMargin = Application.InchesToPoints(0.25)
.HeaderMargin = Application.InchesToPoints(0.05)
.FooterMargin = Application.InchesToPoints(0.05)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperLetter
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
'Print all visible sheets
Selection.PrintOut Copies:=1, Collate:=True
'Unhide Customer List after printing and select
Worksheets("Customer List").Visible = True
Worksheets("Customer List").Select
Range("A1").Select
End Sub
我自己还是个新手,但如果我要尝试这个,我会根据张数将它设置在 For/Next 循环和 go 中。 如果您的“客户列表”是第一页,那么您只需绕过它。
AllSheets = Application.Sheets.Count
Application.Dialogs(xlDialogPrinterSetup).Show
For i=2 to AllSheets '//Assuming sheet 1 is the Customer List
Sheets(i).Range("A1:J49").Select
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.2)
.TopMargin = Application.InchesToPoints(0.25)
.BottomMargin = Application.InchesToPoints(0.25)
.HeaderMargin = Application.InchesToPoints(0.05)
.FooterMargin = Application.InchesToPoints(0.05)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperLetter
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
'Print it
Selection.PrintOut Copies:=1
Next
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.