Есть задача, код работает, необходимо доделать. В ячейке J, назначен ответственный, если изменить ответственного, нужно, чтобы на его листе, у которого сменили ответственного удалилась та строка, а у другого, соответственно уже там добавляется (это уже работает). Как сделать? Чтобы удалялась строка при сравнении. То есть, отлично все описано в названии темы. Файл прикрепляю.
Есть задача, код работает, необходимо доделать. В ячейке J, назначен ответственный, если изменить ответственного, нужно, чтобы на его листе, у которого сменили ответственного удалилась та строка, а у другого, соответственно уже там добавляется (это уже работает). Как сделать? Чтобы удалялась строка при сравнении. То есть, отлично все описано в названии темы. Файл прикрепляю.flywithme1299
Как сделать? Чтобы удалялась строка при сравнении.
Надо сравнивать данные в тех ячейках, в которых сменился со всеми у исполнителя, начиная с последней. Если есть схожие записи, то могут быть проблемы. Стоит ввести идентификатор записи у каждого исполнителя и тогда будет достаточно искать по идентификатору.
Как сделать? Чтобы удалялась строка при сравнении.
Надо сравнивать данные в тех ячейках, в которых сменился со всеми у исполнителя, начиная с последней. Если есть схожие записи, то могут быть проблемы. Стоит ввести идентификатор записи у каждого исполнителя и тогда будет достаточно искать по идентификатору.VBAdevelope
Макросы VBA Excel, Word на заказ. Сказать спасибо на Юмани: 410015093172871
Если на именных листах информация только для просмотра, то можно просто заново перезаполнять листы. Важно, чтобы названия листов совпадали с фамилиями в списке. В первоначальном примере были лишние пробелы в конце каждой фамилии
Если на именных листах информация только для просмотра, то можно просто заново перезаполнять листы. Важно, чтобы названия листов совпадали с фамилиями в списке. В первоначальном примере были лишние пробелы в конце каждой фамилииPelena
Pelena, Да решение очень хорошее, но к сожалению на других листах, ответственные будут дополнительно вносит корректировки, извините, что не уточнил изначально. Вот в файлике добавил еще не много кода.
Pelena, Да решение очень хорошее, но к сожалению на других листах, ответственные будут дополнительно вносит корректировки, извините, что не уточнил изначально. Вот в файлике добавил еще не много кода.flywithme1299
В первоначальном примере были лишние пробелы в конце каждой фамилии
Уже делал гражданину макросы, в которых устранён был данный недостаток путём трима пробелов. По сути туда надо просто допилить поиск соответствующей записи для удаления
В первоначальном примере были лишние пробелы в конце каждой фамилии
Уже делал гражданину макросы, в которых устранён был данный недостаток путём трима пробелов. По сути туда надо просто допилить поиск соответствующей записи для удаленияVBAdevelope
Макросы VBA Excel, Word на заказ. Сказать спасибо на Юмани: 410015093172871
VBAdevelope, Да, помогли, но нумерацию сделал не много другим способом. В итоге, давно была идея сделать идентификатор, вот сейчас сделал, он находится в столбце "S", с помощью него бы сделать как раз таки удаление строки.
VBAdevelope, Да, помогли, но нумерацию сделал не много другим способом. В итоге, давно была идея сделать идентификатор, вот сейчас сделал, он находится в столбце "S", с помощью него бы сделать как раз таки удаление строки.flywithme1299
Sub Copy_() Application.ScreenUpdating = False u = Cells(Rows.Count, "A").End(xlUp).Row For v = 2 To u w = Range("J" & v).Value a = Range("T" & v).Value If w <> a And a <> "" Then b = Application.Match(Range("S" & v), Sheets(a).Range("S:S"), 0) If IsNumeric(b) Then Sheets(a).Rows(b).Delete Shift:=xlUp End If x = Sheets(w).Cells(Rows.Count, "S").End(xlUp).Row + 1 '=ЕСЛИ(ЕПУСТО(J3);" ";G3&""&ЛЕВСИМВ(J3;1)&""&ЛЕВСИМВ(D3;1)) Range("S" & v).FormulaR1C1 = "=IF(ISBLANK(RC[-9]),"" "",RC[-12]&""""&LEFT(RC[-9],1)&""""&LEFT(RC[-14],3))" Range("S" & v) = Range("S" & v).Value y = Application.Match(Range("S" & v), Sheets(w).Range("S:S"), 0) If IsNumeric(y) = False Then Range("A" & v & ":B" & v).Copy Sheets(w).Range("B" & x) Range("D" & v & ":I" & v).Copy Sheets(w).Range("D" & x) Range("S" & v).Copy Sheets(w).Range("S" & x) Sheets(w).Range("A" & x) = x - 1 'нумерация по-порядку End If Next '=ДВССЫЛ("'"&J2&"'!N"&СТРОКА()-ПОИСКПОЗ(J2;J$2:J2;)+1)&"" Range("k2:k" & u).FormulaR1C1 = "=INDIRECT(""'""&RC[-1]&""'!N""&ROW()-MATCH(RC[-1],R2C[-1]:RC[-1],)+1)&""""" Range("k2:k" & u) = Range("k2:k" & u).Value 'ответственный t Range("t2:t" & u) = Range("j2:j" & u).Value Application.ScreenUpdating = True End Sub
[/vba]
[vba]
Код
Sub Copy_() Application.ScreenUpdating = False u = Cells(Rows.Count, "A").End(xlUp).Row For v = 2 To u w = Range("J" & v).Value a = Range("T" & v).Value If w <> a And a <> "" Then b = Application.Match(Range("S" & v), Sheets(a).Range("S:S"), 0) If IsNumeric(b) Then Sheets(a).Rows(b).Delete Shift:=xlUp End If x = Sheets(w).Cells(Rows.Count, "S").End(xlUp).Row + 1 '=ЕСЛИ(ЕПУСТО(J3);" ";G3&""&ЛЕВСИМВ(J3;1)&""&ЛЕВСИМВ(D3;1)) Range("S" & v).FormulaR1C1 = "=IF(ISBLANK(RC[-9]),"" "",RC[-12]&""""&LEFT(RC[-9],1)&""""&LEFT(RC[-14],3))" Range("S" & v) = Range("S" & v).Value y = Application.Match(Range("S" & v), Sheets(w).Range("S:S"), 0) If IsNumeric(y) = False Then Range("A" & v & ":B" & v).Copy Sheets(w).Range("B" & x) Range("D" & v & ":I" & v).Copy Sheets(w).Range("D" & x) Range("S" & v).Copy Sheets(w).Range("S" & x) Sheets(w).Range("A" & x) = x - 1 'нумерация по-порядку End If Next '=ДВССЫЛ("'"&J2&"'!N"&СТРОКА()-ПОИСКПОЗ(J2;J$2:J2;)+1)&"" Range("k2:k" & u).FormulaR1C1 = "=INDIRECT(""'""&RC[-1]&""'!N""&ROW()-MATCH(RC[-1],R2C[-1]:RC[-1],)+1)&""""" Range("k2:k" & u) = Range("k2:k" & u).Value 'ответственный t Range("t2:t" & u) = Range("j2:j" & u).Value Application.ScreenUpdating = True End Sub
flywithme1299, здравствуйте! Посмотрите вариант в фале. Макросы находятся в модуле_1 и модуле листа "Заполнение" Принцип работы: при активации листа "Заполнение", данные из столбца J копируются на временный лист с именем "tmp" (его не удалять, по желанию можно сделать скрытым). Затем при изменении фамилии в столбце J отрабатывает макрос Copy_, который добавляет/удаляет строки на соответствующих листах. По завершению свой работы он обновляет данные на временном листе "tmp".
После деактивации листа "Заполнение", макрос (находится в модуле листа "Заполнение"-> событие Deactivate) сверяет столбец с фамилиями на листе "Заполнение" с листом "tmp" и, если найдены расхождения (например, изменили фамилию и не нажали кнопку), по нажатию кнопки YES запускает макрос Copy_ и опять копируются/ удаляются строки на соответствующих листах (те же действия, что и при нажатии кнопки).
Также важно, чтобы имена листов совпадали. Я убрал крайние правые пробелы из столбца с фамилиями, на основании которых формируется список. Предполагается, что и фамилии сотрудников и наименования товаров уникальные значения.
flywithme1299, здравствуйте! Посмотрите вариант в фале. Макросы находятся в модуле_1 и модуле листа "Заполнение" Принцип работы: при активации листа "Заполнение", данные из столбца J копируются на временный лист с именем "tmp" (его не удалять, по желанию можно сделать скрытым). Затем при изменении фамилии в столбце J отрабатывает макрос Copy_, который добавляет/удаляет строки на соответствующих листах. По завершению свой работы он обновляет данные на временном листе "tmp".
После деактивации листа "Заполнение", макрос (находится в модуле листа "Заполнение"-> событие Deactivate) сверяет столбец с фамилиями на листе "Заполнение" с листом "tmp" и, если найдены расхождения (например, изменили фамилию и не нажали кнопку), по нажатию кнопки YES запускает макрос Copy_ и опять копируются/ удаляются строки на соответствующих листах (те же действия, что и при нажатии кнопки).
Также важно, чтобы имена листов совпадали. Я убрал крайние правые пробелы из столбца с фамилиями, на основании которых формируется список. Предполагается, что и фамилии сотрудников и наименования товаров уникальные значения.jun
Странно. P.S. Нашел ошибку в макросе. В приложенном файле исправленный код. Тестируйте. В этом варианте лист с именем tmp создается автоматически, если ещё не создан
Странно. P.S. Нашел ошибку в макросе. В приложенном файле исправленный код. Тестируйте. В этом варианте лист с именем tmp создается автоматически, если ещё не созданjun