如何使用Checkbox将工作表打印为一个文件Excel VBA

问题描述 投票:0回答:2

我在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中引用它作为我的打印数组,但我得到“下标超出范围”错误

我的具体问题:我想基于工作表中的单元格值在VBA中生成动态数组,并且能够使用该数组将特定工作表打印为一个文件。

如果您认为我可能会因为我需要而过于复杂,那么对其他建议非常开放。感谢任何和所有的帮助!

arrays excel vba excel-vba
2个回答
0
投票

那么只需打印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

0
投票

最终代码如下!希望这可以帮助别人!

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
© www.soinside.com 2019 - 2024. All rights reserved.