Добрый день! помогите, пожалуйста, использую для записи времени изменения ячейки данный код (ниже, давно где то нашел), но теперь структура файла поменялась, и та ячейка, данные в которую вносились вручную, стала меняться формулой и соответственно данный код уже не работает. Понимаю, что надо использовать Calculate, но ума не хватает чтобы новый код работал так же. Помогите пожалуйста написать код, пример в файле т.е. в примере: при изменении ячейки формулой в столбце L - должно проставляться время в параллельной ячейке столбца M
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("L2:L100")) Is Nothing Then With Target(1, 2) .Value = Now .EntireColumn.AutoFit End With End If End Sub
[/vba]
Добрый день! помогите, пожалуйста, использую для записи времени изменения ячейки данный код (ниже, давно где то нашел), но теперь структура файла поменялась, и та ячейка, данные в которую вносились вручную, стала меняться формулой и соответственно данный код уже не работает. Понимаю, что надо использовать Calculate, но ума не хватает чтобы новый код работал так же. Помогите пожалуйста написать код, пример в файле т.е. в примере: при изменении ячейки формулой в столбце L - должно проставляться время в параллельной ячейке столбца M
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("L2:L100")) Is Nothing Then With Target(1, 2) .Value = Now .EntireColumn.AutoFit End With End If End Sub
В Вашем примере нет формул. Где-то в сторонке, или на другом листе хранить копию данных и сравнивать. [vba]
Код
Private Sub Worksheet_Calculate() Dim a, b, i& a = [l2:l100]: b = [p2:p100] For i = 1 To UBound(a) If a(i, 1) <> b(i, 1) Then [m3] = Time b(i, 1) = a(i, 1) End If Next [p2].Resize(UBound(b)) = b End Sub
[/vba]
В Вашем примере нет формул. Где-то в сторонке, или на другом листе хранить копию данных и сравнивать. [vba]
Код
Private Sub Worksheet_Calculate() Dim a, b, i& a = [l2:l100]: b = [p2:p100] For i = 1 To UBound(a) If a(i, 1) <> b(i, 1) Then [m3] = Time b(i, 1) = a(i, 1) End If Next [p2].Resize(UBound(b)) = b End Sub
спасибо. я с формулами понял Вас, макрос работает. Только как сделать, чтобы время записывалось напротив каждой ячейки, где меняется условие. Сейчас по данному коду запись идет только в ячейку М3. Помогите пожалуйста!
спасибо. я с формулами понял Вас, макрос работает. Только как сделать, чтобы время записывалось напротив каждой ячейки, где меняется условие. Сейчас по данному коду запись идет только в ячейку М3. Помогите пожалуйста!Igrik555
Private Sub Worksheet_Calculate() Dim a, b, i& Application.EnableEvents = 0 a = [l2:m100]: b = [p2:q100] For i = 1 To UBound(a) If a(i, 1) <> b(i, 1) Then b(i, 2) = Time b(i, 1) = a(i, 1) End If Next [p2:q100] = b [l2:m100] = b Application.EnableEvents = -1 End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Calculate() Dim a, b, i& Application.EnableEvents = 0 a = [l2:m100]: b = [p2:q100] For i = 1 To UBound(a) If a(i, 1) <> b(i, 1) Then b(i, 2) = Time b(i, 1) = a(i, 1) End If Next [p2:q100] = b [l2:m100] = b Application.EnableEvents = -1 End Sub
Здравствуйте друзья! Не могли бы вы и мне помочь... У меня практически аналогичная задача. У меня строчки колонки А изменяются сторонней программой поочередно и надо чтобы в колонках B и C проставлялась дата и время... Мой скрипт приведен ниже и работает он только для одной ячейки в столбце А. У меня не получается задействовать весь столбец... [vba]
Код
Private Sub Worksheet_Calculate() Dim target As Range Set target = Range("A3") If target.Offset(0, 1).Value = "" Then target.Offset(0, 1) = Date target.Offset(, 2) = Format(Now, "hh:nn") End If End Sub
[/vba]
если я ставлю range(''A3:A100'') то у меня вечно появляется ошибка... я думаю, что возможно у меня проблемма с заданием типов переменых. Если что простите за грубые ошибки я новичек в этом деле. Заранее спасибо, буду очень блогадарен за помощь.
Здравствуйте друзья! Не могли бы вы и мне помочь... У меня практически аналогичная задача. У меня строчки колонки А изменяются сторонней программой поочередно и надо чтобы в колонках B и C проставлялась дата и время... Мой скрипт приведен ниже и работает он только для одной ячейки в столбце А. У меня не получается задействовать весь столбец... [vba]
Код
Private Sub Worksheet_Calculate() Dim target As Range Set target = Range("A3") If target.Offset(0, 1).Value = "" Then target.Offset(0, 1) = Date target.Offset(, 2) = Format(Now, "hh:nn") End If End Sub
[/vba]
если я ставлю range(''A3:A100'') то у меня вечно появляется ошибка... я думаю, что возможно у меня проблемма с заданием типов переменых. Если что простите за грубые ошибки я новичек в этом деле. Заранее спасибо, буду очень блогадарен за помощь.Denis_0110
Сообщение отредактировал Serge_007 - Понедельник, 07.07.2014, 22:33
Во-первых читайте правила. Где пример? По сути вопроса: если проверяете группу ячеек, необходимо в цикле просматривать каждую. Как - показано выше.
Во-первых читайте правила. Где пример? По сути вопроса: если проверяете группу ячеек, необходимо в цикле просматривать каждую. Как - показано выше.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Перепишите код добавив цикл для обхода каждой ячейки в диапазоне
[vba]
Код
Private Sub Worksheet_Calculate() Dim target As Range Dim Cell As Variant
Set target = Range("A3:A100") For Each Cell In target.Cells If Cell.Offset(0, 1).Value = "" Then Cell.Offset(0, 1) = Date Cell.Offset(, 2) = Format(Now, "hh:nn") End If Next Cell
End Sub
[/vba]
Перепишите код добавив цикл для обхода каждой ячейки в диапазоне
[vba]
Код
Private Sub Worksheet_Calculate() Dim target As Range Dim Cell As Variant
Set target = Range("A3:A100") For Each Cell In target.Cells If Cell.Offset(0, 1).Value = "" Then Cell.Offset(0, 1) = Date Cell.Offset(, 2) = Format(Now, "hh:nn") End If Next Cell