Здравствуйте уважаемы знатоки! Столкнулась с очень необычной для меня проблемой: на первом листе книги сделала макрос, чтобы добавлял строки в таблицу с сохранением формул и очисткой значений, но не формул. Все работает как нужно. Хотела сделать похожий макрос на второй лист, но с условием, что если количество строк в таблицах совпадает, то очищение не проводиться, если же на 2 листе строк в таблице больше, то все последующие очищаются от значений, но не от формул. Проблемы возникли откуда не ждали, макрос очень криво добавляет строки, почему то вверх, соответственно при этом пересчитывая формулы не так как мне надо. Я попробовала уже все, почитала форумы, ну не работает как нужно на втором листе! Помогите!
Здравствуйте уважаемы знатоки! Столкнулась с очень необычной для меня проблемой: на первом листе книги сделала макрос, чтобы добавлял строки в таблицу с сохранением формул и очисткой значений, но не формул. Все работает как нужно. Хотела сделать похожий макрос на второй лист, но с условием, что если количество строк в таблицах совпадает, то очищение не проводиться, если же на 2 листе строк в таблице больше, то все последующие очищаются от значений, но не от формул. Проблемы возникли откуда не ждали, макрос очень криво добавляет строки, почему то вверх, соответственно при этом пересчитывая формулы не так как мне надо. Я попробовала уже все, почитала форумы, ну не работает как нужно на втором листе! Помогите!Cherry_June
Попробовала доделать свою задумку и что-то опять не хватает(((( Мне нужно, чтобы после добавления новой строки на лист "Учетка" макрос сравнивал кол-во заполняемых исполнителем строк в таблицах на листах Наряд и Учетка, и если во втором случае таблица больше, то строка становилась пустой (без данных, но с формулами). Потому что если просто добавить строку, заполнить ее, а потом добавить еще одну, то все содержимое скопируется, чего не должно быть
[vba]
Код
Sub Кнопка4_Щелчок()
With ActiveSheet LastRow = Cells(Rows.Count, 10).End(xlUp).Row Rows(LastRow).Copy Rows(LastRow + 1).Insert Shift:=xlDown Rows(LastRow + 1).PasteSpecial Paste:=xlPasteFormulas End With Application.CutCopyMode = False
With ActiveWorkbook.Sheets("Наряд") Z = .Cells(Rows.Count, 9).End(xlUp).Row Z = Z - 13 'кол-во строк в таблице на 1 листе End With
x = LastRow - 7 'кол-во строк в таблице на Листе 2 If x >= Z Then 'если таблица2 больше таблицы1, то необходимо очистить данные в добавленной строке, но не формулы x = LastRow + 1 ActiveSheet.Range("$A$" & x, "$J$" & x).SpecialCells(xlCellTypeConstants, xlNumbers).ClearContents 'тут выдает ошибку, когда доходит до разницы таблиц, но строку пустую добавляет End If End Sub
[/vba]
Попробовала доделать свою задумку и что-то опять не хватает(((( Мне нужно, чтобы после добавления новой строки на лист "Учетка" макрос сравнивал кол-во заполняемых исполнителем строк в таблицах на листах Наряд и Учетка, и если во втором случае таблица больше, то строка становилась пустой (без данных, но с формулами). Потому что если просто добавить строку, заполнить ее, а потом добавить еще одну, то все содержимое скопируется, чего не должно быть
[vba]
Код
Sub Кнопка4_Щелчок()
With ActiveSheet LastRow = Cells(Rows.Count, 10).End(xlUp).Row Rows(LastRow).Copy Rows(LastRow + 1).Insert Shift:=xlDown Rows(LastRow + 1).PasteSpecial Paste:=xlPasteFormulas End With Application.CutCopyMode = False
With ActiveWorkbook.Sheets("Наряд") Z = .Cells(Rows.Count, 9).End(xlUp).Row Z = Z - 13 'кол-во строк в таблице на 1 листе End With
x = LastRow - 7 'кол-во строк в таблице на Листе 2 If x >= Z Then 'если таблица2 больше таблицы1, то необходимо очистить данные в добавленной строке, но не формулы x = LastRow + 1 ActiveSheet.Range("$A$" & x, "$J$" & x).SpecialCells(xlCellTypeConstants, xlNumbers).ClearContents 'тут выдает ошибку, когда доходит до разницы таблиц, но строку пустую добавляет End If End Sub
With ActiveSheet LastRow = .Cells(.Rows.Count, 10).End(xlUp).Row .Rows(LastRow).Copy .Rows(LastRow + 1).Insert Shift:=xlDown .Rows(LastRow + 1).PasteSpecial Paste:=xlPasteFormulas End With Application.CutCopyMode = False
With ActiveWorkbook.Sheets("Наряд") Z = .Cells(.Rows.Count, 9).End(xlUp).Row Z = Z - 13 'кол-во строк в таблице на 1 листе End With
x = LastRow - 7 'кол-во строк в таблице на Листе 2
If x >= Z Then 'если таблица2 больше таблицы1, то необходимо очистить данные в добавленной строке, но не формулы x = LastRow + 1 On Error Resume Next 'бывает нужных ячеек нет ActiveSheet.Range("A" & x & ":" & "J" & x).SpecialCells(xlCellTypeConstants, xlNumbers).ClearContents 'тут выдает ошибку, когда доходит до разницы таблиц, но строку пустую добавляет End If
[/vba] End Sub
Не всё понял, поэтому формально слегка причесал:
[vba]
Код
Sub Кнопка4_Щелчок_InExSu()
With ActiveSheet LastRow = .Cells(.Rows.Count, 10).End(xlUp).Row .Rows(LastRow).Copy .Rows(LastRow + 1).Insert Shift:=xlDown .Rows(LastRow + 1).PasteSpecial Paste:=xlPasteFormulas End With Application.CutCopyMode = False
With ActiveWorkbook.Sheets("Наряд") Z = .Cells(.Rows.Count, 9).End(xlUp).Row Z = Z - 13 'кол-во строк в таблице на 1 листе End With
x = LastRow - 7 'кол-во строк в таблице на Листе 2
If x >= Z Then 'если таблица2 больше таблицы1, то необходимо очистить данные в добавленной строке, но не формулы x = LastRow + 1 On Error Resume Next 'бывает нужных ячеек нет ActiveSheet.Range("A" & x & ":" & "J" & x).SpecialCells(xlCellTypeConstants, xlNumbers).ClearContents 'тут выдает ошибку, когда доходит до разницы таблиц, но строку пустую добавляет End If