Всем доброго дня. Есть много практически одинаковых страниц (около 100 штук). Кроме этого, есть и другие отличающиеся от них страницы. На всех 100 похожих страницах есть диапазон (A3:A17) для которых нужен выпадающий список с поиском. Поиск нужен потому что сейчас там порядка 200 наименований и список может рости. Кстати, список размещен на другой странице этой же книги. Метод, показанный Николаем Павловым Выпадающий список с быстрым поиском (planetaexcel.ru), как раз то, что мне нужно (при наборе "ко", чтобы выходили и "кости" и "молоко" и "окорок"), но он мне не подошел, потому что, насколько я понял, его трудно применить для большого количества ячеек. Может быть какой-то еще вариант?
New написал: файл-пример приложите, а укажите где должен быть этот список (какой лист и ячейка) и с каких листов брать данные - мы подумаем
1. Excel 2010 2. Название файла меняется каждый день в зависимости от даты. 3. Список на листе "Не заходить" B2:B184 и может расти. 4. Диапазон для которого нужен выпадающий список на странице "1" A3:A17 и таких страниц будет более 100шт (с именами 1, 2, 3 и так далее)
DanKZ написал: таких страниц будет более 100шт (с именами 1, 2, 3 и так далее)
Зачем? Судя по описанию - решение простое: списку присвоить имя и макросом раскидываете список по листам. А вот зачем формулы в ячейках со списком? Наверное, Вы описываете в теме какой-то этап решения Вашей задачи. Опишите Вашу основную задачу - что должен делать этот файл.
Этот файл я готовлю для работы моей службы доставки еды. Он делает много чего. Основная цель сделать файл комфортным для оператора, принимающего заказы. Я выложил только часть файла, чтобы не отвлекать от вопроса, который меня интересует. Я немного разбираюсь в формулах, но ничего не понимаю в макросах, поэтому именно при помощи формул, я решил проблему отображения всех блюд при выборе определенных наборов (сетов). Вопрос с выпадающим списком решить формулами не смог, много пересмотрел видео и прочитал статей, поэтому обратился на форум, чтобы получить помощь в написании макроса.
Я вам премного благодарен, что вы потратили свое время, но такая форма замедляет процесс приема заказа. Представьте вы звоните в службу доставки еды и делаете заказ. Если вы знаете, что хотите заказать, то вы делаете заказ очень быстро и вас расстраивает, если оператор делает это медленно. Поэтому важно, чтобы это было с минимальным количеством нажатий. Раньше мы использовали Проверку данных - Список - Указывали диапазон в котором был список блюд - Отключали сообщение об ошибке, но потом я увидел метод Николая Павлова и понял, что такой результат для нас идеален, но само решение нереально. Я понял, что это можно сделать макросом, но не знаю как.
DanKZ написал: важно, чтобы это было с минимальным количеством нажатий.
DanKZ, вариант от New очень хороший и универсальный, просто в модули всех листов с заказами (1, 2, 3 и т.д. - кроме листа "Не заходить") добавьте:
Код
Private Sub Worksheet_Activate()
Range("A2").Value = "Блюдо"
Range("F2").Value = "Кол-во"
Range("A3:D" & Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents
Range("F3:F" & Cells(Rows.Count, 6).End(xlUp).Row + 1).ClearContents
frmOrder.Show
End Sub
И в модуле формы (кнопка "Добавить в заказ" - процедура Private Sub cmbAddToOrder_Click() уберите строчку:
Код
MsgBox "Блюдо добавлено!", vbInformation, "Заказ"
И будет Вам счастье И имейте ввиду, что из-за объединенных ячеек когда-то, возможно очень скоро, можете получить лишнюю головную боль. Удачи! P.S. И еще желательно добавить проверку на число в окне для ввода "кол-во", чтобы не выскакивала ошибка. если оператор вместо цифр введет буквы, но это уже другая тема...
DanKZ, я имею ввиду, что объединенные ячейки хороши для оформления, но не для вычислений. Теперь насчет формул в ячейках со списком: Вы помещаете формулы в ячейки с выпадающим списком, и после того, как из списка выбрано значение, в ячейке будет значение, а не формула, (т.е. формулы в ячейке уже не будет), что Вам и показал New в примере из #8: формулы в столбце "А" не нужны совсем, всё делается через пользовательскую форму. А вот это:
Цитата
DanKZ написал: иногда при указании ячейки в формулу вставляется "двойной адрес" и рабочая формула может не работать?
нужно делать без "иногда", а то когда много "иногда" наберется, все равно придете к выводу, что изначально не так всё делали. Поэтому и был вопрос в #5:
Цитата
_Igor_61 написал: Опишите Вашу основную задачу - что должен делать этот файл
Задачу, а не способы, которыми Вы пытаетесь Вашу задачу решить. тогда Вам бы подсказали наиболее лучший способ решения Вашей задачи. Скорее всего и не нужно будет сотни листов, но Вы ответили, что Ваш файл
Очень содержательно Исходя из описания задачи - в ответах совокупно в #8 и в уточнении в #10 Вам предложен вариант, который вполне решает Вашу задачу - поиск по буквам производится, количества нажиманий сведены к минимуму: форма открывается при переходе на лист с заказом (нажимать ничего не надо, кроме ярлычка листа, на который переходите), потом начинаете набирать буквы - список сокращается, выбираете нужное и ставите количество (тут к сожалению придется ручками цифры нажимать, т.к. если просто скажешь или подумаешь "пять" или "десять" - Excel может неправильно понять) . Задача выполнена?
_Igor_61 написал: DanKZ , я имею ввиду, что объединенные ячейки хороши для оформления, но не для вычислений.
Тут я с вами полностью согласен.
Цитата
_Igor_61 написал: Вы помещаете формулы в ячейки с выпадающим списком, и после того, как из списка выбрано значение, в ячейке будет значение, а не формула, (т.е. формулы в ячейке уже не будет),
Этот файл - шаблон. В начале каждой смены оператор открывает данный файл и сохраняет его под другим именем и использует уже сохраненный файл. Формулы в столбце А вставлены потому, что при выборе определенных сетов в подарок идут определенные блюда. Например, при выборе сета Мега в подарок идет 2 пиццы и напиток. Формулы позволяют вставить автоматически эти подарки в строки, идущие после строки с сетом и таким образом решается проблема, что повара могут забыть приготовить определенные позиции. Тот факт, что каждая страница (1, 2, 3 и т.д) - это отдельный заказ и будет заполняться и распечатываться только 1 раз "решает" проблему замены формулы значением.
Цитата
_Igor_61 написал: Поэтому и был вопрос в #5:Цитата _Igor_61 написал: Опишите Вашу основную задачу - что должен делать этот файл
Под фразой Он делает много чего, я подразумевал, что у файла много других функций на других страницах, которые я удалил, чтобы не отвлекать участников форума от основной задачи: он собирает данные о клиентах, считает зарплаты курьеров, фиксирует расстояние до адресов клиентов, помогает собирать статистику по наличным и безналичным платежам, фиксировать заказы приходящие от посредников (агрегаторов) и прямые заказы, фиксирует данные по развозке сотрудников и взятые ими авансы. Возможно, надо было отправить файл целиком.
Цитата
_Igor_61 написал: количества нажиманий сведены к минимуму
В рамках наших реалий можно еще оптимизировать. 1. Практика показывает, что в 80% случаев заказывается каждой позиции по 1 шт. Можно ли сделать так, чтобы при выборе блюда в форме автоматически ставилось количество 1 и в случае необходимости оператор смог бы отредактировать это количество? 2. Можно сделать так, чтобы для выхода из формы достаточно было нажать клавишу ESC на клавиатуре? 3. Можно сделать так, чтобы при наборе текста в строке поиска можно было выбрать из сокращенного текста нужное блюдо при помощи клавиш Tab, вверх-вниз и Enter?
DanKZ написал: при выборе сета Мега в подарок идет 2 пиццы и напиток
ну, в принципе, тоже можно попробовать реализовать. Блюдо называется "Сет Мега"? А какие 2 пиццы добавлять и какой напиток ? Если точно известно какие пиццы и напиток, то можно добавлять их после Сет Мега автоматом. А можно просто выводить сообщение "Добавьте в заказ 2 пиццы и напиток, т.к. клиент выбрал Сет Мега" (после того как Сет Мега был добавлен), т.е. сделать напоминание после выбора Сет Мега, чтобы официант не забывал их добавлять. Вот добавил информационное сообщение, если заказали Сет Мега