Excel VBA 宏删除动态范围不起作用的公式

Excel VBA macro to remove formulas for a dynamic range not working

我有四个单元格的范围。最左边的单元格(A 列)是唯一值。右侧接下来的三个单元格填充有公式。 B 列和 C 列是 Vlookup,它们在填充 A 列时从 sheet 2 中提取值(否则单元格的值为“”)。当将值放入 A 列时,D 列将填充当前日期(否则单元格的值也为“”)。

我想要做的是 运行 一个宏,当一个唯一值被放入 A 列时,它会杀死 B、C、D 中的公式并保留它们的值。然后它会自动选择 A 列中后续行中的单元格。A3 是固定的,这就是我使用 End(xlDown) 方法然后使用 Activecell.Offset.

的原因

这就是我在轰炸 Excel 时 运行s:

Private Sub Worksheet_Change(ByVal Target As Range)

Range(ActiveCell, ActiveCell.Offset(0, 3)).Value = Range(ActiveCell, ActiveCell.Offset(0, 3)).Value
  Range("A3").Select
  Selection.End(xlDown).Select
  ActiveCell.Offset(1, 0).Select
End Sub
  1. 在 Worksheet_Change 中更改值之前始终关闭事件处理。如果不这样做,例程将尝试 运行 在其自身之上。
  2. 如果 A 列中的更改决定了需要删除公式,则将处理限制在 A 列发生更改时。
  3. ActiveCell 在这里不是一个好的选择。请改用目标。目标可以是一个或多个单元格。
  4. 从下往上而不是从上往下查找 A 列中的第一个空单元格。
  5. 使用错误控制来确保 VLOOKUP 返回的是值,而不是错误。

下面是一些可以帮助您入门的通用代码。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns("A")) Is Nothing Then
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        Dim rng As Range
        For Each rng In Intersect(Target, Columns("A"))
            If Not IsError(rng.Offset(0, 1)) Then
                rng.Resize(1, 3) = rng.Resize(1, 3).Value
            End If
        Next rng
        With Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
            'optionally put in new VLOOKUP formulas in column B and C
            '.Offset(0, 1).FormulaR1C1 = "=VLOOKUP(RC1, Sheet2!C1:C3, 2, FALSE)"
            '.Offset(0, 2).FormulaR1C1 = "=VLOOKUP(RC1, Sheet2!C1:C3, 3, FALSE)"
            .Select
        End With
    End If
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub