单个单元格范围的VBA添加单元验证失败

时间:2015-04-28 21:34:16

标签: excel-vba vba excel

我有一个VBA宏,它从另一个工作表中获取数据作为Range对象,并使用该Range对象在当前工作表的单元格上添加验证,如下所示

With Cells(c.Row, colResource).Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:="=" & Sheets(sheetResources).Name & "!" & resRng.Address
    .InCellDropdown = True
End With

除非resRng对象只有一个单元格,否则这样可以正常工作。 什么可以导致多个单元格的范围工作,但单个单元格范围失败?

任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

这方面的解决方案显示了Excel的奇特之处。

首先,查看正在输入formula1参数的内容。

如果选择了单个单元格:

$G$2

如果选择了一系列单元格:

$G$2:$G$3

令人愤怒的是,Excel期待您的范围的开始和结束。

解决方案是检查范围大小,这是一个基于您的代码示例,我用于测试,您可以根据自己的需要进行调整。

Sub add_validation()

Dim rng As Range
Set rng = Selection


With Cells(1, 1).Validation
    .Delete
    If Selection.Count = 1 Then
        .Add Type:=xlValidateList, Formula1:="=" & ActiveSheet.Name & "!" & rng.Address & ":" & rng.Address
    ElseIf Selection.Count > 1 Then
        .Add Type:=xlValidateList, Formula1:="=" & ActiveSheet.Name & "!" & rng.Address
    End If
    .InCellDropdown = True
End With

End Sub

实施了大小检查的代码:

With Cells(c.Row, colResource).Validation
    .Delete
    If resrng.Count = 1 Then
        .Add Type:=xlValidateList, Formula1:="=" & Sheets(sheetResources).Name & "!" & resrng.Address & ":" & resrng.Address
    ElseIf resrng.Count > 1 Then
        .Add Type:=xlValidateList, Formula1:="=" & Sheets(sheetResources).Name & "!" & resrng.Address
    End If
    .InCellDropdown = True
End With