2014-11-11 2 views
2

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

Основная часть моего кода рисует от рекомендации Дуга Гленси в this post, но она не работает должным образом (поскольку оригинальный плакат отмечен до того, как нить умерла). Макрос работает без ошибок, но фактически не сортирует данные.

Я думаю, что сломанная часть - это часть Key:=lo.ListColumns("Name of table column").Range. Я недостаточно хорошо разбираюсь в этом синтаксисе, чтобы устранить его.

Я ценю любые предложения или альтернативы! Кроме того, дайте мне знать, если мои требования неясны вообще.

Sub CustomSort() 
Dim lo As Excel.ListObject 
Dim ws As Excel.Worksheet 

Set ws = ActiveSheet 
For Each lo In ws.ListObjects 
    With lo.Sort 
     .SortFields.Add Key:=lo.ListColumns("Status").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
     .SortFields.Add Key:=lo.ListColumns("Inventory Number").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
     .Header = xlYes 
     .Apply 
    End With 
Next lo 
End Sub 
+0

После непродолжительного тестирования кажется, что он работает нормально - при условии, что фильтры в настоящее время не применяются. Вы можете добавить Cells.AutoFilter для автоматического удаления фильтров. Не могли бы вы рассказать об этом? – TomDillinger

ответ

2

Благодаря TomDillinger за то, что он предложил мне более внимательно изучить поведение макроса. Я понял, что макрос сортировался некоторое время, хотя и редко. Я просто добавил .SortFields.Clear перед линиями .SortFields.Add, который очищает любую существующую сортировку для нового старта, так сказать, для команд сортировки в макросе. Вот полностью функционирующий макрос:

Sub CustomSort() 
Dim lo As Excel.ListObject 
Dim ws As Excel.Worksheet 

Set ws = ActiveSheet 
For Each lo In ws.ListObjects 
    With lo.Sort 
     .SortFields.Clear 
     .SortFields.Add Key:=lo.ListColumns("Status").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
     .SortFields.Add Key:=lo.ListColumns("Inventory Number").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
     .Header = xlYes 
     .Apply 
    End With 
Next lo 
End Sub 
Смежные вопросы