根据其他单元格值添加或删除行

时间:2020-07-26 21:40:15

标签: excel vba

我希望我的Excel工作表(使用Worksheet_Change功能进行修改)可以插入或删除新行,具体取决于另一个单元格的数值。

例如,如图所示,如果我引入值“ 7”,Excel将在第5行下插入6个新行(B2中的最小值为1):

enter image description here

到目前为止,我的代码可以增加行数,但是,如果我进行更改并引入较小的值,它不会删除剩余的行:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("A1:E500")) Is Nothing Then
Call Macro1
End If

Sub Macro1()   
NDay = Range("B2").Value
    
    For i = 1 To NSesion - 1
    
      Range("A6").EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFromrightorabove
        Next i
End Sub

1 个答案:

答案 0 :(得分:0)

Macro1中的变量NSesion未声明且没有值。在代码窗口的顶部使用Option Explicit捕获此类错误。

该代码还有其他问题。第一个子没有结尾子。只要更改范围A1到E500中的任何单元,它就会运行。你想要那个吗?还是只希望当B2中的数字更改时它才能运行?另外,由于您正在更改事件插入的范围内的单元格进行更改(插入行),因此代码将创建一个无限循环。

下面的代码仅在更改单元格B2时运行。它将首先删除第6至11行,然后插入行并在B列中输入递增数字。让我知道这是否对您有用。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("B2")) Is Nothing Then
    Call Macro1
End If
End Sub

Sub Macro1()
Dim NDay As Long, i As Long
NDay = Range("B2").Value
    
    Range("A6:A11").EntireRow.Delete
    For i = 1 To NDay - 1
        Range("A" & 5 + i).EntireRow.Insert Shift:=xlDown
        Range("B" & 5 + i) = i + 1
    Next i
End Sub

请注意,有更优雅的编写方法,但是我基于您的方法来帮助您了解它出了什么问题。