У меня есть ComboBox, список которого относится к именованному диапазону, который создает динамический список на основе совпадений со связанным текстом в ComboBox (связан с ячейкой).Список имеет длину количества совпадений, ComboBox имеет ComboBox_Change, чтобы обновить его.
Теперь моя проблема в том, что я не могу ничего Ctrl + Z в документе, и это делает его довольно трудным для работы.Раньше у меня также возникала проблема со списком тригерринов при любых изменениях на листе, но, похоже, это прекратилось, поскольку я изменил именованный диапазон «зона» на его лист вместо всего Excel (даже странно, даже на его собственном листе).Ячейки, используемые в именованном диапазоне, ссылаются на другой лист.
Вчера я видел ссылку, где кто-то упоминал, что это происходит, потому что каждое изменение обновляет поле, и список должен быть "кэширован" как массив ( Почему событие изменения списка выпадающих списков (Excel VBA) срабатывает при каждом обращении к одному из его свойств? ).Как бы я поступил так, если бы длина моего списка постоянно менялась, и я не могу ctrl + shift + ввести 500 ячеек одновременно (это будет работать?)
Вот некоторые коды и формулы.Я внештатный перевод с французского, так что могут быть опечатки формулы.Скажем, Sheet1 - это то место, где находится мой ComboBox.
Формула ячейки, используемая для заполнения именованного списка (я не думаю, что это действительно актуально)
=IFERROR(INDEX(Sheet2!$H$2:$H$501;MATCH(ROWS(Sheet1!$B$1:B1);Sheet1!$B$1:$B$503;0));"")
Мой ComboBox VBA выглядит следующим образом:
Private Sub ComboBox1_Change()
ComboBox1.ListFillRange = "DropDownList"
Me.ComboBox1.DropDown
Range("H1").Value = 1
End Sub
Диапазон («H1») для этого не важен, он сбрасывает счетчик, чтобы сбрасывались мои кнопки просмотра изображения «Далее» и «Предыдущий».
Именованный диапазон (динамическая длина), гдеA дает мне 1/0 частичное совпадение с моим «поиском» в ComboBox, B дает мне счетчик того, сколько частичных совпадений я получаю, а C перечисляет значения, заполняющие раскрывающийся список из другой вкладки.
ДонНе думаю, что это полезно, но вот эти форумчане.Нет определенного листа означает Лист1.
A:
=--ISNUMBER(IFERROR(SEARCH(Sheet1!$D$1;Sheet2!H2;1);""))
B:
=IF(A1=1;SUMIF($A$1:A1;1);"")
C:
=Sheet1!$C$1:INDEX(Sheet1!$C$1:$C$503;MAX(Sheet1!$B$1:$B$503);1)
РЕДАКТИРОВАТЬ: В ответ на Ника, дальнейшие разъяснения.Я в основном ищу другой способ написания макроса, чтобы он не выполнялся после каждого изменения рабочего листа, даже если он не влияет на его динамический список.Я забыл упомянуть в главном потоке, но если мой ComboBox пуст (так что ничего не отфильтровано из столбцов от A до C и список имеет «максимальную емкость»), тогда моя Undo работает просто отлично, но как только она появляетсячто-то в ComboBox (или соответствующей ячейке) оттуда я не могу отменить.