我有一个VBA宏,它从另一个工作表中获取数据作为Range对象,并使用该Range对象在当前工作表的单元格上添加验证,如下所示
With Cells(c.Row, colResource).Validation
.Delete
.Add Type:=xlValidateList, Formula1:="=" & Sheets(sheetResources).Name & "!" & resRng.Address
.InCellDropdown = True
End With
除非resRng
对象只有一个单元格,否则这样可以正常工作。
什么可以导致多个单元格的范围工作,但单个单元格范围失败?
任何帮助将不胜感激!
谢谢!
答案 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