Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выпадающий календарь - Страница 8 - Мир MS Excel

Старая форма входа
  • Страница 8 из 8
  • «
  • 1
  • 2
  • 6
  • 7
  • 8
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Выпадающий календарь (Для программирующих в среде VBA.)
Выпадающий календарь
Pelena Дата: Четверг, 24.11.2016, 18:16 | Сообщение № 141
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
George87, рекламу надо согласовывать с админом (Serge_007)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеGeorge87, рекламу надо согласовывать с админом (Serge_007)

Автор - Pelena
Дата добавления - 24.11.2016 в 18:16
SSL Дата: Вторник, 17.04.2018, 04:28 | Сообщение № 142
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Решил добавить сюда и свой вариант календаря.


SLAVICK, отличный календарь!
Перерыл кучу, и остановился на этом.

Начал подгонять под свои нужды...
В результате - перелопатил почти весь код, который стал еще меньше, :D
А функциональность, универсальность и скорость работы возросли в разы!
Может кому пригодится...

Добавлены:
- прокрутка по годам;
- всплывающие списки выбора месяца и года;
- ограничения по минимальному году и конечной дате;
- мелочи...



P.S. Если нужны комментарии или помощь в подключении - могу помочь... (пока еще помню что к чему :D)
К сообщению приложен файл: 2073684.png (10.4 Kb) · 5174847.xlsm (38.2 Kb)


Всего наилучшего!

Сообщение отредактировал SSL - Вторник, 17.04.2018, 04:32
 
Ответить
Сообщение
Решил добавить сюда и свой вариант календаря.


SLAVICK, отличный календарь!
Перерыл кучу, и остановился на этом.

Начал подгонять под свои нужды...
В результате - перелопатил почти весь код, который стал еще меньше, :D
А функциональность, универсальность и скорость работы возросли в разы!
Может кому пригодится...

Добавлены:
- прокрутка по годам;
- всплывающие списки выбора месяца и года;
- ограничения по минимальному году и конечной дате;
- мелочи...



P.S. Если нужны комментарии или помощь в подключении - могу помочь... (пока еще помню что к чему :D)

Автор - SSL
Дата добавления - 17.04.2018 в 04:28
SLAVICK Дата: Вторник, 17.04.2018, 13:07 | Сообщение № 143
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Перерыл кучу, и остановился на этом.

Почему на этом варианте, а не на этом?

неплохо вышло, но как по мне все листбоксы нужно также создавать программно, поскольку пропадает главная фишка:
быстрое изменение размеров календаря.

перелопатил почти весь код, который стал еще меньше,

ну с учетом дополнений - вырос почти на 1тыс. символов.
Еще пропало выделение сегодняшней даты - как по мне это важно.

Давно сделал себе возможность растягивания формы и программного изменения размеров - см. ссылку.
Применил и на Ваш вариант - так интереснее, чем не масштабируемый.
К сообщению приложен файл: 5174847_resize.xlsm (43.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Перерыл кучу, и остановился на этом.

Почему на этом варианте, а не на этом?

неплохо вышло, но как по мне все листбоксы нужно также создавать программно, поскольку пропадает главная фишка:
быстрое изменение размеров календаря.

перелопатил почти весь код, который стал еще меньше,

ну с учетом дополнений - вырос почти на 1тыс. символов.
Еще пропало выделение сегодняшней даты - как по мне это важно.

Давно сделал себе возможность растягивания формы и программного изменения размеров - см. ссылку.
Применил и на Ваш вариант - так интереснее, чем не масштабируемый.

Автор - SLAVICK
Дата добавления - 17.04.2018 в 13:07
SSL Дата: Среда, 18.04.2018, 11:34 | Сообщение № 144
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Почему на этом варианте, а не на этом?

Просто потому, что я его не видел - мой "поисковик" до него не добрался. :)
(Но может это и к лучшему... дальше поясню.)

листбоксы нужно также создавать программно

При необходимости, - это сделать не проблема. Просто не было такой задачи.


Всего наилучшего!
 
Ответить
Сообщение
Почему на этом варианте, а не на этом?

Просто потому, что я его не видел - мой "поисковик" до него не добрался. :)
(Но может это и к лучшему... дальше поясню.)

листбоксы нужно также создавать программно

При необходимости, - это сделать не проблема. Просто не было такой задачи.

Автор - SSL
Дата добавления - 18.04.2018 в 11:34
SSL Дата: Среда, 18.04.2018, 11:35 | Сообщение № 145
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
ну с учетом дополнений - вырос почти на 1тыс. символов.

