我正在尝试使用按钮在另一张纸中隐藏几行。目的是在需要时使用按钮隐藏行,以使这些行的格式和内容保持不变。目前,我删除了那些会破坏格式并需要重做的行。
我也不了解VBA,所以请原谅我的无知。
Sub Macro()
Rows("7:9").Select
If Rows("7:9").Hidden=True Then
Selection.EntireRow.Hidden=False
Else
Selection.EntireRowRow.Hidden=True
End If
End Sub
答案 0 :(得分:1)
您的代码将隐藏/取消隐藏活动表上的行。
要在特定工作表上执行此操作,您需要说明行所在的工作表-并且您无需选择行即可执行 操作,这意味着您无法使用Selection
。
语法也必须准确无误-因此.EntireRowRow
将永远无法使用。
在代码中,我使用了With...End With语句来缩短代码。
Sub Macro()
With Worksheets("Sheet1").Rows("7:9")
If .Hidden = True Then
.EntireRow.Hidden = False
Else
.EntireRow.Hidden = True
End If
End With
End Sub
不使用With
看起来像这样:
Sub Macro()
If Worksheets("Sheet1").Rows("7:9").Hidden = True Then
Worksheets("Sheet1").Rows("7:9").EntireRow.Hidden = False
Else
Worksheets("Sheet1").Rows("7:9").EntireRow.Hidden = True
End If
End Sub
通过将TRUE交换为FALSE,反之亦然,可以进一步缩短代码。
Sub Macro()
With Worksheets("Sheet1").Rows("7:9")
.EntireRow.Hidden = Not .EntireRow.Hidden
End With
End Sub
Not运算符将布尔TRUE切换为FALSE,将FALSE切换为TRUE。
.EntireRow.Hidden
将返回TRUE或FALSE,因此Not .EntireRow.Hidden
将返回相反的值。
如果要运行可见行的索引,可以使用SUBTOTAL函数对包含值的可见单元进行计数。
假设B列中的所有单元格都包含一个值,并使用小计的COUNTA函数。
键入A2
的公式将是:=SUBTOTAL(103, $B$1:$B2)
并向下拖动。
请注意,第二个单元格引用使用相对引用作为行号-向下拖动时,公式将更新为=SUBTOTAL(103, $B$1:$B3)
... $B$1:$B4
,依此类推。函数中的103
表示计数中不包含隐藏的单元格。
要将其添加到您要更新的代码中:
Sub Macro()
With Worksheets("Sheet1")
'A2:A & last row
'OFFSET(,-1) is used so it counts values in column B to find the last row
'and then references column A for the final range.
With .Range("A2", .Cells(.Rows.Count, 2).End(xlUp).Offset(, -1))
.FormulaR1C1 = "=SUBTOTAL(103, R1C2:RC2)"
End With
With .Rows("7:9")
.EntireRow.Hidden = Not .EntireRow.Hidden
End With
End With
End Sub