Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2011, 03:36   #1
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию Еще о Календарике

Здравствуйте - Все! Уважаемые програмисты, прошу Вашего участия в решении задач, которые по понятным причинам сам решить не могу. "Слизал" на форуме календарик, и все-бы ОК (можно мириться), но хотелось-бы чтобы:1. Сохранялась-бы исходная дата в ячейке( в примере "F4")при выборе на календаре - Отмена. 2. Как вставить дату в ячейки, выделенные желтым цветом, которые меняют свое положение при вставке строк. 3.Возможно ли прописать положение формы календаря в обусловленном месте листа(например верхний левый угол формы - ячейка "Н8". 4. Вызов календаря в определенных ячейках происходил при выдилении ячейки одним кликом.5.Можно было-бы закрыть форму календарика "кликом" на Крестике -Закрыть.
Понимаю, что вопросов много, но возможно они все взаимосвязаны и решаются за один прием.
Благодаю.
Вложения
Тип файла: rar Календарь FR1.rar (60.5 Кб, 34 просмотров)
Trimbl вне форума Ответить с цитированием
Старый 09.03.2011, 07:30   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

1.
Код:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range(ra)) Is Nothing Then
        Application.EnableEvents = False
        Cancel = True
         Target = IIf(Get_Date("", Now) = "", Target, Target = Get_Date("", Now))
        Application.EnableEvents = True
    End If
End Sub
Дальше просто не хочется корежить код автора, по всем вопросам собственно по календарю - к нему.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 09.03.2011, 08:28   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

1. реализовано
Код:
Target = Get_Date(Target, Now) ' по умолчанию - дата из ячейки
2. реализовано
(см. синие ячейки - все они входят в именованный диапазон даты)

3. Свойство формы StartUpPosition ставим в 0,
и в коде пишем что-то вроде этого:
Код:
Private Sub UserForm_Initialize()
    Me.Top = Range("h9").Top
    Me.Left = Range("h9").Left
    ' ...
4. Используем событие Worksheet_SelectionChange
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("даты")) Is Nothing Then
        Target = Get_Date(Target, Now)    ' по умолчанию - дата из ячейки
    End If
End Sub
5. реализовано - отключил одну строку кода

Проверяйте: http://excelvba.ru/XL_Files/Sample__...__10-28-45.zip
EducatedFool вне форума Ответить с цитированием
Старый 09.03.2011, 09:14   #4
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
1.
Код:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range(ra)) Is Nothing Then
        Application.EnableEvents = False
        Cancel = True
         Target = IIf(Get_Date("", Now) = "", Target, Target = Get_Date("", Now))
        Application.EnableEvents = True
    End If
End Sub
Дальше просто не хочется корежить код автора, по всем вопросам собственно по календарю - к нему.
Шановний kuklp! Если я правильно понял Ваш код необходимо вставить в модуль листа вместо существующего кода
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range(ra)) Is Nothing Then
Application.EnableEvents = False
Cancel = True: Target = Get_Date("", Now)
Application.EnableEvents = True
End If
End Sub
Сохраняется значение при двойном клике на "Отмена", но установить дату - увы не получается, выдает -ЛОЖЬ. Возможно я что-то не то сделал?
Trimbl вне форума Ответить с цитированием
Старый 09.03.2011, 09:20   #5
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
1. реализовано
Код:
Target = Get_Date(Target, Now) ' по умолчанию - дата из ячейки
2. реализовано
(см. синие ячейки - все они входят в именованный диапазон даты)

3. Свойство формы StartUpPosition ставим в 0,
и в коде пишем что-то вроде этого:
Код:
Private Sub UserForm_Initialize()
    Me.Top = Range("h9").Top
    Me.Left = Range("h9").Left
    ' ...
4. Используем событие Worksheet_SelectionChange
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("даты")) Is Nothing Then
        Target = Get_Date(Target, Now)    ' по умолчанию - дата из ячейки
    End If
End Sub
5. реализовано - отключил одну строку кода

Проверяйте: http://excelvba.ru/XL_Files/Sample__...__10-28-45.zip
Уважаемый EducatedFool ! Спасибо за ответ, но сейчас ответить что либо не могу, т.к. необходимо "переварить" полученное, вечером посмотрю и завтра с Вашего позволения отвечу.
Trimbl вне форума Ответить с цитированием
Старый 09.03.2011, 10:30   #6
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Предложу еще такой вариант.
Вызов календаря сделан все же по двойному щелчку в любой ячейке, ИМХО так меньше ошибок при вводе.
На календаре отсутствуют все "лишние" кнопки, никаких лишних "телодвижений")))
Выбор даты осуществляется просто щелчком на нужной дате.
Позиционирование формы взято у EducatedFool
p.s.
Добавлю
Если даты у вас будут только в столбце "F", код в модуле листа можно написать так
Код:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 6 Then Календарь.Show
    Cancel = True
