2015-02-17 2 views
0

У меня есть таблица в Excel, которая заполняется макросом Listobject из базы данных.Как сортировать строки в столбце A в ListObject VBA с параметром в столбце B

Я могу сортировать таблицу по следующему коду:

'Sort on projecttabel 
Dim lo As Excel.ListObject 

Set lo = Plan.ListObjects(1) 
With lo 
.Sort.SortFields.Clear 
    .Sort.SortFields.Add _ 
     Key:=Range("Table_appnlvd03_nkmgo_report_NKMGO_Report__KHNS_EFTTS_KPI32[klant]"), SortOn:=xlSortOnValues, Order:=xlAscending, _ 
     DataOption:=xlSortNormal 
    .Sort.SortFields.Add _ 
     Key:=Range("Table_appnlvd03_nkmgo_report_NKMGO_Report__KHNS_EFTTS_KPI32[Status]"), SortOn:=xlSortOnValues, Order:=xlAscending, _ 
     DataOption:=xlSortNormal 
    .Sort.SortFields.Add _ 
     Key:=Range("Table_appnlvd03_nkmgo_report_NKMGO_Report__KHNS_EFTTS_KPI32[RFO plandatum]"), SortOn:=xlSortOnValues, Order:=xlDescending, _ 
     DataOption:=xlSortNormal 
    .Sort.SortFields.Add _ 
     Key:=Range("Table_appnlvd03_nkmgo_report_NKMGO_Report__KHNS_EFTTS_KPI32[Uitvoeren montage plan start]"), SortOn:=xlSortOnValues, Order:=xlDescending, _ 
     DataOption:=xlSortNormal 

    With .Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
End With 

«Status» имеет несколько значений целых чисел от 1 до 100. Что я хотел бы сделать, это является сортировка строк на основе их статус И еще одна колонка. Проблема, с которой я сталкиваюсь, заключается в том, что «второй столбец» для сортировки отличается для каждого состояния.

Что я хотел бы создать - это таблица «Гант», в которой сортируются разные столбцы даты. Спуск по каждому статусу. Например (DD-MM-YYYY)

[Status] [date1]    [date2]   [date3] 
1   **10-01-2015**  12-02-2015  31-03-2015  
1   **09-01-2015**  14-02-2015  10-03-2015   
1   **08-01-2015**  06-02-2015  05-03-2015 
1   **07-01-2015**  18-02-2015  28-03-2015 
2   17-01-2015  **15-02-2015**  10-03-2015 
2   27-01-2015  **14-02-2015**  10-03-2015 
2   04-01-2015  **13-02-2015**  16-03-2015 
2   31-01-2015  **05-02-2015**  10-03-2015 
5   18-01-2015  12-02-2015  **30-03-2015** 
5   31-01-2015  18-02-2015  **27-03-2015** 
5   17-01-2015  04-02-2015  **26-03-2015** 
5   07-01-2015  27-02-2015  **08-03-2015** 
5   09-01-2015  24-02-2015  **03-03-2015** 

и т. Д. Возможно ли это?

+0

Если у вас уже есть объект ListObject как ссылочный объект, вам действительно не нужно ссылаться на диапазоны таким образом. Просто попробуйте это: с .lo.Sort .Fields.Add .ListColumns ("kanlt") Диапазон, xlSortOnValues, xlAscending, xlSortNormal.. 'ADD ДРУГИЕ СНП ПОЛЯ ЗДЕСЬ' .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Не End With – William

+0

Так как это не ответ на вопрос, я отправил его в комментариях, но это будет лучше читать, если \ n отображается в комментариях (или если есть способ добавить кодовый блок в комментарии) – William

ответ

0

Нужно добавить рабочее поле в таблице, назовем его «Sort.Key», а затем ввести эту формулу в этой области:

=CONCATENATE([@Status],CHAR(133),CHOOSE([@Status],[@date1],[@date2],,,[@date3])) 

Теперь сортировать таблицу, используя поле «Sort.Key»

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

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