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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 1 из 8
  • 1
  • 2
  • 3
  • 7
  • 8
  • »
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Выпадающий календарь (Для программирующих в среде VBA.)
Выпадающий календарь
VovaK Дата: Среда, 13.07.2011, 14:52 | Сообщение № 1
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
Давно хотел сваять процедуру выпадающего календаря не зависящего от библиотек сторонних производитей.
По желанию Вы можете скопировать четыре части процедуры (DateClass, DateForm, DateFunction, DateYearClass) и календарь будет частью Вашего проекта.
К сообщению приложен файл: VovaK__.zip (38.3 Kb)


Всем удачи. У нас все получится.
С уважением, Владимир.
 
Ответить
СообщениеДавно хотел сваять процедуру выпадающего календаря не зависящего от библиотек сторонних производитей.
По желанию Вы можете скопировать четыре части процедуры (DateClass, DateForm, DateFunction, DateYearClass) и календарь будет частью Вашего проекта.

Автор - VovaK
Дата добавления - 13.07.2011 в 14:52
VovaK Дата: Воскресенье, 24.07.2011, 13:17 | Сообщение № 2
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
Update.

Исправил недоработки, теперь дата в заголовке меняется при нажатии на все кнопки.
К сообщению приложен файл: 9271246.zip (39.2 Kb)


Всем удачи. У нас все получится.
С уважением, Владимир.
 
Ответить
СообщениеUpdate.

Исправил недоработки, теперь дата в заголовке меняется при нажатии на все кнопки.

Автор - VovaK
Дата добавления - 24.07.2011 в 13:17
alpalmar Дата: Пятница, 05.08.2011, 16:59 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Хорошая вещь! По-моему на "Планете Ексель" Николая Павлова что-то подобное видел. Только там первый день - воскресенье, неудобно. И еще: почему свойство формы ShowModal стоит в True? Это не позволяет когда фору с календарем вызвал, выделить нужную ячейку. Или я что-то не понял?
 
Ответить
СообщениеХорошая вещь! По-моему на "Планете Ексель" Николая Павлова что-то подобное видел. Только там первый день - воскресенье, неудобно. И еще: почему свойство формы ShowModal стоит в True? Это не позволяет когда фору с календарем вызвал, выделить нужную ячейку. Или я что-то не понял?

Автор - alpalmar
Дата добавления - 05.08.2011 в 16:59
VovaK Дата: Суббота, 06.08.2011, 08:24 | Сообщение № 4
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
alpalmar, Замысел прост - Вы вызываете форму из ячейки, в которую необходимо вставить дату. Если у вас задача расставить даты по листу ставьте DateForm.Show 0, ни каких сложностей.


Всем удачи. У нас все получится.
С уважением, Владимир.
 
Ответить
Сообщениеalpalmar, Замысел прост - Вы вызываете форму из ячейки, в которую необходимо вставить дату. Если у вас задача расставить даты по листу ставьте DateForm.Show 0, ни каких сложностей.

Автор - VovaK
Дата добавления - 06.08.2011 в 08:24
Гость Дата: Воскресенье, 07.08.2011, 07:12 | Сообщение № 5
Группа: Гости
Не силен в vba. Прошу строго не судить.

Подскажите, пожалуйста, например я хочу запускать календарь из формы по клику на кнопке.
Соответственно, на кнопку я вешаю:

[vba]
Код
Private Sub CommandButton1_Click()
DateForm.Show
End Sub
[/vba]

Вопрос. Что необходимо изменить в коде календаря, чтобы результат (выбранная дата) прописывался не в ячейку на листе, а передавался в определенную переменную? Указанную переменную я потом успешно смог бы использовать в выводе где угодно: хоть в Label, хоть TextBox, хоть в любой нужной мне ячейке на листе.
 
Ответить
СообщениеНе силен в vba. Прошу строго не судить.

Подскажите, пожалуйста, например я хочу запускать календарь из формы по клику на кнопке.
Соответственно, на кнопку я вешаю:

[vba]
Код
Private Sub CommandButton1_Click()
DateForm.Show
End Sub
[/vba]

