Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Анисия от 26.02.2018, 11:48

Название: добавление строки
Отправлено: Анисия от 26.02.2018, 11:48
Доброго времени суток!
Мне необходимо настроить добавление строк в таблице, чтобы при двойном нажатии на ячейку "добавить" (C37) в таблице появлялась новая строка. Строка должна полностью цеплять все формулы и форматирования из предыдущей строки. Т.е. должна появиться строка (37,38) в интервале от B до BX с выпадающими списками, условными форматированиями, формулами и т.д. абсолютно аналогичная строке (35,36) и уже пронумерованная.
Как? Помогите ламеру.   
Название: Re: добавление строки
Отправлено: boa от 26.02.2018, 13:09
Здравствуйте, в таких ситуациях очень помогает макрорекордер
Листинг модуля листа "Лист1"

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Address = Range("добавить").Address Then
        Cancel = True
       
     With Application
        .Rows(Target.Row - 2 & ":" & Target.Row - 1).EntireRow.Copy
        .Rows(Target.Row).EntireRow.Insert Shift:=xlDown
        .CutCopyMode = False
        Target.Offset(-2, -1) = Target.Offset(-4, -1).Value + 1
        Target.Select
    End With
   
   End If
End Sub

Название: Re: добавление строки
Отправлено: Анисия от 26.02.2018, 14:38
Спасибо большое!
Про макросы раньше разве что только слышала и то краем уха. Попыталась разобраться, пока не очень выходит. От программирования весьма весьма далека... последний раз на уроках информатики в школе сталкивалась, классе в 5ом, кажется, была такая Черепашка Лого :)

Я в такой же таблице сама пытаюсь запустить этот макрос и у меня выскакивает ошибка Runtime Error 1004: Method 'Range' Of Object '_Worksheet' failed, строка If Target.Address = Range("добавить").Address Then выделяется жёлтым цветом.
Я так понимаю, там ссылка куда-то не туда идёт или что-то такое. Как исправить?

Не нужно в цитату вставлять целое сообщение[МОДЕРАТОР]
Название: Re: добавление строки
Отправлено: boa от 26.02.2018, 16:08
в книге, приложенной к предыдущему посту, есть именованный диапазон "добавить" его можно увидеть нажав Ctrl+F3
он ссылается на ячейку с надписью "добавить".
Добавьте, по аналогии, именованный диапазон в своей новой книге.
Название: Re: добавление строки
Отправлено: Анисия от 27.02.2018, 13:14
Спасибо! Всё работает)
А подскажите, пожалуйста, как сделать аналогичную ячейку с функцией удалить строку, если вдруг лишние добавились. Пытаюсь, но никак не выходит.
Название: Re: добавление строки
Отправлено: boa от 27.02.2018, 14:22
Цитата: Анисия от 27.02.2018, 13:14
как сделать аналогичную ячейку с функцией удалить строку, если вдруг лишние добавились.

Вспоминается фраза из мультика: "вы и есть за меня будете?"

выделяете лишние строки/столбцы и... нажимаете Ctrl+"-"
Название: Re: добавление строки
Отправлено: Анисия от 27.02.2018, 14:29
Нет, есть за меня не нужно) В дальнейшем планируется защита ячеек от редактирования. И все действия с добавлением/удалением строк хотелось вынести за рамки таблицы в подобие "кнопок". Нет так нет, буду дальше лопатить интернет, может-таки разберусь.
Название: Re: добавление строки
Отправлено: boa от 27.02.2018, 18:38
попробуйте адаптировать под свои нужды
Sub DeleteEmptyRow()
' удаляет пустые строки в выделенном диапазоне
    Dim F&: F = Selection.Row
    Dim l&: l = Selection.Rows.Count + F - 1
    Dim i&: For i = l To F Step -1
        If Application.WorksheetFunction.CountA(Selection.Rows(i - F + 1)) = 0 Then ActiveSheet.Rows(i).Delete
    Next
End Sub