Подстановка формулы списка в валидатор

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Здравствуйте! Помогите, пожалуйста найти и исправить ошибку в коде:

Код: Выделить всё

    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, FormulaR1C1:="=INDIRECT(RC[-1])"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Смысл в том, чтобы кодом подставить в ячейку значение валидатора, которое определяется содержимым соседней левой ячейки (там находится имя диапазона со списком значений).
Спасибо!
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте AlexZZZ
Образец из справка Validation Object возможно Вы не видели

Код: Выделить всё

Example
This example adds data validation to cell E5 and specifies both the input and error messages.

With Range("e5").Validation
    .Add Type:=xlValidateWholeNumber, AlertStyle:= xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="5", Formula2:="10"
    .InputTitle = "Integers"
    .ErrorTitle = "Integers"
    .InputMessage = "Enter an integer from five to ten"
    .ErrorMessage = "You must enter a number from five to ten"
End With
Евгений
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Уважаемый Евгений, этот образец я действительно не видел. И в приведённом коде, к сожалению, не увидел ответа на свой вопрос, т.к. мне нужно подставить в валидатор формулу текстового списка, а не проверку вводимых числовых значений. Ключевое место, где возникает ошибка в строчке:

Код: Выделить всё

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, FormulaR1C1:="=INDIRECT(RC[-1])"
Кстати,

Код: Выделить всё

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=INDIRECT(D3)"
прекрасно работает (если в ячейке "D3" находится имя диапазона). Но суть именно в том, что мне нужно сослаться на имя диапазона соседней левой ячеки, по отношению к выделенной. Но как это сделать, по другому или исправить ошибку в данном коде?
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Можно предварительно создать строковую переменную, присвоть ей значение нужной ячейки, затем использовать в ValidateList, Formula1:="=" & MyString
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

SAS888, спасибо!
Так работает без ошибок. Проблема решилась.

Но с познавательной точки зрения, всё-таки интересно знать, можно ли подставить формулу в формате R1C1 в валидатор?
Ответить