我有两个工作表"Main“和"CheckList”。
“主”工作表在单元格B14:B29和单元格E14:E21中进行了选择(我的意思是,我所做的选择是为了在激活这些单元格时自动填充X)。我在页面上还有一个标记为"Print“的按钮
"CheckList“页面是一个检查表。
当我按下标记为" print“的按钮时,根据在"Main”工作表上选择的方框,过滤/隐藏"CheckList“上的行-将"CheckList”打印到默认打印机。
例如,如果主B14有一个X(我也可以在不区分大小写的地方使用它吗?)那么第6-10行将被隐藏,如果B15有一个X,那么第106-116行将被隐藏。对于我提到的范围内的每个X,它将是一组不同的行。
我也很好奇这是否可以使用组来完成,这样别人就可以更容易地在不更改代码的情况下将项目添加到检查表中。
发布于 2019-01-16 03:38:05
下面是您的示例,要么隐藏行,要么对行进行分组并显示行级1。
如果您为清单上的每个相关区域指定了名称(通过公式|名称管理器),则可以通过Range("RowsToBeHiddenByB14")交换Range("6:10")。如果其他人后来在检查表中的命名范围内添加了一些行,代码仍然有效-否则他必须在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 Subhttps://stackoverflow.com/questions/54205384
复制相似问题