Ввод в ячейку текущего времени (не обновляемого) по клику мышки, Ввести текущее время системы в ячейку мышкой и закрыть ячейку для любого другого ввода
Возникла такая задача: есть таблица расчета рабочего времени. В ней доступны пользователю только четыре столбца для ввода данных: время прихода на работу, время ухода на обед, время прихода с обеда, время ухода с работы),
Мысль такая: человек кликает мышкой по нужной ячейке, в эту ячейку записывается текущее время системы и ячейка закрывается для любых изменений. То есть ее потом нельзя редактировать (допустим, без снятия защиты листа), в нее нельзя ничего писать руками - только клик мышкой, отображение времени, когда этот клик был сделан и все. По каждой такой ячейке (день и опция) можно кликнуть только один раз, без коррекции.
Без защиты все это конечно не имеет смысла. Нашел довольно простое решение на тему одноразового ввода данных, после которого ячейка закрывается, только как подружить диапазоны в макросе с кликом мышки и этой защитой - без понятия, потому что в VBA не знаю практически ничего.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then Target = Time
If Intersect(Target, Range("C2:F35")) Is Nothing Then Exit Sub
Target.Parent.Unprotect "pass"
Target.Locked = True
Target.Parent.Protect "pass"
End Sub
yuriyk24, Вы видели, как код оформлен у других? Вот и Вы оформляйте свой: ищите такую кнопку (см. скрин) и исправьте своё сообщение. По вопросу: рассмотрите вариант, когда ввод в пустую ячейку разрешён, а если в ячейке уже есть данные, то процедура Worksheet_SelectionChange просто на даст активировать эту ячейку.
Юрий М написал: yuriyk24 , Вы видели, как код оформлен у других? Вот и Вы оформляйте свой: ищите такую кнопку (см. скрин) и исправьте своё сообщение.
Видел конечно. Исправил. Ну а на тему кода - понять я понимаю, а вот реализацию сделать ирреально. Код ведь не мой, я его вставил и заработало (часть с закрытием ячеек после ввода данных), а вот приладить к этому всему вставку даты по клику мышки мне с моими знаниями пока ирреально
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("D2:D10")) Is Nothing Then
If Target = "" Then
Target = Time
Else
Application.EnableEvents = False
Target.Offset(1, 0).Select
End If
End If
Application.EnableEvents = True
End Sub
Работает!! И по одиночному клику, и просто по переводу курсора мышки на ячейку клавишами! Здоровски получилось, спасибо еще раз!
ЗЫ. Сейчас заметил небольшой глюк - если кликнуть мышкой по некоторым ячейкам с уже введенным временем, курсор становится активным и время можно редактировать. Закономерность такая: клик на ячейке, курсор автоматом переходит на ячейку на одну строку ниже и эта ячейка становится доступной для редактирования