Страницы: 1
RSS
Вставка и удаление строк с сохранением формул
 
Здравствуйте. Помогите , пожалуйста, новичку написать макрос. Надо вставлять и удалять строки так , чтобы в ячейках таблицы сохранялись формулы.
Проблема в том, что формула рассчитывает значения с нарастающим итогом (т.е. , учитывая значение верхней ячейки).  В моей реализации макроса при вставке сохраняется  ссылка на верхнюю ячейку без учета вставленной строки, а при удалении - выдается ошибка "неверная ссылка". Иллюстрация - в приложенном файле: попробуйте поудалять и повтавлять строки. Спасибо.
 
проверьте (для добавления строк)
но с "UsedRange" это может быть проблема если что-то будет написано рядом с таблицей:

Код
Option Explicit
Private Sub cmdApp_Click()
Dim r As Long, rws As Long[/P]
  If Intersect(ActiveCell, ActiveSheet.UsedRange) Is Nothing Then MsgBox "Net, eto ne proydet": Exit Sub
    If Selection.Rows.Count > 1 Then Exit Sub
    r = ActiveCell.Row: rws = Cells(Rows.Count, "A").End(xlUp).Row
    If r < 3 Then Exit Sub
    If r > rws Then Exit Sub
    '-------------------------------------------------------------------
    Application.ScreenUpdating = False
    Rows(r).Insert Shift:=xlShiftDown
    Range("A3").Value = rws - 2
    Range("A3:A" & rws).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=-1, Stop:=1
    Range("B3").Formula = "=ROW()"
    If rws > 3 Then Range("B3:B" & rws).FillDown
    Range("C3").FormulaR1C1 = "=RC[-2]-RC[-1]"
    If rws > 3 Then Range("C4").FormulaR1C1 = "=R[-1]C+RC[-2]-RC[-1]"
    If rws > 4 Then Range("C4:C" & rws).FillDown
    If r = rws Then
        Range("A" & r - 1 & ":C" & r - 1).Copy
        Range("A" & r & ":C" & r).PasteSpecial Paste:=xlPasteFormats
        ActiveCell.Select
        Application.CutCopyMode = False
    End If
    Range("C" & rws + 1).FormulaR1C1 = "=SUM(R[" & 2 - rws & "]C:R[-1]C)"
    Rows("3:" & rws + 1).AutoFit
    Application.ScreenUpdating = True
End Sub

там где "Rows®" должно быть "Rows( r )", не знаю зачем так это выскакивает
Изменено: ocet p - 26.03.2018 15:58:16
 
Огромное Вам спасибо, Вы мне очень помогли !
 
В строке
Код
 Range("A3:A" & rws).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=-1, Stop:=1

надо вставить
Код
If rws > 3 Then Range("A3:A" & rws).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=-1, Stop:=1
 
ocet p, для форматирования кода пользуйтесь кнопкой <.,,,>
 
OK, пробовал, но после выбора этого тега появляется текстовое поле. После ввода кода в этом поле и принятия кода, код в этом поле деформируется - и все зеленое ... (?) ... и например, вместо "Rows( r )", появляется "Rows®" ... и еще какие-то "[P] [/ P]" ... вот, латиника не выдерживает конкуренции с кириллицей ...  :-/ ... :-)
 
Код
ля-ля-ля
go-go-go
123
Range("A1").Value
Rows( r )
 
Да, поскольку вставляются пробелы "Rows( r )", но без них появляется "зарегистрированный товарный знак" "Rows®" ... "круца б...ба, доннерветтер" ... :-) :-) :-) ...
Изменено: ocet p - 27.03.2018 12:25:14
Страницы: 1
Наверх