我希望我的Excel工作表(使用Worksheet_Change功能进行修改)可以插入或删除新行,具体取决于另一个单元格的数值。
例如,如图所示,如果我引入值“ 7”,Excel将在第5行下插入6个新行(B2中的最小值为1):
到目前为止,我的代码可以增加行数,但是,如果我进行更改并引入较小的值,它不会删除剩余的行:
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
答案 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
请注意,有更优雅的编写方法,但是我基于您的方法来帮助您了解它出了什么问题。