VBA 代码用于解释事后插入行的情况。

VBA 代码用于解释事后插入行的情况。

我已经能够使用以下代码创建复选框来显示/隐藏我的 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

跟踪和管理行的添加/删除可能非常困难(确保始终捕获它,还需要修改新行号的代码本身,或将其存储在工作表的某个位置......),我建议使用一些解决方法。

  1. 使用命名范围:命名范围与单元格一起移动,因此引用它们将始终引用相同的单元格。

    • 在下面的例子中,A6:A7 是一个命名范围,示例代码显示/隐藏它。

在此处输入图片描述

  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

相关内容