Excel это не сложно

Прочие форумы => Заказы на написание макросов, работа для специалистов по Excel и VBA и пр. => Тема начата: kalibus от 08.05.2021, 14:46:21



Название: Макрос. Вставка и удаление ячеек через перезапись со смещением.
Отправлено: kalibus от 08.05.2021, 14:46:21
Приветствую!
Напишите пжл для чайника ;-D 2 макроса.
1. Вставляет ячейки в нужной строке с перезаписью массива на строку ниже
2. Удаляет ячейки в нужной строке с перезаписью массива на строку выше.
Особенностью является, что данные в ячейках - связи элемента управления формы Поле со списком. Поэтому операции смещения не подходят - только перезапись данных.
В прилагаемом файле думаю все достаточно четко описано.



Название: Re:Макрос. Вставка и удаление ячеек через перезапись со смещением.
Отправлено: vikttur от 08.05.2021, 14:57:09
Давайте сделаем. См. личные сообщения


Название: Re:Макрос. Вставка и удаление ячеек через перезапись со смещением.
Отправлено: kalibus от 08.05.2021, 19:09:24
Спасибо. Но признаться не рассчитывал на такой бюджет. В общем, сам написал... там и писать то оказывается 3 строчки.


Название: Re:Макрос. Вставка и удаление ячеек через перезапись со смещением.
Отправлено: vikttur от 08.05.2021, 19:13:09
Сами - это хорошо. Но "три строчки"?
Ограничения по максимальной и минимальной строке, корректная обработка первой и последней строки, исключение ошибок... Советую подумать и дописать еще 5-10 строк )


Название: Re:Макрос. Вставка и удаление ячеек через перезапись со смещением.
Отправлено: kalibus от 09.05.2021, 02:02:21
Вы правы... так и получилось. С учетом знакомства с литературой от главы об обращении к ячейке, пол дня на сие угробил. Победил, но знания мне эти чувствую никогда больше не пригодятся :-\  И да, конечно всё сделал на уровне камня и топора ::) Но это первый мой опыт.
Код: (vb)

Sub VstavkaAt()
    Dim i As Range
    Set i = Range("O5")
    If i = 0 Then
        MsgBox "Введено недопустимое значение. Укажите ....", vbCritical, "Ошибка!"
    Else
    Dim l As Range
    Set l = Range("D190")
    If MsgBox("Желаете вставить пустую строку в " & l & " ? Данные сместятся на одну строку ниже.", vbQuestion + vbYesNo, "........") = vbNo Then
        Exit Sub
    End If
        Application.ScreenUpdating = False
        Range(Cells(i, 4), Cells(185, 4)).Copy Cells(i + 1, 23)
        Cells(i, 4).Value = ""
        Range(Cells(i + 1, 23), Cells(186, 23)).Copy Cells(i + 1, 4)
        Range("W7:Y186").Value = ""
        Range("D190").Value = ""
    End If
    MsgBox "Готово!", vbInformation, "Вставка пустой строки"
End Sub

Sub DeleteAt()
    Dim i As Range
    Set i = Range("P5")
    If i = 0 Then
        MsgBox "Введено недопустимое значение. Укажите № строки в интервале от ....", vbCritical, "Ошибка! ...."
    Else
    Dim l As Range
    Set l = Range("D192")
    If MsgBox("Желаете удалить данные в " & l & " строке? Данные снизу сместятся на одну строку выше.", vbQuestion + vbYesNo, ".....") = vbNo Then
        Exit Sub
    End If
        Application.ScreenUpdating = False
        Range(Cells(i + 1, 4), Cells(186, 4)).Copy Cells(i, 4)
        Cells(186, 4).Value = ""
         
        Range("D192").Value = ""
    End If
    MsgBox "Готово!", vbInformation, "Удаление строки"
End Sub