2015-12-14 43 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