首页 文章

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

提问于
浏览
0

我在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中引用它作为我的打印数组,但是我得到"subscript out of range"错误

我的具体问题:我想基于工作表中的单元格值在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
    

相关问题