Excel VBAmacros删除公式dynamic范围不起作用

我有一个四个单元格的范围。 最左边的单元格(A列)是唯一的值。 接下来的三个单元格填充了公式。 列B和C是Vlookups,当列A被填充时,从表2拉取值(否则单元格的值为“”)。 在列A中放入值时,D列将填入当前date(否则单元格的值也为“”)。

我想要做的是运行一个macros,当一个唯一的值放入列A将杀死B,C,D中的公式,并保持它们的值。 然后它会自动select列A中后续行中的单元格End(xlDown)是固定的,这就是为什么我使用了End(xlDown)方法,然后是Activecell.Offset

这就是我运行时正在轰炸Excel的东西:

 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中的值之前,始终closures事件处理。 如果你不这样做,那么这个例程就会尝试运行。
  2. 如果列A中的更改指示需要删除公式,则将处理限制在A列中有更改时。
  3. ActiveCell在这里不是一个好的select。 改用Target。 目标可能是一个或多个单元格。
  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