Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Выпадающий список из дат без создания отдельного списка.
 
Добрый день.
Возможно ли сделать выпадающий список дат исходя из сегодняшней даты на завтра, послезавтра и т.д.
Формульно это выглядит так:
=сегодня()+1
=сегодня()+2
......
=сегодня()+7
Создавать где-то отдельно список и "прятать" его - это понятно, хочется сделать "изящно"
Через "Проверку данных" пробывал, не получается :(
 
а чем не устраивает выпадающий календарь в ячейке, благо есть стандартный, есть еще куча календарей от энтузиастов на этом форуме. выбор даты из выпадающего списка не совсем удобно, если в списке будет много дат.
 
спрятать на другой лист(скрытый) - ничего изящнее не придумывается

можно, например, макросом менять проверку данных при активации листа, но это ничуть не изящнее, как мне кажется
Живи и дай жить..
 
Цитата
Слэн написал: макросом менять проверку данных при активации листа
Я бы так и делал )
 
Код
Private Sub Worksheet_Activate()
Dim i As Long
    ReDim Arr(1 To 7)
    For i = 1 To 7
        Arr(i) = Date - 1 + i
    Next
    [C2].Validation.Delete
    [C2].Validation.Add Type:=xlValidateList, Formula1:=Join(Arr, ",")
End Sub
Или лучше на активацию ячейки?
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Long
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C2")) Is Nothing Then
        ReDim Arr(1 To 7)
        For i = 1 To 7
            Arr(i) = Date - 1 + i
        Next
        [C2].Validation.Delete
        [C2].Validation.Add Type:=xlValidateList, Formula1:=Join(Arr, ",")
    End If
End Sub
 
или
Код
Private Sub Worksheet_Activate()
Dim i As Long
    ReDim arr(6)
    arr(0) = Date
    For i = 1 To 6
        arr(i) = arr(i - 1) + 1
    Next
   [C2].Validation.Modify Formula1:=Join(arr, ",")
End Sub
Живи и дай жить..
 
Ну что это такое Arr(i) = Date - 1 + i???

Код
Private Sub Worksheet_Activate()
Dim i As Long
 Dim arr(6)
    For i = 0 To 6
        arr(i) = Date + i
    Next
         [C2].Validation.Delete
        [C2].Validation.Add Type:=xlValidateList, Formula1:=Join(arr, ",")
End Sub
 
Вчера+1 (для первого шага цикла) :)
 
Код
Join(arr, ",")
Особенно прикольно будет, если данная строка будет более 255 символов длиной :-)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Юра, первый шаг цикла у вас i=1, и получаем первый шаг Date - 1 + 1.
 
Дим, не будет: всего семь дат )
Миша, а что не так? Первый шаг: сегодня - 1 + 1 = Сегодня)
 
Ну это для примера 7 дат. Мало ли что там автор придумает - например на месяц. Уже не влезет...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Доброго утра!
antal10:  "Стандартные" календари выложенные в Приёмах http://www.planetaexcel.ru/techniques/6/50/
не подходят т.к. большинство из них устанавливается в надстройках, а файл расылается по электронке.
Да и не нужна такая "крутизна"

сегодня()+7 - это я лишканул))) на практике пока встречалось максимум на 4 дня вперёд и только начиная с завтра.
Где нужно разместить код?  На отдельном модуле или на листе? Ексель 97-2003
Как понял [C2] - ячейка - при активации которой должен появиться список. Пока не работает ни один из кодов((
Изменено: SNMel - 15 Апр 2015 09:26:21
 
вот
Живи и дай жить..
 
Слэн Огромное спасибо - именно то что нужно!
Только немного переделал, чтоб начиналось с "завтра". В конечном итоге:
Код
Sub setval()
Dim i As Long
    ReDim arr(6)
    arr(0) = Date + 1
    For i = 1 To 6
        arr(i) = arr(i - 1) + 1
    Next
   [C2].Validation.Modify Formula1:=Join(arr, ",")
End Sub
 
Сейчас код в Вашем сообщении смотрится лучше? Волшебство кнопки <...>
 
Смотрится то он лучше, не спорю.
Вот только при копировании с форума и вставки в модуль вставляется всё одной строкой.
 
При копировании с форума и вставке в модуль у меня вставляется код в  нормальной структуре.
Для копирования выделяйте с первой буквы кода, а не с номера строки.
 
Да так делал, все равно вставляет одной строкой.
Жалко не могу вставить скрин.
Во всяком случае после вставки координатное окно VBA показывает : Ln1, Col177
с учётом всех пробелов соответствует :)
 
SNMel, интересно, а какой браузер вы пользуете?
Вроде раньше ни у кого таких глюков не замечалось.
 
Михаил С., у меня такой глюк тоже присутствует код копируется строкой если брать с эксплорера вот тут обсуждал, походу глюк именно в нем перешел на яндекс браузер все ок
Лень двигатель прогресса, доказано!!!
Страницы: 1
Читают тему (гостей: 1)