使用Range公式时,下拉值丢失

时间:2017-04-19 05:25:56

标签: excel vba excel-vba excel-vba-mac

我有以下VBA功能。这是为了在给定的单元格中创建下拉列表

Public Sub CORE_SetValidation(ByRef Rng As Range, ByVal Value As String)
    With Rng.Validation
        Call .Delete
        If Value <> "" Then
            Call .Add(Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Value)
            .ErrorMessage = "Please select a value from drop-down list"
            .ErrorTitle = "Value Error"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputMessage = ""
            .InputTitle = ""
            .ShowInput = True
            .ShowError = True
        End If
    End With
End Sub

当我通过逗号分隔值将值传递给它时,它适用于所有整列

dictkeystring = "1,2,3,4,5,6,7,8,9"
CORE_SetValidation(Sourcews.Columns(AllocationSheet_Prj_COLUMN).EntireColumn, dictkeystring)

但是当我使用Range公式传递值时,它不能正常工作。

dictkeystring = "=PrjList!A2:A6"
CORE_SetValidation(Sourcews.Columns(AllocationSheet_Prj_COLUMN).EntireColumn, dictkeystring)

问题是,对于每个细胞,我缺少一个值;在第一列缺少一个val,第二个单元格缺少2个val,第三个缺少3个值,...在某个地方之后我错过了所有值,空的下拉列表我得到了

enter image description here
我不确定为什么会发生这种错误,我可以在Range公式

中解决这个问题

1 个答案:

答案 0 :(得分:2)

尝试

"=PrjList!$A$2:$A$6"

如果没有$,定义的范围地址是“相对的”,因此它将使用范围的单元格“向下滑动”。即第二行的验证将是A3:A7,依此类推。

地址中的$指示Excel 修复验证范围,因为它是绝对地址。