#excel #vba #printing
Вопрос:
У меня есть листы A B C, которые я хочу распечатать. Однако в настоящее время я могу распечатать только один из листов, мне было интересно, знаете ли вы, что с ним может быть не так ?
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
If sh.Name = "a" Then
sh.PrintOut Preview:=False, ActivePrinter:="----", PrintToFile:=True, PrToFileName:=PSFileName
End If
Next sh
Мне было интересно, как я мог бы добавить в него листы B и C ? Я думал, что все, что мне нужно было сделать, это что-то вроде:
sh.name : массив(«A», «B»…), но это заставило меня столкнуться с ошибкой. Было интересно, были ли у кого-нибудь подобные проблемы в прошлом?
Спасибо!
Ответ №1:
Если вы хотите напечатать все 3 в одном задании на печать:
ThisWorkbook.Worksheets(Array("SheetA", "SheetB", "SheetC")).PrintOut copies:=1, _
collate:=True, IgnorePrintAreas:=False
Ответ №2:
То, что вы ищете, это:
If sh.Name = "A" or sh.Name = "B" or sh.Name = "C" Then
Вот как выглядит ваш код с такой реализацией:
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
If sh.Name = "A" or sh.Name = "B" or sh.Name = "C" Then
sh.PrintOut Preview:=False, ActivePrinter:="----", PrintToFile:=True, PrToFileName:=PSFileName
End If
Next sh
Если вам нужен массив, который вы могли бы использовать:
Dim SheetList() as Variant
SheetList = Array( Sheets("A"), Sheets("B"), Sheets("C"))
Которые вы бы реализовали, как:
Dim sh As Variant
Dim SheetList() As Variant
SheetList = Array(Sheets("A"), Sheets("B"), Sheets("C"))
For Each sh In SheetList
sh.PrintOut Preview:=False, ActivePrinter:="----", PrintToFile:=True, PrToFileName:=PSFileName
Next sh
Ответ №3:
Для этого вы можете использовать a Select Case
.
For Each sh In ThisWorkbook.Worksheets
Select Case UCase$(sh.Name)
Case "A", "B", "C"
' print code goes here
End Select
Next