End Sub
Вложения
Тип файла: zip КалендарьFR1_выбор_клик.zip (35.7 Кб, 27 просмотров)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 09.03.2011 в 11:06.
VictorM вне форума Ответить с цитированием
Старый 10.03.2011, 00:59   #7
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию

Цитата:
Сообщение от Trimbl Посмотреть сообщение
Уважаемый EducatedFool ! Спасибо за ответ, но сейчас ответить что либо не могу, т.к. необходимо "переварить" полученное, вечером посмотрю и завтра с Вашего позволения отвечу.
EducatedFool, здравствуйте ! Посмотрел Ваше решение, что можно сказать,-EducatedFool это EducatedFool . Как всегда четко,лаконично, феноменально. Как говорится "Що хтiли, то маете(укр.)" т.е что хотели,то и имеете. Теперь я являюсь обладателем лучшего календарика на форуме. Спасибо.
Trimbl вне форума Ответить с цитированием
Старый 10.03.2011, 06:51   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

и меня сподвигло написать приспособление для ввода дат на лист. на форме 6 обьектов: 4 кнопки и два текстбокса (один действующий, а второй учебный)
кнопки меняют месяцы и годы. двойной щелчек по дате на форме вносит дату в активную ячейку. есть одно неудобство - по датам надо точно в "десятку" попадать (т.е нужно 3-е число попадайте между 0и3, нужно 27 - между 2и7). и еще один нюанс: переход с 30 марта на февраль перенесет вас на 30 февраля, что равно 2 марта))) - такая неожиданность...
и... извините за скудность кода. функций минимум, но основную-то выполняет и форма небольшая по габаритам (не сильно заслоняет лист).
Вложения
Тип файла: rar ФормКалендарь.rar (19.7 Кб, 27 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 10.03.2011, 08:48   #9
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
Предложу еще такой вариант.
Вызов календаря сделан все же по двойному щелчку в любой ячейке, ИМХО так меньше ошибок при вводе.
На календаре отсутствуют все "лишние" кнопки, никаких лишних "телодвижений")))
Выбор даты осуществляется просто щелчком на нужной дате.
Позиционирование формы взято у EducatedFool
p.s.
Добавлю
Если даты у вас будут только в столбце "F", код в модуле листа можно написать так
Код:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 6 Then Календарь.Show
    Cancel = True
End Sub
VictorM - Здравия желаю! Огромное спасибо за внимание. Ваш Календарь действительно проще, но в нем есть своя изюминка и привлекательность.
Форм отчетности у меня - много, найдем применение и Вашему варианту календаря.
Trimbl вне форума Ответить с цитированием
Старый 10.03.2011, 09:23   #10
Trimbl
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 135
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
и меня сподвигло написать приспособление для ввода дат на лист. на форме 6 обьектов: 4 кнопки и два текстбокса (один действующий, а второй учебный)
кнопки меняют месяцы и годы. двойной щелчек по дате на форме вносит дату в активную ячейку. есть одно неудобство - по датам надо точно в "десятку" попадать (т.е нужно 3-е число попадайте между 0и3, нужно 27 - между 2и7). и еще один нюанс: переход с 30 марта на февраль перенесет вас на 30 февраля, что равно 2 марта))) - такая неожиданность...
и... извините за скудность кода. функций минимум, но основную-то выполняет и форма небольшая по габаритам (не сильно заслоняет лист).
Уважаемый IgorGO! Думаю не ошибусь, если скажу, что Ваши ответы и решения на поставленные вопросы с интересом отслеживают все участники форума. Ваше решение календарика - орригинально, но в моем случае (решил несколько автоматизировать, упростить формы отчетности больше для коллег по работе, добрая половина которых пока ходят на Excel с вилами) любые неожиданности не желательны. Выбор уже сделан.
Наверняка кто-то из форумчан извлекет полезное с Вашего решения.
Благодарю за внимание.
Trimbl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще геометрия zumm Свободное общение 11 09.07.2010 21:49
Как заменить окошко в календарике? Extez1 Общие вопросы Delphi 5 19.04.2009 17:59