Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Зависимые раскрывающиеся списки с выбором времени!

Автор evgenka8888, 22.05.2024, 09:40:12

« назад - далее »

evgenka8888

Здравствуйте!
Подскажите пожалуйста, как сделать выпадающие списки с выбором временных промежутков для составления заявки. В форме присутствуют графы времени начала и окончания заявки.
В списке "начало" присутствуют пункты 9:30, 10:00, 10:30, 11:00 и т.д. до вечера за исключением обеденного перерыва. Хочу сделать, чтобы при выборе "начала" в списке, например, 10:30, в графе "окончание" не было пунктов ранее 10:30, а начиналось уже с 11:00 и не было пунктов со временем на "после обеда.

ТО ЕСТЬ:
заявку можно было подать в промежутке с 9:30 до 12:30 и промежутке с 14:30 до 17:30.
чтобы при выборе времени начала "утром" список ограничивался 12:30, а при выборе времени "после обеда" в списке окончания не было бы возможности ставить время ранее начала заявки. Просмотрел кучу видеороликов об этом, но столкнулся с проблемой названия именованных списков (нельзя начинать название с цифры, невозможно ставить знаки "-" и ":").

Так же, в таблице будет количество одинаковых листов, равных количеству дней в месяце. То есть, один файл таблицы на один месяц и на каждом листе будет до 20 строк с выбором времени заявки.


Заранее спасибо!

Дмитрий Щербаков(The_Prist)

Добрый день.
1. Нет ссылки на файл, что значительно снижает желание помочь :)
2. Даже на скрине нет никакой привязки к "утром" и "после обеда", что делает невозможным создать даже начальный список.
3. По сути Гугл не поддерживает стандартными средствами динамическое изменение выпадающих списков по условиям. Здесь только скрипты писать надо и не думаю, что это будет выглядеть вполне удобно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

evgenka8888

#2
https://docs.google.com/spreadsheets/d/103ZIf7M9ygj3UDSQxlduBHSbTXCOlW4mAR_Rpdktesg/edit

Да, простите. Вот ссылка.

casag

Добрый день! Попробуйте такой вариант с макросом. После выбора времени в столбце "А" желательно сделать секундную паузу, а потом переходить к выбору в столбце "В", чтобы макрос успел отработать.

https://docs.google.com/spreadsheets/d/1bTV-DMY7TwFoe0ob1F3jvNKEqreSjGublRxpKxWiOWM/edit?usp=sharing

[code=vb]function onEdit(e) {
  const specificSheet = "Системный лист"   // имя листа, на котором НЕ будет отслеживания изменений значений ячеек     
  const specificCellColumn = 1    // номер столбца для отслеживания изменений     

  let sheetCheck = (e.range.getSheet().getName() != specificSheet)
  let cellCheck = (e.range.getColumn() == specificCellColumn)

  if (!(sheetCheck && cellCheck)) {
    return
  }
  else {
    let spreadsheet = SpreadsheetApp.getActive();
    let shS = spreadsheet.getSheetByName("Системный лист");
    shS.getRange('M3:M14').clearContent()
    const cellValue = e.range.getDisplayValue()
    let arr1 = [['9:30:00'], ['10:00:00'], ['10:30:00'], ['11:00:00'], ['11:30:00'], ['12:00:00'], ['12:30:00']]
    let arr2 = [['14:30:00'], ['15:00:00'], ['15:30:00'], ['16:00:00'], ['16:30:00'], ['17:00:00'], ['17:30:00']]
    let index = arr1.flat().indexOf(cellValue)
    if (index !== -1) {
      arr1.splice(0, index + 1)
      shS.getRange(3, 13, arr1.length).setValues(arr1)
    }
    else {
      index = arr2.flat().indexOf(cellValue)
      arr2.splice(0, index + 1)
      shS.getRange(3, 13, arr2.length).setValues(arr2)
    }
  }
}
[/code]

evgenka8888

Спасибо тебе, мил человек! Пока ехал на работу, все думал, как этот самый скрипт прикрутить, а ты оказывается уже все сделал! Нижайший тебе поклон!

evgenka8888

Однако, столкнулся с проблемой. Скрипт не работает, если нет авторизации в гугле. То есть, если человек, у которого нет гугловской почты, попытается пользоваться данной таблицей, захочет подать заявку, то у него ничего не выйдет. Печалька...
Пробовал разные настройки доступа от локальных ограничений до полного карт-бланша. Скрипт так и не завелся.

Спасибо всем за помощь! Будем контролировать в "ручном" режиме, как и раньше.

Яндекс.Метрика Рейтинг@Mail.ru