2016-08-31 2 views
0

После запуска функции VBA в моей таблице я хотел бы автоматически сортировать данные, поэтому пользователю этого не нужно. Параметры сортировки Я пытаюсь выполнить следующие:Сортировка по текстовому значению в VBA

enter image description here

И мой код VBA в настоящее время:

Columns("A:AA").Sort key1:=Range("C1:C1"), order1:=xlAscending, key2:=Range("G1:G1"), order2:=xlAscending, key3:=Range("A1:A1"), order3:=xlAscending, Header:=xlYes 

Как вы можете видеть, колонка А сортирует правильно, хотя с другой 2 не будет сортироваться на основе критериев Fail, Dismissed, Passed и Critical, High, Medium, Low

Является ли это тем, что я пытаюсь сделать возможным? Кто-нибудь знает способ указать эти ордера сортировки?

+1

см. Http://stackoverflow.com/questions/36576540/sorting-using-a-custom-order-in-excel-gives-error-1004 –

+2

Вы использовали Macro Recorder, чтобы узнать, какой код сгенерирован, если вы делаете это вручную? – YowE3K

+0

Yea Scott, вопрос, который вы связали с ответами на мой вопрос в его вопросе: P (хотя я не думаю, что это дубликат) –

ответ

2

Использование записи макросов привел меня к следующему коду:

With ActiveSheet 
    .Sort.SortFields.Clear 
    .Sort.SortFields.Add Key:=.Range("C:C"), _ 
         SortOn:=xlSortOnValues, _ 
         Order:=xlAscending, _ 
         CustomOrder:="Fail,Dismissed,Passed", _ 
         DataOption:=xlSortNormal 
    .Sort.SortFields.Add Key:=.Range("G:G"), _ 
         SortOn:=xlSortOnValues, _ 
         Order:=xlAscending, _ 
         CustomOrder:="Critical,High,Medium,Low", _ 
         DataOption:=xlSortNormal 
    .Sort.SortFields.Add Key:=.Range("A:A"), _ 
         SortOn:=xlSortOnValues, _ 
         Order:=xlAscending, _ 
         DataOption:=xlSortNormal 
    .Sort.SetRange .Range("A:AA") 
    .Sort.Header = xlYes 
    .Sort.MatchCase = False 
    .Sort.Orientation = xlTopToBottom 
    .Sort.SortMethod = xlPinYin 
    .Sort.Apply 
End With 

Надеется, что должно делать то, что вы хотите.

Смежные вопросы