2017-04-19 69 views
3

我具有下面的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) 

但是当我通过它的做工精细值使用范围公式,它不工作。

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

问题是,对于每个单元我缺少一个值;在第一列中缺少一个VAL,第二单元失踪2 VAL,第三失踪3个值,......经过一番的地方,我丢失了所有的值,空下拉我得到

enter image description here
我不是知道为什么这个错误发生了,我可以解决这个在范围公式

回答

2

尝试

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

没有$,定义的范围的地址是“相对”,所以将“滑”下来的细胞的范围。即第二行的验证将是A3:A7等等。

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

+1

非常感谢,很好的解释 – ManiMuthuPandi