【发布时间】:2017-06-19 21:40:04
【问题描述】:
我在 Excel 中有一个包含几页的工作表。我想打印选定的页面,例如第 1 页、第 3 页、第 4 页和第 6 页。我可以在单张打印作业中执行此操作吗?
知道我可以使用以下命令打印页面:
ActiveSheet.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
ActiveSheet.PrintOut From:=1, To:=3, Copies:=3, Collate:=True
ActiveSheet.PrintOut From:=1, To:=4, Copies:=4, Collate:=True
ActiveSheet.PrintOut From:=1, To:=6, Copies:=6, Collate:=True
但是这样,我创建了很多打印作业。因此我看起来像 打印输出(第 1 页、第 3 页、第 4 页、...)
有关我的问题的更多信息: 我的工作表中有一个交货单:Excel delivery notes 其中一些在 C 列中没有条目。 (例如第 2 页)。我写了一个 Makro,它遍历分页符并检查每个页面上的 C 列:
Option Explicit
Sub LieferscheineDrucken()
Dim HPB As HPageBreak
Dim breakAdress As Integer
Dim pageNumber As Integer
Dim productNumber As Integer
Dim printCondition As Boolean
pageNumber = 1
printCondition = False
'Drucke Seite 1
For productNumber = 10 To 61
ActiveSheet.Cells(productNumber, "C").Select
If ActiveSheet.Cells(productNumber, "C").Value <> "" Then
printCondition = True
End If
Next
If printCondition = True Then
ActiveSheet.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End If
printCondition = False
pageNumber = pageNumber + 1
'Drucken der restlichen Seiten
For Each HPB In ActiveSheet.HPageBreaks
breakAdress = CInt(Mid(HPB.Location.Address, 4, 5))
'Teste, ob Lieferschein Einträge enthält
For productNumber = (breakAdress + 9) To (breakAdress + 60)
If ActiveSheet.Cells(productNumber, "C").Value <> "" Then
printCondition = True
End If
Next
If printCondition = True Then
ActiveSheet.PrintOut From:=pageNumber, To:=pageNumber, Copies:=1, Collate:=True
End If
pageNumber = pageNumber + 1
printCondition = False
Next
End Sub
但是这个宏为每一页发送了一个打印作业。如何只发送一个打印作业来打印相关页面?
感谢您的帮助!
【问题讨论】:
-
您可以对工作表执行此操作,但据我所知不能对页面执行此操作,因为打印输出中没有处理页面数组而不是序列的属性。一个技巧是将您的页面移动到工作表,然后尝试打印已将其名称保存在数组中的选定工作表:
ThisWorkbook.Worksheets(PrintCollection).PrintOut其中 PrintCollection 是工作表数组 -
是的,我找到了几种打印纸张集合的方法。复制解决方案似乎很烦人,但我要试试这个。谢谢。