用於事後插入行的 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

相關內容