Страницы: 1
RSS
Упрощение макроса добавления строк
 
У меня есть формула добавления строк макросом, всё прекрасно работает. Но есть 1 проблема: работа макроса слишком долгая, ну т.е. добавление происходит медленно, видимо у меня слишком много лишних телодвижений. Учитывая то, что у меня может быть добавлено 1000 строк, это пугает.
Поэтому хочу попросить мастеров excel проверить мой макрос, и спросить можно ли его облегчить? Чтобы работа макроса не занимала столько времени.
Реальный файл выложить не смог, так как он весит более 200 кб, поэтому скинул более упрощенный вариант.
Вот сам код добавления строки:
Код
Sub insert_row()
ActiveSheet.Unprotect Password:="2211"
    Dim last_row As Long, a$, b$, c$, d$, e$
    last_row = Range("B:B").Find("*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row
    a = Cells(last_row, 1).FormulaR1C1
    b = Cells(last_row, 13).FormulaR1C1
    c = Cells(last_row, 14).FormulaR1C1
    d = Cells(last_row, 15).FormulaR1C1
    e = Cells(last_row, 16).FormulaR1C1
    Rows(last_row).Copy
    Rows(last_row).Insert Shift:=xlDown
    Cells(last_row, 1).Resize(2).Formula = a
    Cells(last_row, 13).Resize(2).Formula = b
    Cells(last_row, 14).Resize(2).Formula = c
    Cells(last_row, 15).Resize(2).Formula = d
    Cells(last_row, 16).Resize(2).Formula = e
    Application.CutCopyMode = 0
    Cells(last_row + 1, 2).Select
ActiveSheet.Protect Password:="2211", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowSorting:=True, UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True
End Sub
 
Простите, файл завтра скину.
 
Может быть и без файла есть решение, в некоторых случаях (при добавлении, удалении строк) нужно отключать обновление монитора. Если на листе есть формулы, то нужно еще отключать пересчет формул на время работы макроса:
Код
Sub insert_row()
ActiveSheet.Unprotect Password:="2211"
    Dim last_row As Long, a$, b$, c$, d$, e$
    'отключение обновления монитора
    Application.ScreenUpdating = False
    'отключение пересчета формул.
    Application.Calculation = xlCalculationManual
    last_row = Range("B:B").Find("*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row
    a = Cells(last_row, 1).FormulaR1C1
    b = Cells(last_row, 13).FormulaR1C1
    c = Cells(last_row, 14).FormulaR1C1
    d = Cells(last_row, 15).FormulaR1C1
    e = Cells(last_row, 16).FormulaR1C1
    Rows(last_row).Copy
    Rows(last_row).Insert Shift:=xlDown
    Cells(last_row, 1).Resize(2).Formula = a
    Cells(last_row, 13).Resize(2).Formula = b
    Cells(last_row, 14).Resize(2).Formula = c
    Cells(last_row, 15).Resize(2).Formula = d
    Cells(last_row, 16).Resize(2).Formula = e
    Application.CutCopyMode = 0
    Cells(last_row + 1, 2).Select
ActiveSheet.Protect Password:="2211", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowSorting:=True, UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True
    'включение обновления монитора
    Application.ScreenUpdating = True
    'включение автоматического пересчета формул
    Application.Calculation = xlCalculationAutomatic
End Sub
 
используйте "умные таблицы" и не придется изобретать велосипед.
 
Karataev, спасибо есть не большое улучшение. Основное торможение оказ-ся происходит не из за макроса, а из за другого листа который формирует свод данных из добавленных строк. После удаления этого листа, добавление строк начало происходит моментально.
Dima S, я бы рад пользоваться умной таблицей, но там есть 2 минуса, это нету кнопок, обычные люди не поймут как добавить строку, что надо на нижней строчке че нить написать. И проблема с защитой ячеек, с умной таблицей такое кажись невозможно.
 
то есть вы хотите сказать что людям проще объяснить, что надо нажать кнопку, чем просто продолжить писать внизу таблицы?)
мда..
Цитата
Morten написал:
с умной таблицей такое кажись невозможно
а вы хоть пробовали?)
 
Dima S, у нас заполняет столько народу, что защита листа обязательна, вы не поверите как они умудряются убить форму. Умная таблица защиту не снимет и не восстановит, я пробовал.
Страницы: 1
Наверх