Требуется выполнить обычный выпадающий список с перечнем существующих листов книги Прошу помочь с формулой в "Проверке данных" - "Список" - "Источник"
Требуется выполнить обычный выпадающий список с перечнем существующих листов книги Прошу помочь с формулой в "Проверке данных" - "Список" - "Источник"Vasil74
Vasil74, Вы подразумеваете список который автоматически строится? Ищите на форуме. Есть способ вытащить. Пример в приложении, автор ответа, buchlotnik.
Vasil74, Вы подразумеваете список который автоматически строится? Ищите на форуме. Есть способ вытащить. Пример в приложении, автор ответа, buchlotnik.bmv98rus
Если именно выпадающий список листов, то можно сделать и макросом, при добавлении новых листов просто нажимай на кнопку и они тоже появятся в выпадающем списке... [vba]
Код
Sub SheetsToValidation() Dim i As Long, Arr() Dim shp As Worksheet ReDim Arr(1 To Sheets.Count) For i = 2 To Sheets.Count Arr(i) = Sheets(i).Name Next [A1].Validation.Delete [A1].Validation.Add Type:=xlValidateList, Formula1:=Join(Arr, ",") End Sub
[/vba]
Если именно выпадающий список листов, то можно сделать и макросом, при добавлении новых листов просто нажимай на кнопку и они тоже появятся в выпадающем списке... [vba]
Код
Sub SheetsToValidation() Dim i As Long, Arr() Dim shp As Worksheet ReDim Arr(1 To Sheets.Count) For i = 2 To Sheets.Count Arr(i) = Sheets(i).Name Next [A1].Validation.Delete [A1].Validation.Add Type:=xlValidateList, Formula1:=Join(Arr, ",") End Sub
Резюмируя вышесказанное: Если Вам в одну ячейку и при добавлении листа не забудете макрос запускать, то вариант ответа 3 - лучший выбор. только For i = 2 лучше заменить на For i = 1 (чтобы первый лист не терять) и [A1] заменить на Activecell (чтобы не в A1 помещать, а в выделенную ячейку). Но если таких ячеек много и нужно постоянно следить за пополнением списка в каждой, то для хранения списка листов лучше всего выбрать отдельный столбец какого-нибудь технического листа, чтоб кто-то не повредил. В источнике лучше задать динамический массив, например
А вот как его наилучшим образом пополнять - дело тонкое. Формулы - хорошо, но кончиться могут (если листы добавляются постоянно). Макрос - замечательно, но надо его грамотно на событие повесить, чтобы не запускался слишком часто, но и вновьдобавленные листы вовремя помещал или удаленные не зевал.
Резюмируя вышесказанное: Если Вам в одну ячейку и при добавлении листа не забудете макрос запускать, то вариант ответа 3 - лучший выбор. только For i = 2 лучше заменить на For i = 1 (чтобы первый лист не терять) и [A1] заменить на Activecell (чтобы не в A1 помещать, а в выделенную ячейку). Но если таких ячеек много и нужно постоянно следить за пополнением списка в каждой, то для хранения списка листов лучше всего выбрать отдельный столбец какого-нибудь технического листа, чтоб кто-то не повредил. В источнике лучше задать динамический массив, например
А вот как его наилучшим образом пополнять - дело тонкое. Формулы - хорошо, но кончиться могут (если листы добавляются постоянно). Макрос - замечательно, но надо его грамотно на событие повесить, чтобы не запускался слишком часто, но и вновьдобавленные листы вовремя помещал или удаленные не зевал.Perfect2You
Сообщение отредактировал Perfect2You - Воскресенье, 12.03.2017, 14:46
bmv98rus, спасибо воспользовался этим методом, после танца с бубнами и помощью других сайтов - заработало (не хотел диспетчер имен нагружать но пришлось)
n0leg68, спасибо, этот метод работает, но сильно отнимает время, в плане обновлений, + ко всему этот метод не растянешь по нескольким местам, не доработав макрос.
bmv98rus, спасибо воспользовался этим методом, после танца с бубнами и помощью других сайтов - заработало (не хотел диспетчер имен нагружать но пришлось)
n0leg68, спасибо, этот метод работает, но сильно отнимает время, в плане обновлений, + ко всему этот метод не растянешь по нескольким местам, не доработав макрос.Vasil74