Достижение пользовательской сортировки при выборе с помощью макроса

#excel #vba

#превосходить #vba

Вопрос:

 Range("A1").Select  Range(Selection, Selection.End(xlToRight)).Select  Range(Selection, Selection.End(xlDown)).Select  Application.CutCopyMode = False   ' Sorting  Application.DeleteCustomList ListNum:=5  Application.AddCustomList ListArray:=Array("FGI Not Shipping Current Quarter" _  , "PENDING 1st TOTE FROM MFG", "PENDING LAST TOTE FROM MFG", "PENDING CRATING", _  "PENDING DN", "PENDING PICKUP REQUEST", "PENDING FF")  ActiveWorkbook.Worksheets("Priority").Sort.SortFields.Clear  ActiveWorkbook.Worksheets("Priority").Sort.SortFields.Add2 Key:=Range( _  "N2:N16"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _  "FGI Not Shipping Current Quarter,PENDING 1st TOTE FROM MFG,PENDING LAST TOTE FROM MFG,PENDING CRATING,PENDING DN,PENDING PICKUP REQUEST,PENDING FF" _  , DataOption:=xlSortNormal  With ActiveWorkbook.Worksheets("Priority").Sort  .SetRange Range("A1:N16")  .Header = xlYes  .MatchCase = False  .Orientation = xlTopToBottom  .SortMethod = xlPinYin  .Apply  

Как я могу написать тот же код для достижения сортировки при выборе вместо явного упоминания диапазона от A1:N16?

Скриншотданные

Комментарии:

1. .SetRange Range("A1").CurrrentRegion (до тех пор, пока ваш список ограничен пустой строкой/столбцом)

2. @TimWilliams, Мой список не ограничен. Я попробовал это, и это дает ошибку.

3. Если он не ограничен, то как вы хотите определить, каким должен быть диапазон?

4. Полные данные на листе. Если это невозможно, то как я могу связать свои данные с помощью таблицы? Я также добавил скриншот своих данных. Спасибо вам за помощь.

5. В вашем списке есть пустая строка ниже и пустой столбец справа от нее — это то, что я имел в виду под «ограниченным», поэтому CurrentRegion должно сработать. Если это приводит к ошибке, в чем заключается ошибка и в какой строке?

Ответ №1:

 Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Application.DeleteCustomList ListNum:=5 Application.AddCustomList ListArray:=Array("FGI Not Shipping Current Quarter" _  , "PENDING 1st TOTE FROM MFG", "PENDING LAST TOTE FROM MFG", "PENDING CRATING", _  "PENDING DN", "PENDING PICKUP REQUEST", "PENDING FF") ActiveWorkbook.Worksheets("Priority").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Priority").Sort.SortFields.Add2 Key:=Range( _  "N:N"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _  "FGI Not Shipping Current Quarter,PENDING 1st TOTE FROM MFG,PENDING LAST TOTE FROM MFG,PENDING CRATING,PENDING DN,PENDING PICKUP REQUEST,PENDING FF" _  , DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Priority").Sort  .SetRange Range("A1").CurrentRange  .Header = xlYes  .MatchCase = False  .Orientation = xlTopToBottom  .SortMethod = xlPinYin  .Apply End With