Страницы: 1
RSS
VBA макрос сортировки в умной таблице, Нужна помощь немного доработать уже написанный код
 
Добрый день!
Мне необходимо написать макрос, который отсортировывает умную таблицу по возрастанию каждый раз, когда в нее добавляются новые данные. Т.е. под умной таблицей пишу данные, нажимаю enter, эти данные автоматически становятся новой строчкой умной таблицы (это то, что и так по умолчанию excel делает) и затем – как раз то, что необходимо написать мне – обновленная таблица сортируется.  

Здесь на форуме в одной из тем я нашла код для подобной задачи, с той лишь разницей, что код написан для диапазона. И сколько не пытаюсь – у меня пока не получается переписать этот код так, чтобы он работал для умной таблицы. Ниже код, о котором идет речь:

Код
Private Sub Worksheet_Change(ByVal Target As Range)If Not Intersect(Target, Columns(2)) Is Nothing Then
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
    With Me.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub 

Прикрепила книгу Excel с наглядным примером, что мне необходимо сделать
Буду благодарна за помощь!

 
Тестируйте на Лист2.

Код добавлять в лист, на котором Ваша таблица. И нужно изменить имя таблицы (сейчас "Таблица4")
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.CountLarge > 1 Then Exit Sub
    
    Dim tb As ListObject
    For Each tb In Target.Parent.ListObjects
        If Target.Row = tb.Range.Row + tb.Range.Rows.Count - 1 Then
            tb.Sort.SortFields.Clear
            tb.Sort.SortFields.Add Key:=Intersect(tb.DataBodyRange, Target.EntireColumn), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With tb.Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End If
    Next
End Sub
 
kekoyit, Благодарю за помощь и отзывчивость!  
 
МатросНаЗебре, о таком идеальном коде в общем виде, чтобы он работал сразу для всех имеющихся таблиц на листе, я и мечтать не могла! Благодарю Вас за помощь! Дальнейшие свои макросы буду учиться писать, ориентируясь на уровень Вашего кода
 
Можно и так, конечно, а ещё можно почитать книгу
"Чистый код" Роберт Мартин.
Она, правда, не про VBA, а про написание кода вообще.
Страницы: 1
Наверх