Dim r0 As Long, r1 As Long Private Sub Worksheet_Change(ByVal Target As Range) r1 = 0 r1 = Cells(Rows.Count, "c").End(xlUp).Row If r1 < r0 Then Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Delete ElseIf r1 > r0 Then Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Insert Shift:=xlDown End If On Error Resume Next 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] [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) r0 = 0 r0 = Cells(Rows.Count, "c").End(xlUp).Row End Sub
[/vba]
Игорь, может как-то так? [vba]
Код
Dim r0 As Long, r1 As Long Private Sub Worksheet_Change(ByVal Target As Range) r1 = 0 r1 = Cells(Rows.Count, "c").End(xlUp).Row If r1 < r0 Then Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Delete ElseIf r1 > r0 Then Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Insert Shift:=xlDown End If On Error Resume Next 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] [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) r0 = 0 r0 = Cells(Rows.Count, "c").End(xlUp).Row End Sub
Manyasha Ваш код будет работать только с одной строкой Можно немного изменить: [vba]
Код
Dim r0 As Long, r1 As Long Private Sub Worksheet_Change(ByVal Target As Range) r1 = 0 r1 = Cells(Rows.Count, "c").End(xlUp).Row If r1 < r0 Then rt = r0 - r1 'Debug.Print Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Address Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Delete ElseIf r1 > r0 Then rt = r1 - r0 'Debug.Print Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Address Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Insert Shift:=xlDown End If On Error Resume Next 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 Private Sub Worksheet_SelectionChange(ByVal Target As Range) r0 = 0 r0 = Cells(Rows.Count, "c").End(xlUp).Row End Sub
[/vba]
Manyasha Ваш код будет работать только с одной строкой Можно немного изменить: [vba]
Код
Dim r0 As Long, r1 As Long Private Sub Worksheet_Change(ByVal Target As Range) r1 = 0 r1 = Cells(Rows.Count, "c").End(xlUp).Row If r1 < r0 Then rt = r0 - r1 'Debug.Print Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Address Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Delete ElseIf r1 > r0 Then rt = r1 - r0 'Debug.Print Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Address Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Insert Shift:=xlDown End If On Error Resume Next 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 Private Sub Worksheet_SelectionChange(ByVal Target As Range) r0 = 0 r0 = Cells(Rows.Count, "c").End(xlUp).Row End Sub
И снова всем Доброго!!!! Прошу извинить:вчера завал на работе, не посмотрел.Спасибо за помощь!!!А можно еще одну хотелку?Строки добавляются на листе Контроль,но хотелось бы,что бы в эти строки копировалось содержимое ячеек с Листа График(весь диапазон А6:Н1000), [p.s.]И если будет времечко, прокомментируйте строчки кода, что бы я больше не приставал :D
И снова всем Доброго!!!! Прошу извинить:вчера завал на работе, не посмотрел.Спасибо за помощь!!!А можно еще одну хотелку?Строки добавляются на листе Контроль,но хотелось бы,что бы в эти строки копировалось содержимое ячеек с Листа График(весь диапазон А6:Н1000), [p.s.]И если будет времечко, прокомментируйте строчки кода, что бы я больше не приставал :Dкитин
Dim r0 As Long, r1 As Long Private Sub Worksheet_Change(ByVal Target As Range) 'при изменении на листе происходит обновление информации по количеству строк на листе КОНТРОЛЬ r1 = Cells(Rows.Count, "c").End(xlUp).Row
'сравнение количества строк на 2-х листах If r1 < r0 Then 'если на листе контроль меньше строк значит удаляем rt = r0 - r1 'определяем разницу строк, чтобы понять сколько строк удалить Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Delete ElseIf r1 > r0 Then 'если на листе контроль больше строк значит добавляем rt = r1 - r0 'определяем разницу строк, чтобы понять сколько строк добавить Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Insert Shift:=xlDown End If
Sheets("график производства").Range("a6:h1000").Copy 'копируем диапазон Sheets("контроль выполнения графика").Range("a5").PasteSpecial xlPasteValues 'вставляем только значения можно вставить все xlPasteAll On Error Resume Next 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 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'при любом выделении на листе происходит обновление информации по количеству строк на листе график r0 = Cells(Rows.Count, "c").End(xlUp).Row End Sub
[/vba]
Как то так :
[vba]
Код
Dim r0 As Long, r1 As Long Private Sub Worksheet_Change(ByVal Target As Range) 'при изменении на листе происходит обновление информации по количеству строк на листе КОНТРОЛЬ r1 = Cells(Rows.Count, "c").End(xlUp).Row
'сравнение количества строк на 2-х листах If r1 < r0 Then 'если на листе контроль меньше строк значит удаляем rt = r0 - r1 'определяем разницу строк, чтобы понять сколько строк удалить Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Delete ElseIf r1 > r0 Then 'если на листе контроль больше строк значит добавляем rt = r1 - r0 'определяем разницу строк, чтобы понять сколько строк добавить Sheets("контроль выполнения графика").Range(Target.Address).Offset(-1).Resize(rt).Insert Shift:=xlDown End If
Sheets("график производства").Range("a6:h1000").Copy 'копируем диапазон Sheets("контроль выполнения графика").Range("a5").PasteSpecial xlPasteValues 'вставляем только значения можно вставить все xlPasteAll On Error Resume Next 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 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'при любом выделении на листе происходит обновление информации по количеству строк на листе график r0 = Cells(Rows.Count, "c").End(xlUp).Row End Sub
Раз уж дописала, тоже выложу)) Разница с кодом SLAVICK в том, что диапазон a6:h1000 копируется не весь, а только его пересечение с выделением (Target). Для I6:AJ1000 - аналогично поправила.
Раз уж дописала, тоже выложу)) Разница с кодом SLAVICK в том, что диапазон a6:h1000 копируется не весь, а только его пересечение с выделением (Target). Для I6:AJ1000 - аналогично поправила.Manyasha