Немного некорректно выразился, (из-за краткости), - под уменьшением размера кода я подразумевал конечно исходник, без учета дополнений,
особенно, в его главной функциональной части, которую постоянно дергаем - процедуры Refresh и MouseMove.
(С этого работа начиналась. Дополнения появились позже.)
Но важнее, (для меня), - конечно не его размер, (это скорей попутный незначимый бонус), а оптимизация и существенно возросшая скорость работы.
При этом мои дополнения на это никак не повлияли - остались в рамках...

При неизменности идеи:
- полностью изменены алгоритмы построения и заполнения матрицы календаря, исключив ВСЕ проверки из циклов кода Refresh! :)
(А их там было очень много.)
А вне циклов работают всего 2 простые проверки на всю процедуру.

- Убран ненужный промежуточный 3-х мерный массив, - календарь сразу создается и обрабатывается на своем основном массиве.

- Сами циклы стали короче на 1 ряд (-1 строка х 7 столбцов), т.к. заголовок, (дни недели), создается 1 раз при инициализации, и больше не участвует в циклах Refresh и MouseMove. Т.е. в основном массиве календаря его просто нет.

- В результате, стало меньше проверок и в коде MouseMove, а оставшиеся тоже оптимизированы.

- Попутно, в блок инициализации календаря была вынесена вся "боевая" раскраска календаря (Fore/Back...), таким образом можно оперативно/интуитивно управлять цветом любых частей, а при необходимости - легко добавить новые.

- Добавлена "рамка прицела" - выделяющая дату под курсором.

- Еще всякие мелочи в том же духе.


Всего наилучшего!
 
Ответить
Сообщение
ну с учетом дополнений - вырос почти на 1тыс. символов.

Немного некорректно выразился, (из-за краткости), - под уменьшением размера кода я подразумевал конечно исходник, без учета дополнений,
особенно, в его главной функциональной части, которую постоянно дергаем - процедуры Refresh и MouseMove.
(С этого работа начиналась. Дополнения появились позже.)
Но важнее, (для меня), - конечно не его размер, (это скорей попутный незначимый бонус), а оптимизация и существенно возросшая скорость работы.
При этом мои дополнения на это никак не повлияли - остались в рамках...

При неизменности идеи:
- полностью изменены алгоритмы построения и заполнения матрицы календаря, исключив ВСЕ проверки из циклов кода Refresh! :)
(А их там было очень много.)
А вне циклов работают всего 2 простые проверки на всю процедуру.

- Убран ненужный промежуточный 3-х мерный массив, - календарь сразу создается и обрабатывается на своем основном массиве.

- Сами циклы стали короче на 1 ряд (-1 строка х 7 столбцов), т.к. заголовок, (дни недели), создается 1 раз при инициализации, и больше не участвует в циклах Refresh и MouseMove. Т.е. в основном массиве календаря его просто нет.

- В результате, стало меньше проверок и в коде MouseMove, а оставшиеся тоже оптимизированы.

- Попутно, в блок инициализации календаря была вынесена вся "боевая" раскраска календаря (Fore/Back...), таким образом можно оперативно/интуитивно управлять цветом любых частей, а при необходимости - легко добавить новые.

- Добавлена "рамка прицела" - выделяющая дату под курсором.

- Еще всякие мелочи в том же духе.

Автор - SSL
Дата добавления - 18.04.2018 в 11:35
SSL Дата: Среда, 18.04.2018, 11:37 | Сообщение № 146
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
главная фишка:
быстрое изменение размеров календаря.

Ну так у нас разные задачи.

Мои:

1. Код должен быть максимально легким, (быстрым), и, по возможности, универсальным для возможности его дальнейшей адаптации к разным задачам.
(Почему и был выбран именно ваш код! Он достаточно легкий, хорошо читается и легко обрабатывается/дорабатывается - что и было выполнено, прежде всего, в его основе. :)
Т.е. мой вариант - это, скорей, самодостаточная в своей основе, оптимальная/универсальная болванка для возможных дальнейших улучшений.)

2. Масштабируемость/динамичнось изменения размеров меня как раз не интересовала. Скорей наоборот - мой календарь должен быть, по возможности, максимально миниатюрным, и не иметь проблем со шрифтами. (Последние неизбежно появляются при изменении размеров различных контролов или просто их перемещения - давний глюк MS - отдельная тема.
И, к сожалению, обе версии ваших календарей этим страдают.)

пропало выделение сегодняшней даты - как по мне это важно.

Не понял...
На скрине выше видно, - текущая дата выделена рыжим цветом. Кроме того, при наведении курсора, в ваших календарях как раз текущая дата никак не отмечается, в моем - выделяется рамкой/"прицелом". Только ее основной цвет фона не стал менять, так же как у вас.


Всего наилучшего!
 
Ответить
Сообщение
главная фишка:
быстрое изменение размеров календаря.

