List 更新数据验证列表范围

List 更新数据验证列表范围,list,excel,validation,range,vba,List,Excel,Validation,Range,Vba,我正在尝试创建一个vba代码,该代码将我的数据验证列表范围更新到另一个工作表的最后一行。 我的下拉列表位于我的“主页”选项卡上,它的列表范围从“映射选项卡”的P列开始。列表将每天更改,因此希望添加到Formula中以查找finalrow,而不是输入单元格行值。这是我写的代码,但是公式出现了错误 Sub getDropdownList() Dim finalrow1 As Integer 'finds last row in Column P on Mapping tab

我正在尝试创建一个vba代码,该代码将我的数据验证列表范围更新到另一个工作表的最后一行。 我的下拉列表位于我的“主页”选项卡上,它的列表范围从“映射选项卡”的P列开始。列表将每天更改,因此希望添加到Formula中以查找finalrow,而不是输入单元格行值。这是我写的代码,但是公式出现了错误

Sub getDropdownList()

    Dim finalrow1 As Integer

    'finds last row in Column P on Mapping tab
    Sheets("Mapping").Select
    finalrow1 = ActiveSheet.Cells(Rows.Count, "P").End(xlUp).Row

    Sheets("Home").Select
        Range("E7").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Mapping!$P$1:$P &finalrow1"

    End With

    End Sub

我不知道这是否有效,但尝试将公式更改为

Formula1:="=Mapping!$P$1:$P" & finalrow1

excel可能将您的整数视为一个字符串而感到困惑。

无需使用VBA来更新公式-改用动态公式(作为命名范围)。
作为命名范围,这将引用从$P$1到包含数据的最后一个单元格,前提是P列列表中没有空白单元格。
=映射$P$1:INDEX(映射!$P:$P,COUNTA(映射!$P:$P))

这需要作为命名范围输入,因为数据验证将不接受它


我有没有提到它必须是一个命名范围,而不是直接输入到源框中?:)

这非常有效。感谢您解释有关excel混淆的问题。