Вопрос. Что необходимо изменить в коде календаря, чтобы результат (выбранная дата) прописывался не в ячейку на листе, а передавался в определенную переменную? Указанную переменную я потом успешно смог бы использовать в выводе где угодно: хоть в Label, хоть TextBox, хоть в любой нужной мне ячейке на листе.

Автор - Гость
Дата добавления - 07.08.2011 в 07:12
VovaK Дата: Воскресенье, 07.08.2011, 18:47 | Сообщение № 6
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
В модуле класса DateClass Найдите строку:

[vba]
Код
ActiveCell.Value = DateSerial(CInt(CurrentYear), Mon, CurrentDay)
[/vba]

и вместо ActiveCell.Value укажите имя глобальной переменной к примеру CurrentDate

объявить глобальную переменную необходимо в простом модуле :

Public CurrentDate As Date


Всем удачи. У нас все получится.
С уважением, Владимир.
 
Ответить
СообщениеВ модуле класса DateClass Найдите строку:

[vba]
Код
ActiveCell.Value = DateSerial(CInt(CurrentYear), Mon, CurrentDay)
[/vba]

и вместо ActiveCell.Value укажите имя глобальной переменной к примеру CurrentDate

объявить глобальную переменную необходимо в простом модуле :

Public CurrentDate As Date

Автор - VovaK
Дата добавления - 07.08.2011 в 18:47
Гость Дата: Воскресенье, 07.08.2011, 20:47 | Сообщение № 7
Группа: Гости
C переменной получилось. Спасибо большое.

В процессе работы с календарем возник еще один вопрос.
Когда кликаю на кнопку, вызываю DateForm.Show, всплывает календарь. Выбираю нужную дату, дата успешно прописывается в Label. Но чтобы закрыть календарь, необходимо еще раз кликнуть на выбранную дату. Т.е. календарь закрывается только при повторном клике на выбранной дате.

Можно ли как-то настроить, чтобы календарь закрывался при одном клике на выбранной дате?
 
Ответить
СообщениеC переменной получилось. Спасибо большое.

В процессе работы с календарем возник еще один вопрос.
Когда кликаю на кнопку, вызываю DateForm.Show, всплывает календарь. Выбираю нужную дату, дата успешно прописывается в Label. Но чтобы закрыть календарь, необходимо еще раз кликнуть на выбранную дату. Т.е. календарь закрывается только при повторном клике на выбранной дате.

Можно ли как-то настроить, чтобы календарь закрывался при одном клике на выбранной дате?

Автор - Гость
Дата добавления - 07.08.2011 в 20:47
alpalmar Дата: Понедельник, 08.08.2011, 01:26 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Спасибо, все пнял! biggrin
 
Ответить
СообщениеСпасибо, все пнял! biggrin

Автор - alpalmar
Дата добавления - 08.08.2011 в 01:26
VovaK Дата: Понедельник, 08.08.2011, 06:50 | Сообщение № 9
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
Вот как должна выглядеть процедура на клик мыша в модуле класса DateClass:

