Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Макрос в Excel (http://forum.oszone.net/showthread.php?t=308111)

nipopadyuk 18-11-2015 15:20 2576169

Макрос в Excel
 
Задача, при заполнении ячейки E[n] в ячейке J[n] прописывать текущую дату, а при заполнении ячейки I[n] прописывать текущую дату в ячейке K[n]
написал на скорую руку такой макрос, но он работает не корректно, при заполнении ячейки E[n] или J[n] дата вставляется и в I[n] и в K[n]
Помогите разобраться, что не так со скриптом...

Код:

Private Sub Worksheet_Change(ByVal Target As Range)
    For Each cell In Target 
        If Not Intersect(cell, Range("E3:E65536")) Is Nothing Then
            If Range("J" & cell.Row).Value = "" Then
                With Range("J" & cell.Row)

                    .Value = Now


                End With
            Else

            End If
        End If
    Next cell
    For Each cell In Target 
        If Not Intersect(cell, Range("I3:J65536")) Is Nothing Then
            If Range("K" & cell.Row).Value = "" Then
                With Range("K" & cell.Row)

                    .Value = Now


                End With
            Else

            End If
        End If
    Next cell
End Sub


a_axe 18-11-2015 16:36 2576189

Цитата:

Цитата nipopadyuk
что не так со скриптом »

nipopadyuk, не касаясь вопросов оптимизации кода - должно быть "I", а не "J"
Код:

If Not Intersect(cell, Range("I3:J65536")) Is Nothing Then
Updated:
В коде Вы дважды перебираете ячейки, значения которых единовременно изменились. Логично было бы делать все за один цикл, например так:
код
Код:

Private Sub Worksheet_Change(ByVal Target As Range)
    For Each cell In Target
        If cell.Row > 2 And cell.Row <= 65536 And cell.Value <> "" Then
            Select Case cell.Column
                Case 5
                    If cell.Offset(0, 5).Value = "" Then cell.Offset(0, 5).Value = Now
                Case 9
                    If cell.Offset(0, 2).Value = "" Then cell.Offset(0, 2).Value = Now
            End Select
        End If
    Next cell
End Sub


nipopadyuk 19-11-2015 08:55 2576376

Цитата:

Цитата a_axe
nipopadyuk, не касаясь вопросов оптимизации кода - должно быть "I", а не "J" »

Спасибо, решено :)


Время: 07:00.

Время: 07:00.
© OSzone.net 2001-