Здравствуйте, дорогие форумчане!
Очень нужна Ваша помощь.
У меня есть макрос, который срабатывает при изменении данных в диапазоне H3 - H10 000 на определенном листе (ниже приведен код).
(Макрос заполняет столбцы B, I, J, в зависисости от значения внесенного в H)
Если изменение идет обычным способом, то есть пользователь вручную меняет значение в ячейке указанного диапазона (H), то макрос срабатывает для данной строки и все в порядке.
Но если пользователь вставляет данные сразу в несколько ячеек указанного диапазона (H), то макрос срабатывает только для первой строки измененного диапазона в H.
То же самое происходит, если данные вносятся через заполнение-протягивание.
Подскажите пожалуйста, как мне изменить код, чтобы он срабатывал для всех измененнных ячеек в диапазоне и при внесении вручную, и при протягивании, и при вставке нескольких значений.
Большое спасибо заранее!
КОД СРАБАТЫВАЮЩИЙ НА УРОВНЕ СТРОКИ
КОД ПРОХОДЯЩИЙСЯ ПО ВСЕМ СТРОКАМ СРАЗУ
Очень нужна Ваша помощь.
У меня есть макрос, который срабатывает при изменении данных в диапазоне 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 |