数据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
发生这种情况是因为您的insert
macros更改了您的命名范围公式引用的范围,就像任何普通公式一样。
该公式有一个单元$L$10
的引用。 当你执行
Range("L10:P10").Insert Shift:=xlDown
包含命名范围公式的任何公式,包含在第10
行或下面的单元格将被更新为指向一行的单元格(即在这种情况下$L$11
)
你可以通过改变你命名的范围公式来解决这个问题
=OFFSET(Sheet1!$L$1,9,0,COUNTA(Sheet1!$L:$L),1)
注意它现在引用单元格$L$1
所以不受插入的影响。
注意:
你insert
macros可以做一些工作
试试这个
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