2015-12-14 2 views
1

Я хотел бы вставить список проверки данных, который захватывает данные с другого листа. столбец, из которого будет создан список, хранится в другой переменной, которая является динамической. Мой код до сих пор:Укажите диапазон ячеек для .validation

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' должны быть квалифицированы. Изменить «Формула1: = Таблицы (« Плательщики в верхнем 4 »). Диапазон (ячейки (3, pRange), ячейки (10, pRange))' to 'Formula1: = Листы (« Плательщики в верхнем 4 »). Диапазон (листы («Плательщики в топ-4»). Ячейки (3, pRange), Листы («Плательщики в верхнем 4»). Ячейки (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

Я чувствую, что это почти есть, но он не совсем сработал. Он записывает следующую строку в список: «Плательщики в топ-4»! $ C $ 3: $ C $ 10 Таким образом, он получает формулу правильной, просто не вытягивая данные из этого диапазона. – SFro

+0

необходимо добавить оператора: 'Formula1: =" = "& StrFormula' – EEM

+0

мог бы также использовать эту формулу для получения строки:' StrFormula = .Range (.Cells (3, pRange), .Cells (10, pRange)). Адрес (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 
Смежные вопросы