数据验证动态范围移动范围而不是扩大范围

时间:2015-12-11 18:38:03

标签: excel vba validation excel-vba

在Excel中,我有一个使用function outTree(array $tree, $parentId = null) { echo '<ul>'; foreach ($tree as $row) { if ($row['fk_i_parent_id'] == $parent_id) { echo '<li>' . $row['pk_i_id']; echo outTree($tree, $row['pk_i_id']); echo '</li>'; } } echo '</ul>'; } 函数的数据验证范围,我希望动态添加信息,然后我可以在下拉列表中选择。我有一个VBA宏,我在这个列表中添加信息,而不是将列表从$ L $ 10扩展:$ L $ 230到$ L $ 10:$ L $ 231,它将我的列表下调到$ L $ 11: $ L $ 230我在命名范围或数据验证中做错了什么不能使其工作?或者它是否有使用VBA添加到导致它无法正常工作的范围?

&#34;房间&#34;在我的名称管理器中引用:

OFFSET()

我的数据验证下载源:

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

我的&#34;插入&#34;要添加到列表中的宏:

=Rooms

我也有一个&#34;排序&#34;每次从&#34; INSERT NEW ROOM&#34;添加新实例时,我的Sheet1中都会包含VBA。标签

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

1 个答案:

答案 0 :(得分:2)

这是因为您的insert宏更改了命名范围公式所引用的范围,就像任何普通公式一样。

该公式引用了单元格$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宏可以做一些工作

试试这个

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