Страницы: 1
RSS
Автоматический запуск макроса при изменении значение в выбранном диапазоне
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range: Set rng = [D35:D52]
    If Not Intersect(rng, Target) Is Nothing Then
    Call Сортировка
        End If
End Sub
Private Sub Сортировка()
Application.ScreenUpdating = False
Application.EnableEvents = False
    Range("B10:C19").Select
    ActiveWorkbook.Worksheets("Лист2").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист2").sort.SortFields.Add Key:=Range("B10:B19"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Лист2").sort
        .SetRange Range("B10:C19")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

что нужно добавить в этот макрос, чтобы он был автоматическим, точнее тут уже добавлено, но при изменение указанных строк сортировка все равно не вызывается, если можно без примера, то было бы супер?
 
А когда (в каком случае) должен срабатывать автоматическая сортировка?
"Все гениальное просто, а все простое гениально!!!"
 
Непонятно. Допустим (ДОПУСТИМ!), что сортировка и отлов события идут для одного и того же листа. Отлавливаем событие изменения в диапазоне D35:D52
В сортировке  резвимся с диапазоном B10:C19. Это так и надо?
Кому решение нужно - тот пример и рисует.
 
Цитата
Nordheim написал:
А когда (в каком случае) должен срабатывать автоматическая сортировка?
когда происходит изменения в диапазоне [D35:D52]
Цитата
Пытливый написал:
В сортировке  резвимся с диапазоном B10:C19. Это так и надо?
да, изменили значения в диапазоне, и сортировка произошла в листе2, в даиапазоне B10:C19
Изменено: kosyak777 - 12.11.2018 15:00:06
 
Сортировка и отлов события идут для одного и того же листа?
Кому решение нужно - тот пример и рисует.
 
Цитата
Пытливый написал:
Сортировка и отлов события идут для одного и того же листа?
нет, отлов события в первом листе, а сортировка во 2
 
Цитата
Пытливый написал:
Сортировка и отлов события идут для одного и того же листа?
Судя по первой теме в которой был представлен файл с макросом, листы разные.
Цитата
kosyak777 написал:
когда происходит изменения в диапазоне [D35:D52]
а у Вас разве не так?
Код
    Dim rng As Range: Set rng = [D35:D52]
    If Not Intersect(rng, Target) Is Nothing Then

в этой части вроде диапазон указан верно, может у Вас
Код
Application.EnableEvents = False
попробуйте сделать
Код
Application.EnableEvents = True
и запустить снова, но без файла сложно сказать.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim,в общем вот файл, изменяем значение в диапазоне D35:D52, у нас меняются значения соответственно в диапазоне E35:E52, эти значения переносятся на лист2, где происходит сортировка(по логике она должна меняться автоматически при изменение значений в D35:D52, в принципе можно это сделать на одном листе, в диапазоне B58:C67.
 
1. Сортировка идет на АКТИВНОМ листе.
2. В процедуре Private Sub Сортировка() НЕТ инструкции о активации листа.
Кому решение нужно - тот пример и рисует.
 
Пытливый,так что нужно сделать ?
 
Дать теме название, по которому будет понятно, что хотите.
kosyak777, у Вас постоянные косяки в этом вопросе. Нужно называть так, чтобы понимали те, кто совершенно не знает Вашей задачи
 
Ничего не нужно вставлять. Нужно удалять.

Код
Private Sub Сортировка()
'Application.ScreenUpdating = False
'Application.EnableEvents = False

'    Range("B10:C19").Select   ЭТА СТРОКА ЛИШНЯЯ

    ActiveWorkbook.Worksheets("Лист2").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист2").sort.SortFields.Add Key:=Range("B10:B19"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Лист2").sort
        .SetRange Range("B10:C19")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'Application.ScreenUpdating = True
'Application.EnableEvents = True
End Sub

И смысла в отключении событий и обновления экрана тоже никакого.

PS Не заметил сразу, что косяк!
Изменено: RAN - 12.11.2018 15:52:01
 
Или я чего то не понимаю, возможно не внимательно прочитал. Изменяем значение в диапазоне D35:D52, меняется E35:E52 на новую дату, далее происходит сортировка на листе 2. Все работает
 
Цитата
vikttur написал:
kosyak777, у Вас постоянные косяки
Дык, ник обязывает: как лодку назовёшь, так ... ))
 
vikttur,я стараюсь, но без понятия как еще  можно обозвать, постараюсь исправиться)
Savva,  RAN,
странно, у меня просто значение меняется в листе 2, но не сортируется, может где то в настройках что отключено[/USER]
Изменено: kosyak777 - 12.11.2018 15:57:28
 
Запуск макроса... дальше - то, что Вам нужно. при изменении ячкейки, если на А1 упал окурок, если пора кушать... Ну, думайте же!
 
Цитата
Юрий М написал:
Дык, ник обязывает: как лодку назовёшь, так ... ))
а 777 - это счетчик?
По вопросам из тем форума, личку не читаю.
 
Вы изменили код примера из предыдущей вашей темы и не правильно.  
 
Макрос работает, если выделить код и нажать Run_sub, а автоматически так и не срабатывает
 
Сообщение №16. Вам предложено подумать
Я могу сделать макрос автоматичекским, если запущу его из другого макроса. Н Вам же не этого хочется?
 
vikttur, тема: Автоматический запуск макроса, если изменятся значение в выбранном диапазоне
 
так и не понял в чем суть, но сделал два пробела в начале кода и все заработало, черт голову сломит с вашими макросами)
всем большое спасибо!
 
Цитата
kosyak777 написал:
сделал два пробела в начале кода и все заработало
Прямо любопытно , что за пробелы волшебные такие, в Наших макросах.
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх