簡體   English   中英

如何處理 VBA 代碼以包含添加的行和列?

[英]How do I handle VBA code to include added rows and columns?

仍在嘗試使其正常工作。 Excel 在更改代碼以包含命名范圍后插入一行時崩潰,如下所示。 也許這是由於偏移單元格中沒有數據?

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)


    Dim xSht As Worksheet
    Set xSht = ActiveWorkbook.ActiveSheet
    Dim xRg As Range, xCell As Range
    Set xRg = Range("DevTable")
    If Not Intersect(Target, xRg) Is Nothing Then
        For Each xCell In xRg
            If xCell = "" Then
                xCell.Value = xCell.Offset(0, 35).Value
                End If
        Next xCell
    End If
End Sub

我想修改下面的代碼,以便如果范圍 (F6:F42) 更改,添加的行/列將被包括在內。 我不希望將范圍更改為 Excel 表,但如果絕對必要的話可以。

    Private Sub Worksheet_Change(ByVal Target As Range)

    On Error Resume Next
    Dim xSht As Worksheet
    Set xSht = ActiveWorkbook.ActiveSheet
    Dim xRg As Range, xCell As Range
    Set xRg = xSht.Range("F6:W42")
    If Not Intersect(Target, Range("F6:W42")) Is Nothing Then
        For Each xCell In xRg
            If xCell = "" Then
                xCell.Value = xCell.Offset(0, 35).Value
            End If
        Next xCell
    End If
End Sub>

對於那些感興趣的人,我有兩個相同的價格表(不是官方的 excel 表)。 第二個表(AO:BF 列)用作默認價格表。 第一個表只是通過簡單的公式從第二個表中提取值,例如第一個單元格的公式 =AO6 等。如果用戶決定在幾個月內降低價格,他可以在第一個表中輸入新價格. 該單元格通過條件格式突出顯示,以提醒他價格已更改。 但是,在銷售結束后,他可以稍后只需點擊刪除並將 go 恢復到原價。

不要使用On Error Resume Next ,這是一種不好的做法。 如果錯誤存在,有一種方法可以捕獲並相應地處理它 無論如何,關於這個問題 - 如果你想保持“干凈”,桌子是唯一可能的選擇。

如果沒有表格,它應該在某處寫入添加的列和行。 例如,在附加的“日志”表中。 然后計算所需的范圍。 但計算量太大,實施將是一場噩夢。

這是表實現,沒有“On Error...”:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim xRg As Range
    Dim xCell As Range
    Set xRg = Range("myTable")

    If Not Intersect(Target, xRg) Is Nothing Then
        For Each xCell In xRg
            If xCell = "" Then
                xCell.Value = "Something blue"
            End If
        Next xCell
    End If

End Sub

此外,我不確定為什么需要循環通過xRg而不是通過“目標”,但我想這是有充分理由的。

一個技巧是在您的工作表中使用“命名范圍”。

Set xRg = xSht.Range("F6:W42")

可以變成

Set xRg = xSht.Range("UsuablePrices")  ' <-- I made the name up

現在,每當有人(以受控和適當的方式)添加到單元格時,命名范圍都會更改,但您不必修改代碼。

例如,在第 41 行插入一行。您的命名范圍現在引用“F6:W43”,但您的代碼仍為Set xRg = xSht.Range("UsuablePrices")

如果做法是在范圍的末尾添加項目,您可以在末尾包含一個空行,並讓每個人都在該行上方添加項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM