![](/img/trans.png)
[英]Print specific worksheets in Excel, with different print areas and print setup using VBA
[英]How to use Checkbox to print worksheets as one file Excel VBA
我在Excel工作簿中有11個工作表(Sheet1,Sheet2,Sheet3等)的列表。 我需要能夠從該列表中選擇一組要作為一個文件打印的圖紙。 工作表的名稱不會更改。
因此,如果我想一次打印所有11個,我會輸入:
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4","Sheet5","Sheet6","Sheet7","Sheet8","Sheet9","Sheet10","Sheet11",).PrintOut
但我要選擇11的任意組合以打印出來。
ThisWorkbook.Sheets(Array("Sheet3", "Sheet5", "Sheet7,"Sheet9","Sheet11").PrintOut
我的目標是使工作簿變得易於使用,因此我設置了復選框,如果復選框控制單元為TRUE,則將取消隱藏這些特定工作表。 快速說明:
If Sheets("ControlSheet").Range("A1").Value = TRUE then
Sheets("Sheet1").Visible = TRUE
'where ControlSheet Range A1 is the cell linked to the checkbox for that sheet.
我希望能夠使用這些相同的復選框來選擇要打印的紙張。
我的特定問題:我想基於工作表中的單元格值在VBA中生成一個動態數組,並能夠使用該數組將特定的工作表打印為一個文件。
如果您認為我可能對我的需求過於復雜,可以接受其他建議。 感謝所有幫助!
因此,僅打印該11張清單中的非隱藏圖紙?
Sub PrintVisibleSheets()
Dim arr, s, lst, sep
arr = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", _
"Sheet6", "Sheet7", "Sheet8", "Sheet9", "Sheet10", "Sheet11")
For Each s In arr
If ThisWorkbook.Sheets(s).Visible Then
lst = lst & sep & s
sep = "|" 'add separator after first pass
End If
Next s
'any visible sheets?
If Len(lst) > 0 Then ThisWorkbook.Sheets(Split(lst, "|")).PrintOut
End Sub
最終代碼如下! 希望這可以幫助別人!
Sub PrintVisibleSheets()
If Sheets("ControlSheet").Range("C32").Value = True Then
Sheets("Sheet1").Visible = True
End If
'next
If Sheets("ControlSheet").Range("C33").Value = True Then
Sheets("Sheet2").Visible = True
End If
'next
If Sheets("ControlSheet").Range("C34").Value = True Then
Sheets("Sheet3").Visible = True
End If
'next
If Sheets("ControlSheet").Range("C35").Value = True Then
Sheets("Sheet4").Visible = True
End If
'next
If Sheets("ControlSheet").Range("C36").Value = True Then
Sheets("Sheet5").Visible = True
End If
'next
If Sheets("ControlSheet").Range("C37").Value = True Then
Sheets("Sheet6").Visible = True
End If
'next
If Sheets("ControlSheet").Range("C38").Value = True Then
Sheets("Sheet7").Visible = True
End If
'next
''''''''''''
'''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Hide Sheets if False
If Sheets("ControlSheet").Range("C32").Value = True Then
Sheets("Sheet1").Visible = True
End If
'next
If Sheets("ControlSheet").Range("C33").Value = False Then
Sheets("Sheet2").Visible = False
End If
'next
If Sheets("ControlSheet").Range("C34").Value = False Then
Sheets("Sheet3").Visible = False
End If
'next
If Sheets("ControlSheet").Range("C35").Value = False Then
Sheets("Sheet4").Visible = False
End If
'next
If Sheets("ControlSheet").Range("C36").Value = False Then
Sheets("Sheet5").Visible = False
End If
'next
If Sheets("ControlSheet").Range("C37").Value = False Then
Sheets("Sheet6 ").Visible = False
End If
'next
If Sheets("ControlSheet").Range("C42").Value = False Then
Sheets("Sheet7").Visible = False
End If
Dim arr, s, lst, sep
arr = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6", "Sheet7")
For Each s In arr
If ThisWorkbook.Sheets(s).Visible Then
lst = lst & sep & s
sep = "|"
End If
Next s
If Len(lst) > 0 Then
Application.Dialogs(xlDialogPrinterSetup).Show
ThisWorkbook.Sheets("Sheet1").PageSetup.PrintQuality = 600
ThisWorkbook.Sheets("Sheet2").PageSetup.PrintQuality = 600
ThisWorkbook.Sheets("Sheet3").PageSetup.PrintQuality = 600
ThisWorkbook.Sheets("Sheet4").PageSetup.PrintQuality = 600
ThisWorkbook.Sheets("Sheet5").PageSetup.PrintQuality = 600
ThisWorkbook.Sheets("Sheet6").PageSetup.PrintQuality = 600
ThisWorkbook.Sheets("Sheet7").PageSetup.PrintQuality = 600
ThisWorkbook.Sheets(Split(lst, "|")).PrintOut
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.