在目标地址的变化上运行一个macros

我有一个运行在单元格更改上的If语句。 这部分工作正常。 但是,当它运行macros时,由于某种原因它增加了大约40多余的行。 我使用了断点,并发现在特殊的粘贴之后添加了这些行。 谁能告诉我为什么?

提前致谢。

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$AG$4" Then Call CapEx_Copy_Paste_Delete End If End Sub Sub CapEx_Copy_Paste_Delete() ' ' CapEx_Copy_Paste_Delete Macro ' ' Rows("11:11").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("B4:AG4").Select Selection.Copy Range("B11").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("AG4").Select Selection.ClearContents Range("B4:E4").Select Selection.ClearContents Range("H4:I4").Select Selection.ClearContents Range("L4:M4").Select Selection.ClearContents Range("P4:Q4").Select Selection.ClearContents Range("T4:U4").Select Selection.ClearContents Range("X4:Y4").Select Selection.ClearContents Range("Z4").Select Selection.ClearContents Range("AA4").Select Selection.ClearContents Range("AC4").Select Selection.ClearContents Range("AD4").Select Selection.ClearContents Range("B4").Select End Sub 

这是否工作更好?

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$AG$4" Then Application.EnableEvents = False Call CapEx_Copy_Paste_Delete Application.EnableEvents = True End If End Sub 

这里是你的代码的整洁的版本。 这可能是所有使用Select不帮助你的问题:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$AG$4" Then Application.EnableEvents = False Call CapEx_Copy_Paste_Delete Application.EnableEvents = True End If End Sub Sub CapEx_Copy_Paste_Delete() Dim ws As Worksheet Dim arrRanges As Variant, v As Variant 'set this as the worksheet you want to update Set ws = ThisWorkbook.Worksheets("Sheet1") 'set this as the ranges you want to clear arrRanges = Array("AG4", "B4:E4", "H4:I4", "L4:M4", "P4:Q4", "T4:U4", "X4:Y4", "Z4") With ws .Rows("11:11").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove .Range("B4:AG4").Copy .Range("B11").PasteSpecial Paste:=xlPasteValues For Each v In arrRanges .Range(v).ClearContents Next v End With End Sub 

更新包括加里的学生的build议 – 所有功劳都归功于他build议你在你的第一个子项目中禁用事件