Макрос VBA не сортирует все значения - PullRequest
0 голосов
/ 03 октября 2019

Я сортирую по алфавиту по секторам. Макрос выполняется, но часто оставляет 1 значение несортированным. Например, он дает мне следующий вывод: вторая строка данных неправильно отсортирована.

| Security                        | Sector                   | Region   | Country   |
|---------------------------------|--------------------------|----------|-----------|
| Carlsberg   Class B             |  Consumer Staples        |  Europe  |  Denmark  |
| Broedrene   A & O Johansen Pref |  Industrials ERROR HERE  |  Europe  |  Denmark  |
| Jyske Bank                      |  Financials              |  Europe  |  Denmark  |
| Tryg                            |  Financials              |  Europe  |  Denmark  |
| Ringkjobing Landbobank          |  Financials              |  Europe  |  Denmark  |
| Demant                          |  Health Care             |  Europe  |  Denmark  |
| Novo Nordisk Class B            |  Health Care             |  Europe  |  Denmark  |
| Gn Store Nord                   |  Health Care             |  Europe  |  Denmark  |
| Nkt                             |  Industrials             |  Europe  |  Denmark  |
| Iss                             |  Industrials             |  Europe  |  Denmark  |
| Flsmidth And Co.                |  Industrials             |  Europe  |  Denmark  |
| A P Moller Maersk   Class B     |  Industrials             |  Europe  |  Denmark  |
| Vestas Wind Systems             |  Industrials             |  Europe  |  Denmark  |
| Dsv   Panalpina                 |  Industrials             |  Europe  |  Denmark  |
| Columbus                        |  Information Technology  |  Europe  |  Denmark  |

Код, который я использую:

Dim tbl as ListObject
Set tbl = Sheets(1).ListObjects("Table1")
With tbl.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("Table1[Sector]"), SortOn:=xlSortOnValues, 
         Order:=xlAscending
        .Header = xlYes
        .Apply
End With

Данные в таблице динамически вставляются изSQL-запрос, прежде чем он будет отсортирован. Я оставил этот код вне. Когда я использую секундомер и вручную прохожу каждую строку, она сортируется правильно, что заставляет меня думать, что это как-то связано с таймером. Я пробовал Application.Wait (Now + TimeValue("0:00:02")) и DoEvents, но ни одна из них не решила проблему.

1 Ответ

1 голос
/ 03 октября 2019

(Обновлено с комментария, чтобы вопрос можно было пометить как решенный!)

Ваш код пытается отсортировать таблицу до того, как он определит, какие новые данные находятся втаблица!

Добавление строки Sheets(1).Calculate скажет Excel потратить некоторое время на то, чтобы выяснить, что изменилось на листе, и таблица данных обновится сама. Затем вы можете отсортировать обновленные данные.

Это не всегда проблема - не пересчитывая всю книгу после каждой строки кода, она выполняется на лот быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...