数据validationdynamic范围移动范围而不是扩展范围

在Excel中,我有一个数据validation范围使用OFFSET()函数,我希望dynamic地添加信息,然后我可以在下拉列表中select。 我有一个VBAmacros,我将信息添加到此列表中,而不是从$ L $ 10:$ L $ 230到$ L $ 10:$ L $ 231的列表中扩展名单,它将列表向下移动到$ L $ 11:$ L $ 230 我在命名范围或数据validation中做了什么不正确的工作? 或者它有什么与使用VBA添加到导致其工作不正确的范围?

“我的名字经理”中的“房间”指的是:

 =OFFSET(Sheet1!$L$10,0,0,COUNTA(Sheet1!$L:$L),1) 

我的数据validation下拉菜单:

 =Rooms 

我的“插入”macros添加到列表中:

 Sub insert() ' ' insert Macro ' ' Range("A2:E2").Select Selection.Copy Sheets("Sheet1").Select Range("L10:P10").Select Selection.insert Shift:=xlDown Sheets("INSERT NEW ROOM").Select ActiveWindow.SmallScroll Down:=-18 Range("A2").Select End Sub 

每次从“INSERT NEW ROOM”选项卡添加新实例时,我也会在Sheet1中包含一个“Sort”VBA。

 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("L9:L500")) Is Nothing Then Range("L9").Sort Key1:=Range("L10"), _ Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom End If End Sub 

发生这种情况是因为您的insertmacros更改了您的命名范围公式引用的范围,就像任何普通公式一样。

该公式有一个单元$L$10的引用。 当你执行

 Range("L10:P10").Insert Shift:=xlDown 

包含命名范围公式的任何公式,包含在第10行或下面的单元格将被更新为指向一行的单元格(即在这种情况下$L$11

你可以通过改变你命名的范围公式来解决这个问题

 =OFFSET(Sheet1!$L$1,9,0,COUNTA(Sheet1!$L:$L),1) 

注意它现在引用单元格$L$1所以不受插入的影响。

注意:

insertmacros可以做一些工作

试试这个

 Sub InsertRooms() ' renamed to avoid using a built in function name Range("A2:E2").Copy Worksheets("Sheet1").Range("L10:P10").insert Shift:=xlDown Application.CutCopyMode = False End Sub