Скопируйте данные набора записей на несколько листов, чтобы избежать проблемы ограничения максимального количества строк в Excel VBA - PullRequest
3 голосов
/ 19 апреля 2010

Я разрабатываю приложение для создания отчетов в Excel / vba 2003. Код VBA отправляет поисковый запрос в базу данных и получает данные через набор записей. Затем он будет скопирован в один из листов Excel. Полученные данные выглядят так, как показано ниже.

ProductID--------|---DateProcessed---------|----State-----  

1................|.. 1/1/2010..............|.....Picked Up  
1................|.. 1/1/2010..............|.....Forward To Approver   
1................|.. 1/2/2010..............|.....Approver Picked Up             
1................|.. 1/3/2010..............|.....Approval Completed     
2................|.. 1/1/2010..............|.....Picked Up  
3................|.. 1/2/2010..............|.....Picked Up  
3................|.. 1/2/2010..............|.....Forward To Approver   

Проблема в том, что данные, извлекаемые из поискового запроса, настолько огромны, что превышают предел строк Excel (65536 строк в Excel 2003). Поэтому я хочу разделить эти данные на две таблицы Excel. При разделении данных я хочу убедиться, что данные для одного и того же продукта должны оставаться на одном листе.

Например, если последняя запись в указанном выше наборе результатов - 65537-я, я также хочу переместить все записи для продукта 3 на новый лист.

Таким образом, sheet1 будет содержать записи для идентификатора продукта 1 и 2 с общим количеством записей = 65534. Лист 2 будет содержать записи для идентификатора продукта 3 - с общим количеством записей = 2.

Как мне добиться этого в VBA?

Если это невозможно, есть ли альтернативное решение?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 19 апреля 2010

Поскольку вы не предоставили никакого кода для доступа к вашей базе данных, я могу дать вам только общую схему.

Сначала отправьте запрос в базу данных следующим образом:

"SELECT COUNT(*),ProductID FROM YourTable GROUP BY ProductID order by ProductID"

Исходя из результатов, вы можете легко рассчитать интервалы ProductID с менее чем 65536 записями, просто добавьте счет до достижения этого предела.

Наконец, вы разбиваете свой исходный запрос на множество запросов (по одному на лист данных) и добавляете условие WHERE, например:

... WHERE ProductID IS BETWEEN " + LowerIDRange + " AND " + HigherIDRange

LowerIdRange и HigherIDRange должны быть пределами интервала, рассчитанными по первому запросу.

0 голосов
/ 22 апреля 2010

Перейдите в Excel 2007 или 2010 с ограничением в 250 000 строк. Или лучше: посмотрите, можете ли вы предварительно агрегировать свои данные.
Мое предпочтительное предложение здесь было бы сделать сводную таблицу, обобщающую ваши данные. Затем, дважды щелкнув ячейку, пользователь может получить соответствующее подмножество подробных записей на новом листе.

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