Здравствуйте, дорогие форумчане!
Очень нужна Ваша помощь.
У меня есть макрос, который срабатывает при изменении данных в диапазоне H3 - H10 000 на определенном листе (ниже приведен код).
(Макрос заполняет столбцы B, I, J, в зависисости от значения внесенного в H)
Если изменение идет обычным способом, то есть пользователь вручную меняет значение в ячейке указанного диапазона (H), то макрос срабатывает для данной строки и все в порядке.
Но если пользователь вставляет данные сразу в несколько ячеек указанного диапазона (H), то макрос срабатывает только для первой строки измененного диапазона в H.
То же самое происходит, если данные вносятся через заполнение-протягивание.
Подскажите пожалуйста, как мне изменить код, чтобы он срабатывал для всех измененнных ячеек в диапазоне и при внесении вручную, и при протягивании, и при вставке нескольких значений.
Большое спасибо заранее!
КОД СРАБАТЫВАЮЩИЙ НА УРОВНЕ СТРОКИКод |
---|
Private Sub worksheet_change(ByVal Target As Range)
Dim cellsR As Range
Set cellsR = Worksheets("TASK").Range("H3:H10000")
If Not (Intersect(Target, cellsR) Is Nothing) Then
Dim i As Long
i = Target.Row
If Cells(i, 8).Value = 0 And Cells(i, 8).Value <> "" Then
Cells(i, 9).Value = ""
Cells(i, 10).Value = ""
Cells(i, 2).Value = Sheets("REF").Range("A1").Value
Else
If Cells(i, 8).Value = 1 And Cells(i, 9).Value = "" And Cells(i, 10).Value = "" Then
Cells(i, 9).Value = Date
Cells(i, 10).Value = Date
Cells(i, 2).Value = Sheets("REF").Range("A2").Value
Else
If Cells(i, 8).Value = 1 And Cells(i, 9).Value <> "" And Cells(i, 10).Value = "" Then
Cells(i, 10).Value = Date
Cells(i, 2).Value = Sheets("REF").Range("A2").Value
Else
If Cells(i, 8).Value > 0 And Cells(i, 8).Value < 1 And Cells(i, 9).Value = "" Then
Cells(i, 9).Value = Date
Cells(i, 10).Value = ""
Cells(i, 2).Value = Sheets("REF").Range("A3").Value
Else
If Cells(i, 8).Value > 0 And Cells(i, 8).Value < 1 And Cells(i, 9).Value <> "" Then
Cells(i, 10).Value = ""
Cells(i, 2).Value = Sheets("REF").Range("A3").Value
End If
End If
End If
End If
End If
End If
End Sub
|
КОД ПРОХОДЯЩИЙСЯ ПО ВСЕМ СТРОКАМ СРАЗУКод |
---|
Sub CellsUpdate()
Dim LastRow As Long
Dim i As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 3 To LastRow
If Cells(i, 8).Value = 0 And Cells(i, 8).Value <> "" Then
Cells(i, 9).Value = ""
Cells(i, 10).Value = ""
Cells(i, 2).Value = Sheets("REF").Range("A1").Value
Else
If Cells(i, 8).Value = 1 And Cells(i, 9).Value = "" And Cells(i, 10).Value = "" Then
Cells(i, 9).Value = Date
Cells(i, 10).Value = Date
Cells(i, 2).Value = Sheets("REF").Range("A2").Value
Else
If Cells(i, 8).Value = 1 And Cells(i, 9).Value <> "" And Cells(i, 10).Value = "" Then
Cells(i, 10).Value = Date
Cells(i, 2).Value = Sheets("REF").Range("A2").Value
Else
If Cells(i, 8).Value > 0 And Cells(i, 8).Value < 1 And Cells(i, 9).Value = "" Then
Cells(i, 9).Value = Date
Cells(i, 10).Value = ""
Cells(i, 2).Value = Sheets("REF").Range("A3").Value
Else
If Cells(i, 8).Value > 0 And Cells(i, 8).Value < 1 And Cells(i, 9).Value <> "" Then
Cells(i, 10).Value = ""
Cells(i, 2).Value = Sheets("REF").Range("A3").Value
End If
End If
End If
End If
End If
Next i
End Sub
|