根据一组单元格隐藏另一张纸上的行,然后打印

时间:2019-01-15 19:10:33

标签: excel vba

我有2个工作表“ Main”和“ CheckList”。

“主”工作表在单元格B14:B29和单元格E14:E21中具有选择(通过选择,我的意思是我所做的是,当激活这些单元格时,它们会自动用X填充)。我在页面上还有一个标签为“打印”的按钮

“检查清单”页面是检查清单。

当我按下标有“打印”的按钮时,我想  -根据在“主要”工作表上选择的框来过滤/隐藏“检查清单”上的行  -将“ CheckList”打印到默认打印机。

例如,如果Main B14具有X(我也可以使其不区分大小写吗?),则第6-10行将被隐藏,如果B15具有X,则106-116行将被隐藏。在我提到的范围内,每个X都会有不同的行集。

我也很好奇这是否可以使用组来完成,以便有人在不更改代码的情况下更容易地跟在我后面并将项目添加到检查清单中。

1 个答案:

答案 0 :(得分:1)

这是您的示例,隐藏行或对其进行分组并显示行级别1。

如果您为清单上的每个相关区域(通过公式|名称管理器)命名,则可以用Range("6:10")交换Range("RowsToBeHiddenByB14")。如果其他人以后在清单上的命名范围内添加了一些行,则代码仍然有效-否则他必须在Excel的名称管理器中调整该名称的范围。

Private Sub HideOrGroupSomeRows()
    Dim MainSheet As Worksheet
    Dim CheckSheet As Worksheet

    Set MainSheet = ActiveWorkbook.Sheets("Main")
    Set CheckSheet = ActiveWorkbook.Sheets("CheckList")

    ' Either just hide the rows:
    CheckSheet.Range("6:10").EntireRow.Hidden = _
        StrComp(MainSheet.Range("B14").Value, "x", vbTextCompare) = 0
    CheckSheet.Range("106:116").EntireRow.Hidden = _
        StrComp(MainSheet.Range("B15").Value, "x", vbTextCompare) = 0

    ' Or group them and show rowlevel 1:
    CheckSheet.UsedRange.ClearOutline
    With CheckSheet.Outline
        .AutomaticStyles = False
        .SummaryRow = xlAbove
        .SummaryColumn = xlLeft
    End With
    If StrComp(MainSheet.Range("B14").Value, "x", vbTextCompare) = 0 Then _
        CheckSheet.Range("6:10").EntireRow.Group
    If StrComp(MainSheet.Range("B15").Value, "x", vbTextCompare) = 0 Then _
        CheckSheet.Range("106:116").EntireRow.Group
    CheckSheet.Outline.ShowLevels RowLevels:=1

    Set MainSheet = Nothing
    Set CheckSheet = Nothing
End Sub