2015-12-14 37 views
1

我想插入一个数据验证列表,用于从另一个工作表获取数据。列表将从其中生成的列存储在另一个动态变量中。到目前为止我的代码是:指定用于验证的单元格的范围

pRange = Sheets("Payer Output").Cells(24, 3).Value 

With Sheets("Payer Output").Range("C23").Validation 
.Delete 
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
Operator:=xlBetween, Formula1:=Sheets("Payers in Top 4").Cells(3, pRange) 
.InCellDropdown = True 
.InputTitle = "" 
.ErrorTitle = "" 
.InputMessage = "" 
.ErrorMessage = "" 
.ShowInput = True 
.ShowError = True 
End With 

这个公式生成列表,并期待在正确的列,但目前的代码只指定列表应该在一个单细胞,从而产生列表时,有只有一个值。如何为'formula1:='行指定一系列单元格?我试过了:

Formula1:=Sheets("Payers in Top 4").Range(Cells(3, pRange), Cells(10,pRange)) 

但是这不起作用。感谢您的帮助!

+0

所有'.Cells'和'.Range'必须合格。更改'Formula1:=表格(“前四名中的支付者”)范围(单元格(3,pRange),单元格(10,pRange))'到'Formula1:=表格(“Payers in Top 4” (“Payers in Top 4”)。Cells(3,pRange),Sheets(“Payers in Top 4”)。Cells(10,pRange))' –

+0

谢谢您的提示,回复,不幸的是这并没有解决问题。事实上,下拉列表甚至不会出现在这行代码中。 – SFro

回答

2

有时我会只是名称的范围,把命名的区域在列表中。

Sub AddDtaVal() 
     pRange = Sheets("Payer Output").Range("C24").Value 

    Sheets("Payers in Top 4").Range(Sheets("Payers in Top 4").Cells(3, pRange), Sheets("Payers in Top 4").Cells(10, pRange)).Name = "List" 

    With Sheets("Payer Output").Range("C23").Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
      xlBetween, Formula1:="=List" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
End Sub 
+1

为什么downvote?这是一个可接受的方法。 –

+0

这完美无缺,谢谢 – SFro

1

需要构建地址公式中的字符串时,Excel风格:'Sheet Name'!A1:A10

Dim StrFormula As String 
Dim pRange As Long 

pRange = Sheets("Payer Output").Cells(24, 3).Value 
With Sheets("Payers in Top 4") 
    StrFormula = "'" & .Name & "'!" & .Range(.Cells(3, pRange), .Cells(10, pRange)).Address 
End With 

With Sheets("Payer Output").Range("C23").Validation 
    .Delete 
    .Add Type:=xlValidateList, _ 
      AlertStyle:=xlValidAlertStop, _ 
      Operator:=xlBetween, _ 
      Formula1:=StrFormula 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "" 
    .ErrorMessage = "" 
    .ShowInput = True 
    .ShowError = True 
End With 
+0

我觉得这几乎就在那里,但它并没有完全奏效。它将以下行写入列表框: 'Payers in Top 4'!$ C $ 3:$ C $ 10 因此,它正在使公式正确,而不是真正从该范围提取数据。 – SFro

+0

需要添加运算符试试这个:'Formula1:=“=”&StrFormula' – EEM

+0

也可以用这个公式来获得字符串:'StrFormula = .Range(.Cells(3,pRange),.Cells(10, (1,1,xlA1,1)' – EEM

-1

试试这个

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
     Operator:=xlBetween, Formula1:="='Payers in Top 4'!" & Worksheets("Payers in Top 4").Cells(3, pRange).Resize(8).Address