А вот здесь я не согласен. Календарик работает в какой-то книге - вот в неё и надо сохранять настройки (всегда можно добавить скрытый лист). А засорять реестр не стоит
А вот здесь я не согласен. Календарик работает в какой-то книге - вот в неё и надо сохранять настройки (всегда можно добавить скрытый лист). А засорять реестр не стоитSkif-F
Календарик работает в какой-то книге - вот в неё и надо сохранять настройки .
Можно и на листе сохранять, но если календарь работает как надстройка, тогда и сохранять надо в надстройке. добавил лист "mySetting" и код изменил соответственно:
[vba]
Код
' В Public Function NewShow меняем:
If IsEmpty(ThisWorkbook.Sheets("mySetting").Range("A1")) = True Then Me.Left = 350 Me.Top = 250 Else Me.Left = ThisWorkbook.Sheets("mySetting").Range("A1").Value Me.Top = ThisWorkbook.Sheets("mySetting").Range("A2").Value End If '========================================
'перед закрытием формы сохраняем координаты на листе "mySetting" Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ThisWorkbook.Sheets("mySetting").Range("A1").Value = Me.Left ThisWorkbook.Sheets("mySetting").Range("A2").Value = Me.Top End Sub
Календарик работает в какой-то книге - вот в неё и надо сохранять настройки .
Можно и на листе сохранять, но если календарь работает как надстройка, тогда и сохранять надо в надстройке. добавил лист "mySetting" и код изменил соответственно:
[vba]
Код
' В Public Function NewShow меняем:
If IsEmpty(ThisWorkbook.Sheets("mySetting").Range("A1")) = True Then Me.Left = 350 Me.Top = 250 Else Me.Left = ThisWorkbook.Sheets("mySetting").Range("A1").Value Me.Top = ThisWorkbook.Sheets("mySetting").Range("A2").Value End If '========================================
'перед закрытием формы сохраняем координаты на листе "mySetting" Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ThisWorkbook.Sheets("mySetting").Range("A1").Value = Me.Left ThisWorkbook.Sheets("mySetting").Range("A2").Value = Me.Top End Sub
Нашел неприятную недоработку. При изменении года нажатием на SpinButton, на нем фиксируется фокус и при переводе курсора на выбор времени не фокусируются SpinButtons подбора времени. По сути надо принудительно переводить фокус на ComboBox выбора месяца. Выглядит это очень непрезентабельно.
В прилагаемом файле все исправил. Если найдете еще косяки, пишите...
Нашел неприятную недоработку. При изменении года нажатием на SpinButton, на нем фиксируется фокус и при переводе курсора на выбор времени не фокусируются SpinButtons подбора времени. По сути надо принудительно переводить фокус на ComboBox выбора месяца. Выглядит это очень непрезентабельно.
В прилагаемом файле все исправил. Если найдете еще косяки, пишите...VovaK
VovaK, пожалуйста подскажите как при наличии двух текстбоксов с помощью вашего календаря вбить две даты? т.е. вызвав юзерформ на ней в текстбокс1 указать например 01.01.2016 а во второй например 31.03.2016
VovaK, пожалуйста подскажите как при наличии двух текстбоксов с помощью вашего календаря вбить две даты? т.е. вызвав юзерформ на ней в текстбокс1 указать например 01.01.2016 а во второй например 31.03.2016Azakia
VovaK, по первым постам нашел за глобальную переменную - получилось! сделал для одного текстбокса а вот про юсерформ 0 я не нашел... да ещё и не знаю как это))) если можете поясните пожалуйста про юсерформ 0
VovaK, по первым постам нашел за глобальную переменную - получилось! сделал для одного текстбокса а вот про юсерформ 0 я не нашел... да ещё и не знаю как это))) если можете поясните пожалуйста про юсерформ 0Azakia
Всем привет. Решил добавить сюда и свой вариант календаря. Когда-то делал для одного задания. Предельно простой, без лишних наворотов и код на порядок меньше .
Кнопки создаются динамически, поэтому - легко масштабируемый. Для этого достаточно поменять размер рамки - все кнопки будут создаваться под новый размер .
Всем привет. Решил добавить сюда и свой вариант календаря. Когда-то делал для одного задания. Предельно простой, без лишних наворотов и код на порядок меньше .
Кнопки создаются динамически, поэтому - легко масштабируемый. Для этого достаточно поменять размер рамки - все кнопки будут создаваться под новый размер . SLAVICK
здравствуйте вставил этот макрос в свой файл, при использование появился вопрос, как можно сделать так чтобы при нажатие на объединённую ячейку ( в прописанном диапазоне макроса) левой кнопкой мыши календарик тоже выскакивал.
здравствуйте вставил этот макрос в свой файл, при использование появился вопрос, как можно сделать так чтобы при нажатие на объединённую ячейку ( в прописанном диапазоне макроса) левой кнопкой мыши календарик тоже выскакивал.lazy
Здравствуйте! Понадобился календарь для проекта. Прочитал, сколько сейчас стало возникать проблем с `Элементом управления Календарь` (`Calendar Control`) и понял, что нужен календарь, не зависящий от библиотек сторонних производителей. К сожалению, по образованию я – не программист. Опыт VBA у меня не большой. Я прекрасно понимал, сколько(!) особенностей должен учитывать хороший календарь. Таким образом, самостоятельное его создание было для меня грандиозной(!!!) задачей. Поэтому ВЫРАЖАЮ ОГРОМНУЮ БЛАГОДАРНОСТЬ всем авторам, представившим здесь свои календари!!!
Здравствуйте! Понадобился календарь для проекта. Прочитал, сколько сейчас стало возникать проблем с `Элементом управления Календарь` (`Calendar Control`) и понял, что нужен календарь, не зависящий от библиотек сторонних производителей. К сожалению, по образованию я – не программист. Опыт VBA у меня не большой. Я прекрасно понимал, сколько(!) особенностей должен учитывать хороший календарь. Таким образом, самостоятельное его создание было для меня грандиозной(!!!) задачей. Поэтому ВЫРАЖАЮ ОГРОМНУЮ БЛАГОДАРНОСТЬ всем авторам, представившим здесь свои календари!!! George87
Сообщение отредактировал George87 - Четверг, 24.11.2016, 17:53
Предлагаю функциональность улучшить. Кнопочки соответствующие числам не попадающим в данный месяц у вас неактивны. Имеем просто "призраки" на форме, Вот предлагаю Вам сделать их тоже активными, пусть только шрифтом выделяются бледным плюс при клике по ним пусть месяц меняется на соответствующий, так-же как и при смене месяца в выпадающем списке. Эта улучшенная функциональность так-же и внешний вид улучшит, т.к неактивные кнопочки выглядят угрюмо и громоздко.
Решил попробовать свои силы. В результате получились следующие дополнения и изменения: 1. Добавлен выбор режима вставки дат на лист: – вставить только одну дату и время (форма работает в модальном режиме и закрывается после вставки даты на лист) – вставить несколько дат 2. Добавлен выбор способа вставки даты на лист: одиночным или двойным щелчком по числу на календаре. 3. Добавлена возможность выбора дат не текущего месяца. 4. Добавлены всплывающие подсказки с названием месяца над датами не текущего месяца. Если не текущими месяцами являются декабрь или январь, во всплывающие подсказки добавляется соответствующий год. 5. Добавлена опция выделения цветом субботы в качестве выходного дня. 6. Добавлена опция выделения цветом праздничных дней. Праздничные дни, которые не переносятся, выделяются цветом только после 1990 года. Конечно, и в этот период праздничные даты менялись. Это можно отразить в календаре. Однако такая работа требует много времени и не является задачей моего проекта. 7. Добавлена кнопка «Установить календарь на сегодня». 8. Добавлена возможность ручного ввода значений часов, минут и секунд (с фильтрацией введённых значений). 9. Добавлена возможность настройки внешнего вида основных элементов календаря без изменения кода макроса.
10. Перенесены макросы запуска календаря и вставки даты на лист. 11. Изменено направление прокрутки месяцев. 12. Исправлены ошибки, возникающие при не корректном ручном вводе значения года. 13. Исправлена ошибка `-2147467259 (80004005)`, возникающая при движении указателя мыши по числам месяца, если курсор остался в поле ввода значения года. 14. При смене года или месяца время теперь устанавливается на 00:00:00. Это логично, ведь в заголовке формы пишется 1-е число месяца. 15. Для исключения ошибок в макросе допустимый диапазон годов был ограничен от 2 до 9998. При этом следует отметить, что Excel работает только с датами после 01.01.1900. Более ранние даты воспринимаются только как текстовые строки или как даты после 2000 года (например, следующее содержание ячейки: 1.1.1 может быть воспринято как 01.01.2001). К тому же необходимо помнить о смене календарей в России: - «Декрет о введении в Российской республике западноевропейского календаря» от 26.01.1918 г.: после 31.01.1918 наступило 14.02.1918 - Смена календаря Петром I с 01.01.1700 г. - С 1492 года новый год начали отмечать с 01 или 21 сентября. - Раньше новый год отмечали 01 или 21 марта. Таким образом, я не могу гарантировать точное соответствие дней недели и чисел месяцев до 1918 года. Прошу историков не судить строго данный календарь. При необходимости можно будет внести поправки.
16. В файл с календарём добавлена инструкция.
al-Ex предлагал, чтобы при клике по числам не текущего месяца месяц менялся на соответствующий так же, как и при смене месяца в выпадающем списке. Это не сложно сделать. Однако не совсем понятно, зачем? Для перехода на другой месяц есть 2 элемента: выпадающий список и кнопки прокрутки. А щелчком по числу месяца пользователь вставляет дату на лист. Наверное, такую смену месяца можно предложить в качестве опции при вставке даты на лист ДВОЙНЫМ щелчком. Пишите, если кому-то это понадобится.
Я – любитель-самоучка. Поэтому сразу прошу прощения за оформление моего кода. Да, я пишу очень широко. Но иначе я сам потом не могу прочитать даже свои макросы.
Проводить полное тестирование календаря у меня нет сейчас возможности. Приму любые замечания и пожелания. В меру своих знаний готов помочь в работе над таким нужным проектом. Рекламные ссылки удалены
[p.s.] Размер файла с календарём получился больше 100 Kb, поэтому к сообщению он не прикрепился Вот ссылка на Yandex.диск: Версия календаря (ноябрь 2016 г.)
На форуме заметил интересное предложение по улучшению одного из календарей:
Предлагаю функциональность улучшить. Кнопочки соответствующие числам не попадающим в данный месяц у вас неактивны. Имеем просто "призраки" на форме, Вот предлагаю Вам сделать их тоже активными, пусть только шрифтом выделяются бледным плюс при клике по ним пусть месяц меняется на соответствующий, так-же как и при смене месяца в выпадающем списке. Эта улучшенная функциональность так-же и внешний вид улучшит, т.к неактивные кнопочки выглядят угрюмо и громоздко.
Решил попробовать свои силы. В результате получились следующие дополнения и изменения: 1. Добавлен выбор режима вставки дат на лист: – вставить только одну дату и время (форма работает в модальном режиме и закрывается после вставки даты на лист) – вставить несколько дат 2. Добавлен выбор способа вставки даты на лист: одиночным или двойным щелчком по числу на календаре. 3. Добавлена возможность выбора дат не текущего месяца. 4. Добавлены всплывающие подсказки с названием месяца над датами не текущего месяца. Если не текущими месяцами являются декабрь или январь, во всплывающие подсказки добавляется соответствующий год. 5. Добавлена опция выделения цветом субботы в качестве выходного дня. 6. Добавлена опция выделения цветом праздничных дней. Праздничные дни, которые не переносятся, выделяются цветом только после 1990 года. Конечно, и в этот период праздничные даты менялись. Это можно отразить в календаре. Однако такая работа требует много времени и не является задачей моего проекта. 7. Добавлена кнопка «Установить календарь на сегодня». 8. Добавлена возможность ручного ввода значений часов, минут и секунд (с фильтрацией введённых значений). 9. Добавлена возможность настройки внешнего вида основных элементов календаря без изменения кода макроса.
10. Перенесены макросы запуска календаря и вставки даты на лист. 11. Изменено направление прокрутки месяцев. 12. Исправлены ошибки, возникающие при не корректном ручном вводе значения года. 13. Исправлена ошибка `-2147467259 (80004005)`, возникающая при движении указателя мыши по числам месяца, если курсор остался в поле ввода значения года. 14. При смене года или месяца время теперь устанавливается на 00:00:00. Это логично, ведь в заголовке формы пишется 1-е число месяца. 15. Для исключения ошибок в макросе допустимый диапазон годов был ограничен от 2 до 9998. При этом следует отметить, что Excel работает только с датами после 01.01.1900. Более ранние даты воспринимаются только как текстовые строки или как даты после 2000 года (например, следующее содержание ячейки: 1.1.1 может быть воспринято как 01.01.2001). К тому же необходимо помнить о смене календарей в России: - «Декрет о введении в Российской республике западноевропейского календаря» от 26.01.1918 г.: после 31.01.1918 наступило 14.02.1918 - Смена календаря Петром I с 01.01.1700 г. - С 1492 года новый год начали отмечать с 01 или 21 сентября. - Раньше новый год отмечали 01 или 21 марта. Таким образом, я не могу гарантировать точное соответствие дней недели и чисел месяцев до 1918 года. Прошу историков не судить строго данный календарь. При необходимости можно будет внести поправки.
16. В файл с календарём добавлена инструкция.
al-Ex предлагал, чтобы при клике по числам не текущего месяца месяц менялся на соответствующий так же, как и при смене месяца в выпадающем списке. Это не сложно сделать. Однако не совсем понятно, зачем? Для перехода на другой месяц есть 2 элемента: выпадающий список и кнопки прокрутки. А щелчком по числу месяца пользователь вставляет дату на лист. Наверное, такую смену месяца можно предложить в качестве опции при вставке даты на лист ДВОЙНЫМ щелчком. Пишите, если кому-то это понадобится.
Я – любитель-самоучка. Поэтому сразу прошу прощения за оформление моего кода. Да, я пишу очень широко. Но иначе я сам потом не могу прочитать даже свои макросы.
Проводить полное тестирование календаря у меня нет сейчас возможности. Приму любые замечания и пожелания. В меру своих знаний готов помочь в работе над таким нужным проектом. Рекламные ссылки удалены
[p.s.] Размер файла с календарём получился больше 100 Kb, поэтому к сообщению он не прикрепился Вот ссылка на Yandex.диск: Версия календаря (ноябрь 2016 г.)George87