Доброго всем времени суток!В книге есть лист "График производства".Из него надо скопировать данные на лист "Контроль...."Это я накропал.Но что добавить в макрос, чтобы копировались только изменения на листе "График производства", не трогая уже скопированные?[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I6:AJ1000")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If If Not Intersect(Target, Range("A6:H1000")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If End Sub
[/vba][p.s.]и что бы макрос срабатывал при сохранении книги
Доброго всем времени суток!В книге есть лист "График производства".Из него надо скопировать данные на лист "Контроль...."Это я накропал.Но что добавить в макрос, чтобы копировались только изменения на листе "График производства", не трогая уже скопированные?[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I6:AJ1000")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If If Not Intersect(Target, Range("A6:H1000")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If End Sub
[/vba][p.s.]и что бы макрос срабатывал при сохранении книгикитин
китин, пробуйте Что сделал: При открытии книги - создается массив из уже существующих данных на листе контроль... При изменении на листе "график производства" - эти изменения записываются в этот массив.(только измененные ячейки в контролируемом диапазоне) При сохранении книги - происходит замена данных на листе "контроль..." новыми консолидированными данными
Как вариант - можно сделать просто словарь с адресами измененных ячеек - а потом при сохранении поочередно копировать данные этих ячеек. Но ввиду большого количества вставок - будет работать намного дольше при сохранении.
китин, пробуйте Что сделал: При открытии книги - создается массив из уже существующих данных на листе контроль... При изменении на листе "график производства" - эти изменения записываются в этот массив.(только измененные ячейки в контролируемом диапазоне) При сохранении книги - происходит замена данных на листе "контроль..." новыми консолидированными данными
Как вариант - можно сделать просто словарь с адресами измененных ячеек - а потом при сохранении поочередно копировать данные этих ячеек. Но ввиду большого количества вставок - будет работать намного дольше при сохранении.SLAVICK
китин, а если просто, при изменении листа график производства изменения вносить в лист "контроль выполнения графика"? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I6:AJ99")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If End Sub
[/vba]
китин, а если просто, при изменении листа график производства изменения вносить в лист "контроль выполнения графика"? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I6:AJ99")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If End Sub
Марина а можно еще еще добавить такое же, только для диапазона А6:Н99 ??? я попробовал вписать в код, но не туда копирует [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I6:AJ1000")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If If Not Intersect(Target, Range("A6:H1000")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If End Sub
[/vba] Что там изменить?И еще :можно, что бы после нажатия на Enter не перескакивало на лист Контроль? [p.s.]блин почему кракозябры выскакивают?
Марина а можно еще еще добавить такое же, только для диапазона А6:Н99 ??? я попробовал вписать в код, но не туда копирует [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I6:AJ1000")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If If Not Intersect(Target, Range("A6:H1000")) Is Nothing Then Sheets("контроль выполнения графика").Select Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If End Sub
[/vba] Что там изменить?И еще :можно, что бы после нажатия на Enter не перескакивало на лист Контроль? [p.s.]блин почему кракозябры выскакивают?китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Сообщение отредактировал китин - Среда, 02.12.2015, 14:13
Ярослав ,да лучше конечно при сохранении.У вас в файлике немного не то.мне надо, что бы изменения на листе Контроль сохранялись при копировании с листа График.Основная работа идет на листе Контроль.Лист График как бы эталонный. Там измения только по официальному извещению
Ярослав ,да лучше конечно при сохранении.У вас в файлике немного не то.мне надо, что бы изменения на листе Контроль сохранялись при копировании с листа График.Основная работа идет на листе Контроль.Лист График как бы эталонный. Там измения только по официальному извещениюкитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I6:AJ99")) Is Nothing Then 'на листе контроль, сдвигаемся на 1 строчку вверх и на 3 столбца вправо Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If If Not Intersect(Target, Range("A6:H1000")) Is Nothing Then 'на листе контроль, сдвигаемся на 1 строчку вверх (вправо уже не нужно, т.к столбцы одинаково расположены) Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Value = Target.Value End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I6:AJ99")) Is Nothing Then 'на листе контроль, сдвигаемся на 1 строчку вверх и на 3 столбца вправо Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If If Not Intersect(Target, Range("A6:H1000")) Is Nothing Then 'на листе контроль, сдвигаемся на 1 строчку вверх (вправо уже не нужно, т.к столбцы одинаково расположены) Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Value = Target.Value End If End Sub
Если лист график - эталонный - то когда Вы копируете с него? Может просто задать диапазон замены и все? например так: [vba]
Код
Sub Макрос1() For Each c In Range("B6:E11,H13:J19,N8:Q14") Sheets("контроль выполнения графика").Range(c.Address).Offset(-1, 3).Value = c.Value Next End Sub
[/vba]
Если лист график - эталонный - то когда Вы копируете с него? Может просто задать диапазон замены и все? например так: [vba]
Код
Sub Макрос1() For Each c In Range("B6:E11,H13:J19,N8:Q14") Sheets("контроль выполнения графика").Range(c.Address).Offset(-1, 3).Value = c.Value Next End Sub
Ярослав на лист График вносятся добавления к плану, не меняя порядок.А на листе контроль порядок может меняться как угодно, в зависимости от возможностей производства.Вот и хочется автоматом добавлять дополнения к плану в листе График, не меняя порядок на листе Контроль.Наверно непонятно?но так хочет ШЕФ!!! И формулы тут не помогут
Ярослав на лист График вносятся добавления к плану, не меняя порядок.А на листе контроль порядок может меняться как угодно, в зависимости от возможностей производства.Вот и хочется автоматом добавлять дополнения к плану в листе График, не меняя порядок на листе Контроль.Наверно непонятно?но так хочет ШЕФ!!! И формулы тут не помогуткитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
И снова Доброго всем времечка!!!Возникла проблемка. На листе График частенько вносятся изменения в диапазоне А6:Н1000 путем вставления новых строк.Макрос на это не реагирует.Попробовал сваять вот этакое[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Sheets("график производства").Select Range("A6:H1000").Select Selection.Copy Sheets("контроль выполнения графика").Select Range("A5").Select ActiveSheet.Paste If Not Intersect(Target, Range("I6:AJ1000")) Is Nothing Then 'на листе контроль, сдвигаемся на 1 строчку вверх и на 3 столбца вправо Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If
End Sub
[/vba] выдает ошибку 1004 и выделяет желтым строчку Range("A5").Select
И снова Доброго всем времечка!!!Возникла проблемка. На листе График частенько вносятся изменения в диапазоне А6:Н1000 путем вставления новых строк.Макрос на это не реагирует.Попробовал сваять вот этакое[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Sheets("график производства").Select Range("A6:H1000").Select Selection.Copy Sheets("контроль выполнения графика").Select Range("A5").Select ActiveSheet.Paste If Not Intersect(Target, Range("I6:AJ1000")) Is Nothing Then 'на листе контроль, сдвигаемся на 1 строчку вверх и на 3 столбца вправо Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If
End Sub
[/vba] выдает ошибку 1004 и выделяет желтым строчку Range("A5").Selectкитин
Private Sub Worksheet_Change(ByVal Target As Range) Sheets("график производства").Range("A6:H1000").Copy Sheets("контроль выполнения графика").Range("A5") If Target.CountLarge > 1 Then Exit Sub If Not Intersect(Target, Range("I6:AJ1000")) Is Nothing Then 'на листе контроль, сдвигаемся на 1 строчку вверх и на 3 столбца вправо Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If End Sub
[/vba] лучше вообще избавлятся от всяких Select ов - во первых жутко тормозит, во вторых увеличивает вероятность ошибки. ЗЫ чтото я не совсем понял что Вы хотите этим макросом сделать - колонки А-Н меняются, но данные правее на листе "контроль" остаются те же
Попробуйте так: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Sheets("график производства").Range("A6:H1000").Copy Sheets("контроль выполнения графика").Range("A5") If Target.CountLarge > 1 Then Exit Sub If Not Intersect(Target, Range("I6:AJ1000")) Is Nothing Then 'на листе контроль, сдвигаемся на 1 строчку вверх и на 3 столбца вправо Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1, 3).Value = Target.Value End If End Sub
[/vba] лучше вообще избавлятся от всяких Select ов - во первых жутко тормозит, во вторых увеличивает вероятность ошибки. ЗЫ чтото я не совсем понял что Вы хотите этим макросом сделать - колонки А-Н меняются, но данные правее на листе "контроль" остаются те же SLAVICK