我已经能够使用以下代码创建复选框来显示/隐藏我的 excel 文档中的特定行
If CheckBox1.Value = True Then Rows("26:28").EntireRow.Hidden = False If CheckBox1.Value = False Then Rows("26:28").EntireRow.Hidden = True
但是,当我插入超出该范围的行时,我需要能够更新范围。
试图找到范围开始的单元格,然后向范围添加 2,但不太确定如何操作。
干杯
罗伯特
答案1
答案2
我假设您有一个有效的代码来显示/隐藏这些行,并且您的问题只是在插入上面的行之后找到该行。
如果只有一个范围需要显示/隐藏,则可以使用命名范围。当上面有新行时,命名范围仍将指向相同的行。
ToBeHidden
只需为几个单元格命名(例如)(例如A26:A28
,无需命名整行),然后使用此代码切换它们:
With ActiveSheet.Range("ToBeHidden").EntireRow
If .Hidden = True Then
.Hidden = False
Else
.Hidden = True
End If
End With
使用一组行来切换很容易,但如果有多组行,则需要更强大的功能。也许可以添加专用列来激活此功能。
答案3
由于 OP 的目标是“检测是否插入了行以及插入了多少行”,您可以在上面的 Máté Juhász 的评论中找到它,因此解决方案应该跟踪插入或删除的行的隐藏数据范围。
首先,命名隐藏范围A26:A28
并使用以下 VBA 代码来跟踪插入或删除的行数。
Private Sub Worksheet_Change(ByVal Target As Range)
Static lngRow As Long
Dim rng1 As Range
Set rng1 = ThisWorkbook.Names("Named Range").RefersToRange
If lngRow = 0 Then
lngRow = rng1.Row
Exit Sub
End If
If rng1.Row = lngRow Then Exit Sub
If rng1.Row < lngRow Then
MsgBox lngRow - rng1.Row & " Row Deleted"
Else
MsgBox rng1.Row - lngRow & " Rows Inserted"
End If
lngRow = rng1.Row
End Sub
注意:如果您只想计算插入的行数,则将最后一项更改If...
为
If rng1.Row > lngRow Then
MsgBox rng1.Row - lngRow & " Rows Inserted"
End If