Страницы: 1
RSS
Как на VBA создать выпадающий список полей "умной таблицы"
 
Добрый день, знатоки Excel!
Необходимо написать макрос, который бы формировал выпадающий список полей "умной таблицы".

Пишу вручную, записываю мастером макросов:
Код
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=ДВССЫЛ(""Таблица1[#Заголовки]"")"
    End With
Потом запускаю - выдает ошибку 1004. Пробовал по-английски так:
Код
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=INDIRECT(""Таблица1[#Заголовки]"")"
    End With
Опять ошибка. Пробовал так:    
Код
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=INDIRECT(""Таблица1[#Headers]"")"
    End With
Что интересно, ошибки нет, но вставляется в проверку данных такая лабуда: =ДВССЫЛ("Таблица1[#Headers]") и, конечно, не работает.

Сломал всю голову уже, помогите, что не так делаю?
 
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim a, s$
    a = Sheets(2).Range("Таблица1[#Headers]").Value
    With WorksheetFunction
        a = .Transpose(.Transpose(a))
    End With
    s = Join(a, ",")
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=s
    End With
End Sub
Изменено: Михаил С. - 25.10.2017 01:24:55
 
Благодарю, Михаил! Так, конечно, работает, но хотел вставить макрос в надстройку, а саму книгу не предполагается сохранять с поддержкой макросов. Видимо, стандартным методом все же не получится. Очень странный "глюк", с ручного ввода все работает, программно - нет..
Изменено: Rigel44 - 25.10.2017 22:10:36
 
Rigel44, как вариант - создайте ячейку с такой формулой валидации в надстройке и копируйте-вставляйте ее в книгу.
 
1. Создаёте динамический именованный диапазон с формулой =Таблица1[#Заголовки]
2. Formula1:="=ИмяДиапазона"
 
Equio, это просто гениально! Большое спасибо
 
Подскажите, пожалуйста, если есть Лист - Sheet1, Таблица - Таблица1, Столбец - Тест, то как правильно прописать в Formula1:=, чтобы в выпадающем списке были значения из столбца с заголовком Тест???
 
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:=Join(Application.Transpose(Sheet1.Range("Таблица1[Тест]").Value), ",")
    End With
End Sub
Страницы: 1
Наверх