Ну так у нас разные задачи.

Мои:

1. Код должен быть максимально легким, (быстрым), и, по возможности, универсальным для возможности его дальнейшей адаптации к разным задачам.
(Почему и был выбран именно ваш код! Он достаточно легкий, хорошо читается и легко обрабатывается/дорабатывается - что и было выполнено, прежде всего, в его основе. :)
Т.е. мой вариант - это, скорей, самодостаточная в своей основе, оптимальная/универсальная болванка для возможных дальнейших улучшений.)

2. Масштабируемость/динамичнось изменения размеров меня как раз не интересовала. Скорей наоборот - мой календарь должен быть, по возможности, максимально миниатюрным, и не иметь проблем со шрифтами. (Последние неизбежно появляются при изменении размеров различных контролов или просто их перемещения - давний глюк MS - отдельная тема.
И, к сожалению, обе версии ваших календарей этим страдают.)

пропало выделение сегодняшней даты - как по мне это важно.

Не понял...
На скрине выше видно, - текущая дата выделена рыжим цветом. Кроме того, при наведении курсора, в ваших календарях как раз текущая дата никак не отмечается, в моем - выделяется рамкой/"прицелом". Только ее основной цвет фона не стал менять, так же как у вас.

Автор - SSL
Дата добавления - 18.04.2018 в 11:37
SSL Дата: Среда, 18.04.2018, 11:51 | Сообщение № 147
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Вот так выглядит у меня текущая дата при наведенном на нее курсоре

К сообщению приложен файл: 9436893.png (21.0 Kb)


Всего наилучшего!
 
Ответить
СообщениеВот так выглядит у меня текущая дата при наведенном на нее курсоре


Автор - SSL
Дата добавления - 18.04.2018 в 11:51
SLAVICK Дата: Среда, 18.04.2018, 12:19 | Сообщение № 148
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
при наведенном на нее курсоре

вот именно, что при наведении на нее курсора - а у мну она подсвечивается сразу - так удобнее
ИМХО
Кстати обновил свой календарь тут

ЗЫ вы перевложили файл? у меня в том что я вчера скачал текущая дата никак не подсвечивалась...


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
при наведенном на нее курсоре

вот именно, что при наведении на нее курсора - а у мну она подсвечивается сразу - так удобнее
ИМХО
Кстати обновил свой календарь тут

ЗЫ вы перевложили файл? у меня в том что я вчера скачал текущая дата никак не подсвечивалась...

Автор - SLAVICK
Дата добавления - 18.04.2018 в 12:19
SSL Дата: Среда, 18.04.2018, 12:25 | Сообщение № 149
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
вы перевложили файл? у меня в том что я вчера скачал текущая дата никак не подсвечивалась...

Нет, файл не менял! (Это видно по дате/времени последней правки поста.)
Возможно был какой-то глюк...


Всего наилучшего!

Сообщение отредактировал SSL - Среда, 18.04.2018, 12:32
 
Ответить
Сообщение
вы перевложили файл? у меня в том что я вчера скачал текущая дата никак не подсвечивалась...

Нет, файл не менял! (Это видно по дате/времени последней правки поста.)
Возможно был какой-то глюк...

