Максимальная длина раскрывающегося списка/формулы в Excel

У меня есть следующий код VBA:

myList = "test"

Range("A1:Z1").Validation.Delete
Range("A1:Z1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=myList

Если мой список превышает 256 символов, он усекается. Если оно превышает 1024, я получаю ошибку выполнения (думаю, это максимальная длина формулы).

Как я могу выйти за эти пределы? Я использую Эксель 2003.


person dan    schedule 15.04.2013    source источник
comment
Возможно, попробуйте другой подход, а не встроенную проверку Excel. Я успешно использовал это: contextures.com/xlDataVal11.html. Для настройки требуется немного работы, но я думаю, что это сделает то, что вам нужно.   -  person sous2817    schedule 15.04.2013
comment
Мне приходится создавать все динамически. Макрос устанавливается как ссылка и редактирует первую строку любого открытого документа. Не уверен, что могу динамически создать элемент управления со списком в каждой ячейке.   -  person dan    schedule 15.04.2013
comment
Вы можете использовать подход с именованным диапазоном по ссылке contextures.com/xlDataVal11.html Что вы можете сделать (и я делаю это) состоит в том, чтобы создать скрытый лист, и на этом листе я заполняю, скажем, Col A своим списком и даю ему имя, а затем использую этот именованный диапазон в списке проверки данных. Попробуйте, и если вы застряли, просто опубликуйте код, который вы пытались опубликовать, и я могу показать вам пример кода о том, как его достичь. :)   -  person Siddharth Rout    schedule 15.04.2013
comment
Как я уже сказал ниже, проект VBA задан как эталонный и используется во многих документах Excel. Я рассмотрел этот подход, но мне пришлось бы динамически создавать имена, а затем элементы управления. Это выглядит немного сложнее.   -  person dan    schedule 15.04.2013
comment
Нет, вам не нужно создавать элементы управления;) Просто именованный диапазон в скрытом листе   -  person Siddharth Rout    schedule 15.04.2013
comment
Но я не могу сделать ComboxBox.ListFillRange = str, если у меня нет ComboBox, верно? Ячейки не имеют свойства ListFillRange. Это единственное, чего здесь не хватает, чего-то, что могло бы заменить Range.Validation, которым я действительно пользуюсь.   -  person dan    schedule 15.04.2013
comment
Но это моя точка зрения... вам не нужно создавать поле со списком... вы можете напрямую использовать именованный диапазон в своем раскрывающемся списке (который также называется списком проверки данных)   -  person Siddharth Rout    schedule 15.04.2013
comment
Это работает после нескольких поисков. Эта ссылка также была полезна: ozgrid.com/forum/showthread.php?t= 52916   -  person dan    schedule 15.04.2013
comment
Да, эта ссылка показывает вам, что именно я имел в виду :)   -  person Siddharth Rout    schedule 15.04.2013


Ответы (1)


Используя ссылку, размещенную в комментариях выше, я смог создать раскрывающийся список с более чем 256/1024 символами. Вот что мне удалось получить после еще нескольких поисков и попыток:

ActiveWorkbook.Names.Add Name:="List", RefersTo:="=ValidationList!$A$1:$A$" & i
Range("A1:AZ1").Validation.Delete
Range("A1:AZ1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=List"

Не более того. i — количество строк листа ValidationList. Я создаю этот лист динамически и заполняю первый столбец A тем, что я хочу отобразить в раскрывающемся списке.

Полезные ссылки:

person dan    schedule 15.04.2013