Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Один макрос тормозит другой - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Один макрос тормозит другой
karmen185 Дата: Вторник, 20.11.2018, 19:07 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте. Макрос, который удаляет строки , очень медленно работает из-за второго макроса обработки события Private Sub Worksheet_Change(ByVal Target As Range). Подскажите, можно ли это как-то исправить. Спасибо.
К сообщению приложен файл: Del.Row.xls (42.5 Kb)
 
Ответить
СообщениеЗдравствуйте. Макрос, который удаляет строки , очень медленно работает из-за второго макроса обработки события Private Sub Worksheet_Change(ByVal Target As Range). Подскажите, можно ли это как-то исправить. Спасибо.

Автор - karmen185
Дата добавления - 20.11.2018 в 19:07
RAN Дата: Вторник, 20.11.2018, 19:14 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
к отключению\включению обновления экрана в "Sub Delete_Rows", добавьте отключение\включение обработки событий
[vba]
Код
Application.EnableEvents =
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщениек отключению\включению обновления экрана в "Sub Delete_Rows", добавьте отключение\включение обработки событий
[vba]
Код
Application.EnableEvents =
[/vba]

Автор - RAN
Дата добавления - 20.11.2018 в 19:14
karmen185 Дата: Вторник, 20.11.2018, 19:34 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN, большое спасибо, совсем забыла про это отключение. :)
 
Ответить
СообщениеRAN, большое спасибо, совсем забыла про это отключение. :)

Автор - karmen185
Дата добавления - 20.11.2018 в 19:34
_Boroda_ Дата: Вторник, 20.11.2018, 19:41 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
И простановку даты я бы написал немного иначе
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d0 As Range, d As Range
    Application.ScreenUpdating = 0 'обновление экрана
    Application.Calculation = 3 'автопересчет формул
    Application.EnableEvents = 0 'события Excel
    Set d0 = Intersect(Target, Range("C3:C7")) 'пересечение измененных ячеек и диапазона. ОДИН раз
    If Not d0 Is Nothing Then 'если оно есть
        For Each d In d0 'пробегаемся по егойным ячейкам
            With d 'для каждой из них
                If .Value <> "" Then 'если она не пустая (нужно ли - не знаю)
                    .Offset(0, 1) = Date 'в соседнюю справа ставим дату
                End If
            End With
        Next d
        Columns(4).EntireColumn.AutoFit 'изменяем ширину столбца. ОДИН раз
    End If
    Application.EnableEvents = 1
    Application.Calculation = 1
    Application.ScreenUpdating = 1
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИ простановку даты я бы написал немного иначе
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d0 As Range, d As Range
    Application.ScreenUpdating = 0 'обновление экрана
    Application.Calculation = 3 'автопересчет формул
    Application.EnableEvents = 0 'события Excel
    Set d0 = Intersect(Target, Range("C3:C7")) 'пересечение измененных ячеек и диапазона. ОДИН раз
    If Not d0 Is Nothing Then 'если оно есть
        For Each d In d0 'пробегаемся по егойным ячейкам
            With d 'для каждой из них
                If .Value <> "" Then 'если она не пустая (нужно ли - не знаю)
                    .Offset(0, 1) = Date 'в соседнюю справа ставим дату
                End If
            End With
        Next d
        Columns(4).EntireColumn.AutoFit 'изменяем ширину столбца. ОДИН раз
    End If
    Application.EnableEvents = 1
    Application.Calculation = 1
    Application.ScreenUpdating = 1
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 20.11.2018 в 19:41
karmen185 Дата: Вторник, 20.11.2018, 21:58 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, большое спасибо за подробный комментарий к макросу, возьму себе в загашник. :)
 
Ответить
Сообщение_Boroda_, большое спасибо за подробный комментарий к макросу, возьму себе в загашник. :)

Автор - karmen185
Дата добавления - 20.11.2018 в 21:58
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!