как печатать определенные листы в VBA?

#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