[vba]
Код
Private Sub DateButton_MouseDown(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call DateForm.ChangeYear
If DateButton.ForeColor <> RGB(175, 175, 175) Then
Call DateForm.Refresh(CInt(DateButton.Caption), Mon, CLng(CurrentYear))
End If
If Err = 0 Then
ActiveCell.Value = DateSerial(CInt(CurrentYear), Mon, CurrentDay)
Else
ActiveCell.Value = CurrentDay & "." & Format(Mon, "00") & "." & Trim(CurrentYear) '(отображение дат ранее 1900 года)
End If
Unload DateForm
End Sub
[/vba]

В Вашей версии ActiveCell.Value заменено на глобальную переменную. Строка Unload DateForm в конце процедуры удаляет календарь.


Всем удачи. У нас все получится.
С уважением, Владимир.


Сообщение отредактировал VovaK - Понедельник, 08.08.2011, 07:06
 
Ответить
СообщениеВот как должна выглядеть процедура на клик мыша в модуле класса DateClass:

[vba]
Код
Private Sub DateButton_MouseDown(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call DateForm.ChangeYear
If DateButton.ForeColor <> RGB(175, 175, 175) Then
Call DateForm.Refresh(CInt(DateButton.Caption), Mon, CLng(CurrentYear))
End If
If Err = 0 Then
ActiveCell.Value = DateSerial(CInt(CurrentYear), Mon, CurrentDay)
Else
ActiveCell.Value = CurrentDay & "." & Format(Mon, "00") & "." & Trim(CurrentYear) '(отображение дат ранее 1900 года)
End If
Unload DateForm
End Sub
[/vba]

В Вашей версии ActiveCell.Value заменено на глобальную переменную. Строка Unload DateForm в конце процедуры удаляет календарь.

Автор - VovaK
Дата добавления - 08.08.2011 в 06:50
Alex_ST Дата: Понедельник, 08.08.2011, 13:51 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Володя,
хороший календарь сделал.
Только чуть-чуть с формулами вычисления даты и инициализацией накрутил лишнего.
Я тут на досуге подправил. Теперь месяц нормально устанавливается на форме по дате в ячейке.
Есть, однако, пара вопросов:
1. Какой смысл разбивать год по одной цифре в лэйбл-боксе? Почему сразу не сделать в одном текст-боксе все цифры?
2. Я сделал немодальный вызов. Но никак не могу при изменении активной ячейки заставить перерисоваться календарь sad
Посмотри, тебе в твоём коде проще разобраться...
3. При листании месяцев вперёд-назад они "упираются" в декабрь и январь вместо того чтобы год прибавлялся/убавлялся...
4. Подумай, куда бы на форме поместить кнопочку для перехода к текущей дате?
К сообщению приложен файл: VovaK_Calender_.zip (32.3 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 08.08.2011, 13:51
 
Ответить
СообщениеВолодя,
хороший календарь сделал.
Только чуть-чуть с формулами вычисления даты и инициализацией накрутил лишнего.
Я тут на досуге подправил. Теперь месяц нормально устанавливается на форме по дате в ячейке.
Есть, однако, пара вопросов:
1. Какой смысл разбивать год по одной цифре в лэйбл-боксе? Почему сразу не сделать в одном текст-боксе все цифры?
2. Я сделал немодальный вызов. Но никак не могу при изменении активной ячейки заставить перерисоваться календарь sad
Посмотри, тебе в твоём коде проще разобраться...
3. При листании месяцев вперёд-назад они "упираются" в декабрь и январь вместо того чтобы год прибавлялся/убавлялся...
4. Подумай, куда бы на форме поместить кнопочку для перехода к текущей дате?

Автор - Alex_ST
Дата добавления - 08.08.2011 в 13:51
VovaK Дата: Понедельник, 08.08.2011, 15:20 | Сообщение № 11
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
Alex_ST, Отвечу по пунктам:

1. Понты - В давние времена у меня был металлический перекидной календарь, год там был четыре цифры в окошках. Согласись прикольно.
2. Вот накой немодальный вызов - вызвал - дату выбрал - календарь ушел - дата осталась. Я понимаю процесс какой обсчитывать, думаю это лишнее. Тем более открывается быстро и возвращает дату из активной ячейки.
3. Поюзаю, подумаю, если много не переписывать добавлю...
4. Вот накой козе баян? Если вызывать из пустой ячейки позицирует на текущей дате, зачем еще кнопка - Алекс пустое, тем более даты можно выбрать двумя кликами.


Всем удачи. У нас все получится.
С уважением, Владимир.
 
Ответить
СообщениеAlex_ST, Отвечу по пунктам:

1. Понты - В давние времена у меня был металлический перекидной календарь, год там был четыре цифры в окошках. Согласись прикольно.
2. Вот накой немодальный вызов - вызвал - дату выбрал - календарь ушел - дата осталась. Я понимаю процесс какой обсчитывать, думаю это лишнее. Тем более открывается быстро и возвращает дату из активной ячейки.
3. Поюзаю, подумаю, если много не переписывать добавлю...
4. Вот накой козе баян? Если вызывать из пустой ячейки позицирует на текущей дате, зачем еще кнопка - Алекс пустое, тем более даты можно выбрать двумя кликами.

Автор - VovaK
Дата добавления - 08.08.2011 в 15:20
VovaK Дата: Понедельник, 08.08.2011, 15:55 | Сообщение № 12
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
По заказу Алекса сделал прокрутку месяцев сквозной. Не думаю что всем это понравится. Поэтому предлагаю оставить как вариант.
К сообщению приложен файл: VovaK___mod3.zip (41.2 Kb)


Всем удачи. У нас все получится.
С уважением, Владимир.


Сообщение отредактировал VovaK - Понедельник, 08.08.2011, 15:56
 
Ответить
СообщениеПо заказу Алекса сделал прокрутку месяцев сквозной. Не думаю что всем это понравится. Поэтому предлагаю оставить как вариант.

Автор - VovaK
Дата добавления - 08.08.2011 в 15:55
Alex_ST Дата: Понедельник, 08.08.2011, 16:41 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
1. Ну, это на любителя... Поэтому в своей доработке я окошечки сдвинул поближе друг к другу.
2. Немодальный вызов удобен если обрабатываешь табличку с несколькими датами. Тогда в Activecell значение из календаря вносить можно даблкликом по нужной дате. А закрывать форму после изменения всех нужных дат - "крестиком"
3. С прокруткой через месяцы по годам получилось очень удобно. Вряд ли кто будет против такой фичи возражать.
4. Не согласен. Если, листая даты далеко ушёл от "сегодня", то удобнее к нему возвратиться по спец.кнопочке чем вспоминать "а что у нас сегодня?" и опять листать до нужной даты (ведь вставка запрещена).

И к стати, ты, я смотрю, даже не посмотрел, как я упростил формулы... А там здорово сократилось и окультурилось всё sad



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение1. Ну, это на любителя... Поэтому в своей доработке я окошечки сдвинул поближе друг к другу.
2. Немодальный вызов удобен если обрабатываешь табличку с несколькими датами. Тогда в Activecell значение из календаря вносить можно даблкликом по нужной дате. А закрывать форму после изменения всех нужных дат - "крестиком"
3. С прокруткой через месяцы по годам получилось очень удобно. Вряд ли кто будет против такой фичи возражать.
4. Не согласен. Если, листая даты далеко ушёл от "сегодня", то удобнее к нему возвратиться по спец.кнопочке чем вспоминать "а что у нас сегодня?" и опять листать до нужной даты (ведь вставка запрещена).

И к стати, ты, я смотрю, даже не посмотрел, как я упростил формулы... А там здорово сократилось и окультурилось всё sad

Автор - Alex_ST
Дата добавления - 08.08.2011 в 16:41
light26 Дата: Понедельник, 08.08.2011, 18:08 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Ну вот опять. Все здорово, все красиво.... А что если мне надо такой календарик вставить в несколько разных ячеек, столбцов, строк?


Я не волшебник. Я только учусь
 
Ответить
СообщениеНу вот опять. Все здорово, все красиво.... А что если мне надо такой календарик вставить в несколько разных ячеек, столбцов, строк?

Автор - light26
Дата добавления - 08.08.2011 в 18:08
VovaK Дата: Понедельник, 08.08.2011, 18:21 | Сообщение № 15
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
Alex_ST, не смотрел потому что zip в запрете.

1. Окошечки сдвинул и весь шарм пропал - но хозяин-барин дело вкуса.
2. Касательно немодального режима, Алекс зачем процедуру на клик мыша продублировал в своей версии (верхнюю удали) и закоментируй в оставшейся Unload DateForm. Если желаешь переписывать даты, можешь привязать к событию SelectionChange листа изменение глобальных переменных Mon, CurrentYear и CurrentDay с вызовом процедуры DateForm.Refresh(CurrentDay, Mon, CLng(CurrentYear)).
3. Кнопку на сегодня, если очень хочешь, сделай сам - код смотри в UserForm_Initialize.
4. Формулы не оценил? Да. Мои мне больше нравятся.


Всем удачи. У нас все получится.
С уважением, Владимир.
 
Ответить
СообщениеAlex_ST, не смотрел потому что zip в запрете.

1. Окошечки сдвинул и весь шарм пропал - но хозяин-барин дело вкуса.
2. Касательно немодального режима, Алекс зачем процедуру на клик мыша продублировал в своей версии (верхнюю удали) и закоментируй в оставшейся Unload DateForm. Если желаешь переписывать даты, можешь привязать к событию SelectionChange листа изменение глобальных переменных Mon, CurrentYear и CurrentDay с вызовом процедуры DateForm.Refresh(CurrentDay, Mon, CLng(CurrentYear)).
3. Кнопку на сегодня, если очень хочешь, сделай сам - код смотри в UserForm_Initialize.
4. Формулы не оценил? Да. Мои мне больше нравятся.

Автор - VovaK
Дата добавления - 08.08.2011 в 18:21
Alex_ST Дата: Понедельник, 08.08.2011, 21:18 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (light26)
А что если мне надо такой календарик вставить в несколько разных ячеек, столбцов, строк?

Ну так и вставляйте. Кто мешает? Ведь код самого календаря от того, как он вызывается совсем не меняется.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (light26)
А что если мне надо такой календарик вставить в несколько разных ячеек, столбцов, строк?

Ну так и вставляйте. Кто мешает? Ведь код самого календаря от того, как он вызывается совсем не меняется.

Автор - Alex_ST
Дата добавления - 08.08.2011 в 21:18
light26 Дата: Вторник, 09.08.2011, 17:04 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (Alex_ST)
Кто мешает

ниче не понимаю. макрос же написан для столбца F.....?????


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (Alex_ST)
Кто мешает

ниче не понимаю. макрос же написан для столбца F.....?????

Автор - light26
Дата добавления - 09.08.2011 в 17:04
Alex_ST Дата: Вторник, 09.08.2011, 21:08 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (light26)
макрос же написан для столбца F.....????

ну так подправьте код вызова формы так чтобы она вызывалась при клике в
Quote (light26)
в несколько разных ячеек, столбцов, строк
biggrin



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 09.08.2011, 21:16
 
Ответить
Сообщение
Quote (light26)
макрос же написан для столбца F.....????

ну так подправьте код вызова формы так чтобы она вызывалась при клике в
Quote (light26)
в несколько разных ячеек, столбцов, строк
biggrin

Автор - Alex_ST
Дата добавления - 09.08.2011 в 21:08
RAN Дата: Вторник, 09.08.2011, 21:15 | Сообщение № 19
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Quote (light26)
ниче не понимаю. макрос же написан для столбца F.....?????

Муля не Планете тоже очень озадачивался подобными вопросами, и именно по календарю (правда другому).
Поглядите там.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Quote (light26)
ниче не понимаю. макрос же написан для столбца F.....?????

Муля не Планете тоже очень озадачивался подобными вопросами, и именно по календарю (правда другому).
Поглядите там.

Автор - RAN
Дата добавления - 09.08.2011 в 21:15
VovaK Дата: Вторник, 09.08.2011, 21:44 | Сообщение № 20
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
light26, откройте редактор VBA и выберите лист1, увидите код процедуры обработки события на листе. Это один из способов вызвать календарь, второй способ - это если вы откроете модуль книги, там залочены процедуры подключения календаря к выпадающему меню на правый клик по ячейке листа.

А из любого макроса календарь вызывается командой DateForm.Show.

Учите матчасть light26, вы уже давно на форуме, чтобы так изумляться...


Всем удачи. У нас все получится.
С уважением, Владимир.
 
Ответить
Сообщениеlight26, откройте редактор VBA и выберите лист1, увидите код процедуры обработки события на листе. Это один из способов вызвать календарь, второй способ - это если вы откроете модуль книги, там залочены процедуры подключения календаря к выпадающему меню на правый клик по ячейке листа.

А из любого макроса календарь вызывается командой DateForm.Show.

Учите матчасть light26, вы уже давно на форуме, чтобы так изумляться...

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

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