2017-02-07 5 views
1

Я пытаюсь написать некоторый VBA, который позволяет кнопке добавить пустую строку, поддерживая тот же формат, чуть выше строки, в которой находится формула SUM.VBA EXCEL, чтобы добавить пустую строку над определенной строкой [OPEN]

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

Мой код до сих пор:

Sub InsertRev() 
    Dim c As Range 
    Set Rng = ActiveSheet.Range("d1:d5000") 
    For dblCounter = Rng.Cells.Count To 1 Step -1 
     Set c = Rng(dblCounter) 
     If c.Value Like "*TOTAL*" Then 
     c.EntireRow.Insert 
    End If 
    Next dblCounter 
End Sub 

Любая помощь будет принята с благодарностью.

+1

Фактически, он должен автоматически наследовать формат из строки выше, вы ее проверили? –

+0

Нет, это не так, на самом деле это делается для ячеек формата, но не для макета. то есть границей некоторых ячеек. – Frons79

ответ

2

Вы можете указать аргументы для Insert метода:

Sub InsertRev() 
    Dim c As Range 
    Set Rng = ActiveSheet.Range("d1:d5000") 
    For dblCounter = Rng.Cells.Count To 1 Step -1 
     Set c = Rng(dblCounter) 
     If c.Value Like "*TOTAL*" Then 
      c.EntireRow.Insert xlShiftDown, xlFormatFromLeftOrAbove 
     End If 
    Next dblCounter 
End Sub 
+0

Я пробовал этот метод раньше, но он не поддерживает границы указанных ячеек. И я не понимаю, почему ... – Frons79

+0

@Frons: Действительно, это странно, потому что это должно ... – R3uK

1

Вы можете не просто скопировать и pastespecial вновь вставленной строки данных, скопированный из заголовка ...

TheInsertedRange.PasteSpecial Paste:=xlPasteFormats 

Что-то вроде :

Sub InsertRev() 
    Dim c As Range 
    Dim Ptr As Range 
    Set Rng = ActiveSheet.Range("d1:d5000") 
    For dblCounter = Rng.Cells.Count To 1 Step -1 
     Set c = Rng(dblCounter) 
     If c.Value Like "*TOTAL*" Then 
      Set Ptr = c 
      Ptr.EntireRow.Insert 
      c.Copy 
      Ptr.Offset(-1).PasteSpecial Paste:=xlPasteFormats 
     End If 
    Next dblCounter 
End Sub 

что-то в этом роде ...

+0

Я пробовал этот код, но, к сожалению, он не позволяет вновь сгенерированной строке наследовать границы ячеек предыдущего (старый) ряд. – Frons79

+0

Здесь нет никакого бездействия. Вы просто копируете форматы данных из других данных. Работает на меня. Кстати, если вы копируете 1 ячейку, она будет использовать только форматирование 1 ячейки. Если вы скопируете, скажите, что 3 ячейки используют что-то вроде: c.Resize (, 4). Копия скопирует 4 ячейки в новый вставленный диапазон .. и т. Д. – PaulG

+0

должен сказать, если вы скопируете say 4 ячейки – PaulG

 Смежные вопросы

  • Нет связанных вопросов^_^