VBA Excel. Вставьте строку ниже в том же формате, включая границы и рамки.

Я хочу создать макрос, который вставляет строку под выбранной ячейкой в ​​том же формате. Это код, который у меня есть до сих пор:

Public Sub insertRowBelow() ActiveCell.Offset(1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrAbove End Sub 

Проблема в том, что этот код только частично передает формат. Он использует тот же цвет фона для новой строки, но не использует границы / рамки для ячеек. Как я могу это достичь?

Самый простой вариант – использовать копию / вставку Excel.

 Public Sub insertRowBelow() ActiveCell.Offset(1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrAbove ActiveCell.EntireRow.Copy ActiveCell.Offset(1).EntireRow.PasteSpecial xlPasteFormats Application.CutCopyMode = False End Sub 
 Private Sub cmdInsertRow_Click() Dim lRow As Long Dim lRsp As Long On Error Resume Next lRow = Selection.Row() lRsp = MsgBox("Insert New row above " & lRow & "?", _ vbQuestion + vbYesNo) If lRsp <> vbYes Then Exit Sub Rows(lRow).Select Selection.Copy Rows(lRow + 1).Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False 'Paste formulas and conditional formatting in new row created Rows(lRow).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone End Sub 

Это то, что я использую. Протестировано и работает,

Благодаря,

ну, используя запись Macro, и делаю это вручную, я закончил с этим кодом .. который, кажется, работает .. (хотя это не один лайнер, как ваш;)

 lrow = Selection.Row() Rows(lrow).Select Selection.Copy Rows(lrow + 1).Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False Selection.ClearContents 

(Я поставил ClearContents там, потому что вы указали нужный формат, и я предполагаю, что вам не нужны данные;))

При вставке строки, независимо от CopyOrigin, Excel будет устанавливать вертикальные границы только на вставленные ячейки, если границы выше и ниже позиции вставки одинаковы.

Я столкнулся с аналогичной (но повернутой) ситуацией с вставкой столбцов, но Copy / Paste слишком медленна для моей книги (десятки тысяч строк, много столбцов и сложное форматирование).

Я нашел три обходных пути, которые не требуют копирования форматирования из строки источника:

  1. Убедитесь, что вертикальные границы имеют одинаковый вес, цвет и рисунок выше и ниже позиции вставки, поэтому Excel будет воспроизводить их в новой строке. (Это «Мне больно, когда я это делаю», ответьте «Прекрати это делать!»).

  2. Используйте условное форматирование для установки границы (с формулой «= ИСТИНА»). Условное форматирование будет скопировано в новую строку, так что вы все равно получите границу. Охватывает:

    • Условные границы форматирования ограничены тонкотянутыми линиями.
    • Лучше всего подходит для листов, где границы относительно последовательны, поэтому вам не нужно создавать кучу условных правил форматирования.
  3. Установите границу на вставленную строку в VBA после вставки строки. Установка границы в диапазоне намного быстрее, чем копирование и вставка всего форматирования только для получения границы (предполагая, что вы знаете заранее, какова должна быть граница или может отбирать ее из строки выше, без потери производительности).

Interesting Posts

Таблица документов Google: как указать, какой столбец содержит наибольшее число в строке, второй по величине и т. Д.?

C # – Excel: Является ли объект ячейки COM-объектом?

Excel находит последний в строке, если не последовательные столбцы

Paste vs PasteSpecial

Чтение файлов Excel в C #

Поиск формулы для возврата результата действительного или недействительного, если две зависимые ячейки сравниваются с исходной ячейкой

Функция Excel UDF работает очень медленно при выборе всего столбца

Получить все комбинации

Java Apache POI – XSSFCell setFillBackgroundColor не имеет эффекта

excel удалить строки в некоторых случаях

множественные условия утверждения vba

Excel 2013 – Когда вводятся даты, они становятся формулами

пропорционально находить значения между двумя числами

Использование объекта оператора `With` в качестве параметра для вызова процедуры

как отправить группуSMS в php

Давайте будем гением компьютера.