Здравствуйте! Возник вопрос следующего характера: Во вложении на Листе ОТ есть кнопка для добавления строк в табличную часть Протокола, точнее строка просто копируется и вставляется, вставляется она с текстом предыдущей, чего хотелось бы избежать. Проблема состоит в том, что ячейки объединены, плюс в некоторых есть формулы, которые необходимо сохранить. Возможно ли сделать так, что бы строка которая копируется/вставляется была без внесенных значений, но при этом остались формулы??
Здравствуйте! Возник вопрос следующего характера: Во вложении на Листе ОТ есть кнопка для добавления строк в табличную часть Протокола, точнее строка просто копируется и вставляется, вставляется она с текстом предыдущей, чего хотелось бы избежать. Проблема состоит в том, что ячейки объединены, плюс в некоторых есть формулы, которые необходимо сохранить. Возможно ли сделать так, что бы строка которая копируется/вставляется была без внесенных значений, но при этом остались формулы??ProstaK
В "умных таблицах" сложно будет вставлять данные "в середину", да и зачем усложнять? Даже в имеющемся коде - не хватает только "зачистить получившуюся новую строку от значений, оставив формулы", это одна строчка... Но мы пойдем немного далее - поправим код на несколько более оптимальный [vba]
Код
Sub ДобавлениеСтрокПротокол_ОТ() Dim tbl As Range, cell As Range
' проверим попадание в таблицу Set tbl = ActiveCell.CurrentRegion.Cells(1, 1).CurrentRegion If tbl.Rows.Count < 3 Then Set tbl = Nothing Else Set tbl = tbl.Offset(2).Resize(tbl.Rows.Count - 2) End If If Intersect(tbl, ActiveCell.EntireRow) Is Nothing Then MsgBox "Выделите ячейку в таблице" Exit Sub End If
' далее tbl это строка-образец, добавляем новую ниже её Set tbl = Intersect(tbl, ActiveCell.EntireRow) tbl.Offset(1).EntireRow.Insert tbl.Copy tbl.Offset(1) If Len(tbl.Cells(1, 2)) > 0 Then tbl.Offset(1).SpecialCells(xlCellTypeConstants).ClearContents tbl.Offset(1).Cells(1, 2).Select End Sub
[/vba]Думаю, поправить остальные процедуры ТС сможет и сам...
В "умных таблицах" сложно будет вставлять данные "в середину", да и зачем усложнять? Даже в имеющемся коде - не хватает только "зачистить получившуюся новую строку от значений, оставив формулы", это одна строчка... Но мы пойдем немного далее - поправим код на несколько более оптимальный [vba]
Код
Sub ДобавлениеСтрокПротокол_ОТ() Dim tbl As Range, cell As Range
' проверим попадание в таблицу Set tbl = ActiveCell.CurrentRegion.Cells(1, 1).CurrentRegion If tbl.Rows.Count < 3 Then Set tbl = Nothing Else Set tbl = tbl.Offset(2).Resize(tbl.Rows.Count - 2) End If If Intersect(tbl, ActiveCell.EntireRow) Is Nothing Then MsgBox "Выделите ячейку в таблице" Exit Sub End If
' далее tbl это строка-образец, добавляем новую ниже её Set tbl = Intersect(tbl, ActiveCell.EntireRow) tbl.Offset(1).EntireRow.Insert tbl.Copy tbl.Offset(1) If Len(tbl.Cells(1, 2)) > 0 Then tbl.Offset(1).SpecialCells(xlCellTypeConstants).ClearContents tbl.Offset(1).Cells(1, 2).Select End Sub
[/vba]Думаю, поправить остальные процедуры ТС сможет и сам...AndreTM
AndreTM, возник вопрос по коду, приведенного Вами выше, при добавлении строки, если активная ячейка находится на пустой строке, добавляется строка, но при этом выкидывает ошибку "400", как можно этого избежать?
AndreTM, возник вопрос по коду, приведенного Вами выше, при добавлении строки, если активная ячейка находится на пустой строке, добавляется строка, но при этом выкидывает ошибку "400", как можно этого избежать?ProstaK
А никак. Пока будете использовать объединенные ячейки и копирование-вставку строк "по образцу" - никак не обойти это. С другой стороны, вы НЕ ДОЛЖНЫ добавлять строки, если у вас и так есть "незаполненные" строки, можете обыграть этот момент...
А никак. Пока будете использовать объединенные ячейки и копирование-вставку строк "по образцу" - никак не обойти это. С другой стороны, вы НЕ ДОЛЖНЫ добавлять строки, если у вас и так есть "незаполненные" строки, можете обыграть этот момент...AndreTM
AndreTM, Ясно, я понимаю, что не должны добавляться строки, пока есть пустые, просто форму хочу отправить по подразделения, а там возникнут вопросы))) В любом случае огромное спасибо!
AndreTM, Ясно, я понимаю, что не должны добавляться строки, пока есть пустые, просто форму хочу отправить по подразделения, а там возникнут вопросы))) В любом случае огромное спасибо!ProstaK
Если у вас это "распространяемая форма" - то как вы вообще думаете дальше модифицировать и распространять код макросов так, чтобы не затрагивать уже имеющиеся данные? Подумайте и над этим...
А насчет "пустой строки" - то можно поправить код, как показано. И, как я упоминал выше - заодно не забудьте и остальные макросы свои поисправлять, если надо.
Если у вас это "распространяемая форма" - то как вы вообще думаете дальше модифицировать и распространять код макросов так, чтобы не затрагивать уже имеющиеся данные? Подумайте и над этим...
А насчет "пустой строки" - то можно поправить код, как показано. И, как я упоминал выше - заодно не забудьте и остальные макросы свои поисправлять, если надо.AndreTM
AndreTM, Единственное где данные могут сильно меняться это в списке, откуда впринципе не составит труда скопировать информацию и в случае необходимости вставить в новый файл. Спасибо!
AndreTM, Единственное где данные могут сильно меняться это в списке, откуда впринципе не составит труда скопировать информацию и в случае необходимости вставить в новый файл. Спасибо!ProstaK
Сообщение отредактировал ProstaK - Пятница, 04.08.2017, 10:28