Автор - SSL
Дата добавления - 18.04.2018 в 12:25
SLAVICK Дата: Среда, 18.04.2018, 12:51 | Сообщение № 150
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
не не глюк сначала не понял - просто я сделал конечную дату не сегодня - а 2100 год - закомментил/раскомментил строки в Вашем файле.
Так вот при изменении финишной даты - не подсвечивает. См. Файл.
На быстродействии - действительно, возможно будет быстрее. Я свой первоначальный код писал на скорую руку, особо не оптимизируя.
К сообщению приложен файл: 5174847-1-.xlsm (36.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениене не глюк сначала не понял - просто я сделал конечную дату не сегодня - а 2100 год - закомментил/раскомментил строки в Вашем файле.
Так вот при изменении финишной даты - не подсвечивает. См. Файл.
На быстродействии - действительно, возможно будет быстрее. Я свой первоначальный код писал на скорую руку, особо не оптимизируя.

Автор - SLAVICK
Дата добавления - 18.04.2018 в 12:51
SSL Дата: Среда, 18.04.2018, 15:29 | Сообщение № 151
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
сделал конечную дату не сегодня - а 2100 год

А... мой косяк!
Я сначала ограничивал календарь только по годам, а под конец решил добавить ограничитель по конкретной конечной дате, но не проверил варианты. Получилась подгонка. :(

В Refresh за ненадобностью выбросил двоичный флаг, и в последнем блоке заменил проверки:


Попутно добавил возможность изменения цвета шрифта текущего дня и удалил за ненадобностью в конце Repaint.

P.S. Выложил файл с исправлениями.
К сообщению приложен файл: -2.xlsm (39.0 Kb)


Всего наилучшего!

Сообщение отредактировал SSL - Среда, 18.04.2018, 17:04
 
Ответить
Сообщение
сделал конечную дату не сегодня - а 2100 год

А... мой косяк!
Я сначала ограничивал календарь только по годам, а под конец решил добавить ограничитель по конкретной конечной дате, но не проверил варианты. Получилась подгонка. :(

В Refresh за ненадобностью выбросил двоичный флаг, и в последнем блоке заменил проверки:


Попутно добавил возможность изменения цвета шрифта текущего дня и удалил за ненадобностью в конце Repaint.

P.S. Выложил файл с исправлениями.

Автор - SSL
Дата добавления - 18.04.2018 в 15:29
SSL Дата: Среда, 18.04.2018, 18:01 | Сообщение № 152
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
первоначальный код писал на скорую руку

Да это видно и претензий к этому, естественно, нет.
Спасибо что вообще выложили готовый код - было от чего оттолкнуться!

действительно, возможно будет быстрее

Ну тут все просто.
Если подсчитать кол-во проверок "If" только в циклах, (а это одна из самых тормозных операций),
то в процедуре Refresh, которую дергаем при каждом изменении месяца или года, получается 50 явных.
С учетом основной составной проверки, уже = 100.

+ пересоздание 49 контролов при каждом вызове:
Set .DBt = MyCalendar.Fr1.Controls.Add...
- тоже не быстрая процедура.
(Это все то, что вообще отсутствует в моей модернизации и циклы уменьшены до 42 за счет удаления из них заголовка календаря + по мелочи...)

Ну а практически, - на моем компе i7-5820K, (правда видеокарта сейчас древняя, нормальная полетела),
например, если зажать любую стрелку прокрутки по месяцам или годам, и прогнать календарь несколько раз туда-сюда,
начинаются весьма заметные тормоза даже при перемещении курсора по календарю, как буд-то внутри начинаются какие-то переполнения или зацикливания. Это значит, что на слабых компах тормоза могут быть заметны и без таких издевательств. :)
Если поставить таймер, не сомневаюсь что разница будет, т.к. после модернизации тормозов таким образом добиться мне не удавалось, а сама прокрутка, сразу, даже визуально, - заметно быстрее.

Ну и если есть возможность сделать код более оптимальным, то было бы странно этого не сделать. Тем более, с учетом дальнейших апгредов/наворотов, при расширении кода, тормоза имеют свойства накапливаться и обнаруживать себя совершенно непонятным образом...


Всего наилучшего!
 
Ответить
Сообщение
первоначальный код писал на скорую руку

Да это видно и претензий к этому, естественно, нет.
Спасибо что вообще выложили готовый код - было от чего оттолкнуться!

действительно, возможно будет быстрее

Ну тут все просто.
Если подсчитать кол-во проверок "If" только в циклах, (а это одна из самых тормозных операций),
то в процедуре Refresh, которую дергаем при каждом изменении месяца или года, получается 50 явных.
С учетом основной составной проверки, уже = 100.

+ пересоздание 49 контролов при каждом вызове:
Set .DBt = MyCalendar.Fr1.Controls.Add...
- тоже не быстрая процедура.
(Это все то, что вообще отсутствует в моей модернизации и циклы уменьшены до 42 за счет удаления из них заголовка календаря + по мелочи...)

Ну а практически, - на моем компе i7-5820K, (правда видеокарта сейчас древняя, нормальная полетела),
например, если зажать любую стрелку прокрутки по месяцам или годам, и прогнать календарь несколько раз туда-сюда,
начинаются весьма заметные тормоза даже при перемещении курсора по календарю, как буд-то внутри начинаются какие-то переполнения или зацикливания. Это значит, что на слабых компах тормоза могут быть заметны и без таких издевательств. :)
Если поставить таймер, не сомневаюсь что разница будет, т.к. после модернизации тормозов таким образом добиться мне не удавалось, а сама прокрутка, сразу, даже визуально, - заметно быстрее.

Ну и если есть возможность сделать код более оптимальным, то было бы странно этого не сделать. Тем более, с учетом дальнейших апгредов/наворотов, при расширении кода, тормоза имеют свойства накапливаться и обнаруживать себя совершенно непонятным образом...

Автор - SSL
Дата добавления - 18.04.2018 в 18:01
Мир MS Excel » Вопросы и решения » Готовые решения » Выпадающий календарь (Для программирующих в среде VBA.)
  • Страница 8 из 8
  • «
  • 1
  • 2
  • 6
  • 7
  • 8
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!