Excel VBA – 隐藏行的打印作业 – 适用于一些但不是全部的variables

这是我第一次在这个网站上发布,而我对VBA来说还是比较新的。 我试图在网上find答案,但找不到合适的解决scheme。

我想隐藏某些行和列只是为了打印,然后我想要vba代码取消隐藏相同的行/列。 列总是相同的,所以弄清楚是很容易的,但我正在努力与行。 我想出了如何隐藏列A中的空白单元格的行,这解决了我想要隐藏的行的一半,但不是所有的行。 我也想要隐藏A列中单元格的任何行:

  • “啤酒”
  • “红酒”
  • “酒”
  • “N / A BEV”
  • “在此行插入新产品”
  • “插入此行以上的新产品”
  • “总COG(平均)”

我的代码有BEER,WINE,LIQUOR和N / A BEV,但是对于更长的句子不起作用。 请注意,包含这些值的行将随着时间的推移而改变,所以我不能只列出我想隐藏的行,就像我为列做的那样。

有人可以指出我正确的方向来隐藏这些行吗? 代码如下:

Sub WorkbookBeforePrint_Called() Dim rw As Long Dim rng As Range Dim cell As Range Application.ScreenUpdating = False Set rng = Range("A1", Range("A" & Rows.Count).End(xlUp)) With rng.Columns(1) For Each cell In rng If .Cells(cell.Row, 1).Value = "INSERT NEW PRODUCTS BELOW THIS ROW" Then _ Parent.Rows(cell.Row).Hidden = True If .Cells(cell.Row, 1).Value = "INSERT NEW PRODUCTS ABOVE THIS ROW" Then _ .Parent.Rows(cell.Row).Hidden = True If .Cells(cell.Row, 1).Value = "TOTAL COG (AVERAGE)" Then _ .Parent.Rows(cell.Row).Hidden = True If .Cells(cell.Row, 1).Value = "BEER" Then _ .Parent.Rows(cell.Row).Hidden = True If .Cells(cell.Row, 1).Value = "WINE" Then _ .Parent.Rows(cell.Row).Hidden = True If .Cells(cell.Row, 1).Value = "LIQUOR" Then _ .Parent.Rows(cell.Row).Hidden = True If .Cells(cell.Row, 1).Value = "N/A BEV" Then _ .Parent.Rows(cell.Row).Hidden = True Next cell With ActiveSheet ActiveSheet.Outline.ShowLevels ColumnLevels:=3 ActiveSheet.Outline.ShowLevels RowLevels:=3 .Range("C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,V1,W1,X1,Y1,Z1,AA1,AE1,AF1,AG1,AH1,AI1,AJ1,AN1,AO1,AP1,AQ1,AR1,AS1,AW1,AX1,AY1").EntireColumn.Hidden = True On Error Resume Next .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True .PrintOut .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False On Error GoTo 0 .Range("C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,V1,W1,X1,Y1,Z1,AA1,AE1,AF1,AG1,AH1,AI1,AJ1,AN1,AO1,AP1,AQ1,AR1,AS1,AW1,AX1,AY1").EntireColumn.Hidden = False ActiveSheet.Outline.ShowLevels RowLevels:=3 ActiveSheet.Outline.ShowLevels ColumnLevels:=3 End With .EntireRow.Hidden = False End With Application.ScreenUpdating = True End Sub 

任何时候,我都有这样的麻烦,我尝试使用文本函数来消除转位错误。 尝试添加如下例所示的LEFT函数。

 If Left(.Cells(cell.Row, 1).Value, 25) = "INSERT NEW PRODUCTS BELOW" Then _ Rows(cell.Row).Hidden = True 

如果你愿意,你也可以使用相同的IF语句来捕获这两个长string。

 If Left(.Cells(cell.Row, 1).Value, 19) = "INSERT NEW PRODUCTS" Then _ Rows(cell.Row).Hidden = True 

它正在为我提供一个示例数据集,但让我知道这是否有助于您获得真实的数据。

这是一个稍微不同的方法。 这只是隐藏的一部分。

使用Select Case而不是IF

 Sub WorkbookBeforePrint2() Dim lastRow As Long Dim sheet As String Dim tempVal As String sheet = "Sheet1" 'Insert your sheet name here lastRow = Sheets(sheet).Range("A" & Rows.Count).End(xlUp).row For lRow = 2 To lastRow tempVal = Sheets(sheet).Cells(lRow, "A").Text Select Case tempVal Case Is = "" Rows(lRow).Hidden = True Case Is = "INSERT NEW PRODUCTS BELOW THIS ROW" Rows(lRow).Hidden = True Case Is = "INSERT NEW PRODUCTS ABOVE THIS ROW" Rows(lRow).Hidden = True Case Is = "TOTAL COG (AVERAGE)" Rows(lRow).Hidden = True Case Is = "BEER" Rows(lRow).Hidden = True Case Is = "WINE" Rows(lRow).Hidden = True Case Is = "LIQUOR" Rows(lRow).Hidden = True Case Is = "N/A BEV" Rows(lRow).Hidden = True End Select Next lRow End Sub 

之前后

谢谢大家的帮助! 包含在组/ oulines中的文本variables较长,但不包含较短的文本variables。 我只需要重新安排代码:

 Sub WorkbookBeforePrint(control As IRibbonControl) Dim lastRow As Long Dim tempVal As String Application.ScreenUpdating = False With ActiveSheet ActiveSheet.Outline.ShowLevels ColumnLevels:=3 ActiveSheet.Outline.ShowLevels RowLevels:=3 .Range("C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,V1,W1,X1,Y1,Z1,AA1,AE1,AF1,AG1,AH1,AI1,AJ1,AN1,AO1,AP1,AQ1,AR1,AS1,AW1,AX1,AY1").EntireColumn.Hidden = True lastRow = .Range("A" & Rows.Count).End(xlUp).Row For lRow = 2 To lastRow tempVal = .Cells(lRow, "A").Text Select Case tempVal Case Is = "" Rows(lRow).Hidden = True Case Is = "INSERT NEW PRODUCTS BELOW THIS ROW" Rows(lRow).Hidden = True Case Is = "INSERT NEW PRODUCTS ABOVE THIS ROW" Rows(lRow).Hidden = True Case Is = "TOTAL COG (AVERAGE)" Rows(lRow).Hidden = True Case Is = "BEER" Rows(lRow).Hidden = True Case Is = "WINE" Rows(lRow).Hidden = True Case Is = "LIQUOR" Rows(lRow).Hidden = True Case Is = "N/A BEV" Rows(lRow).Hidden = True End Select Next lRow .PrintOut Rows(lRow).Hidden = False .Range("C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,V1,W1,X1,Y1,Z1,AA1,AE1,AF1,AG1,AH1,AI1,AJ1,AN1,AO1,AP1,AQ1,AR1,AS1,AW1,AX1,AY1").EntireColumn.Hidden = False ActiveSheet.Outline.ShowLevels RowLevels:=3 ActiveSheet.Outline.ShowLevels ColumnLevels:=3 End With Application.ScreenUpdating = True End Sub