Задача, при редактировании ячейки А, в ячейке В должна вставиться текущая дата, а в ячейку С должно вставиться текущее время. Ячейки В и С должны заполняться/меняться только при редактировании ячейки А. ТДАТА() меняет значения постоянно, что мне не подходит.
Задача, при редактировании ячейки А, в ячейке В должна вставиться текущая дата, а в ячейку С должно вставиться текущее время. Ячейки В и С должны заполняться/меняться только при редактировании ячейки А. ТДАТА() меняет значения постоянно, что мне не подходит.LexaLM
У меня такой вариант (можно изменять сразу несколько ячеек) Форматы даты и временя в столбцах В и С пользователь ставит самостоятельно какой ему захочется (заранее и сразу на весь столбец) [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim d0_ As Range, d_ As Range r0_ = 2 'начальная строка c_ = 1 'столбец проверки r1_ = Cells(1).SpecialCells(xlLastCell).Row If r1_ < r0_ Then Exit Sub Set d0_ = Intersect(Target, Cells(r0_, c_).Resize(r1_ - r0_ + 1)) If Not d0_ Is Nothing Then Application.ScreenUpdating = 0 cal_ = Application.Calculation Application.Calculation = 3 Application.EnableEvents = 0 For Each d_ In d0_ ' ===> этот блок если при пустых значениях в А НЕ нужно стирать дату и время ' d_.Offset(, 1) = Date ' d_.Offset(, 2) = Time ' ===> этот блок если при пустых значениях в А нужно стереть дату и время If d_ <> "" Then d_.Offset(, 1) = Date d_.Offset(, 2) = Time Else d_.Offset(, 1).Resize(1, 2).ClearContents End If Next d_ Application.EnableEvents = 1 Application.Calculation = cal_ Application.ScreenUpdating = 1 End If End Sub
[/vba]
У меня такой вариант (можно изменять сразу несколько ячеек) Форматы даты и временя в столбцах В и С пользователь ставит самостоятельно какой ему захочется (заранее и сразу на весь столбец) [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim d0_ As Range, d_ As Range r0_ = 2 'начальная строка c_ = 1 'столбец проверки r1_ = Cells(1).SpecialCells(xlLastCell).Row If r1_ < r0_ Then Exit Sub Set d0_ = Intersect(Target, Cells(r0_, c_).Resize(r1_ - r0_ + 1)) If Not d0_ Is Nothing Then Application.ScreenUpdating = 0 cal_ = Application.Calculation Application.Calculation = 3 Application.EnableEvents = 0 For Each d_ In d0_ ' ===> этот блок если при пустых значениях в А НЕ нужно стирать дату и время ' d_.Offset(, 1) = Date ' d_.Offset(, 2) = Time ' ===> этот блок если при пустых значениях в А нужно стереть дату и время If d_ <> "" Then d_.Offset(, 1) = Date d_.Offset(, 2) = Time Else d_.Offset(, 1).Resize(1, 2).ClearContents End If Next d_ Application.EnableEvents = 1 Application.Calculation = cal_ Application.ScreenUpdating = 1 End If End Sub