Бесплатный профилировщик VB6 / VBA и лучшие практики Excel - PullRequest
5 голосов
/ 28 мая 2009

У нас есть много отчетов, которые создаются с помощью VBA и Excel. Лишь небольшой процент отчетов являются фактическими вычислениями - большая часть работы - это вызовы sql и форматирование / запись ячеек. Самый длинный из которых занимает несколько часов, большинство занимает около 20-30 минут каждый.

Код VBA / Excel подключается к DLL, которую используют настольные приложения VB6 - именно здесь выполняются все вызовы sql. Хотя я уверен, что здесь есть возможности для улучшения, меня беспокоит не это - настольные приложения довольно быстрые.

Две функции VBA используются в изобилии: они называются GetRange и SetupCell, и они почти всегда появляются вместе. Функция GetRange является оболочкой для объекта Excel.Range. Требуется лист и 4 значения для экстентов диапазона. Его основное назначение - выбрать ячейку для редактирования. Похоже, что у него мало шансов на это, но лучше ли это?

Его партнером является SetupCell. Для этого требуется объект Excel.Range, текст и дюжина параметров о ячейке (шрифт, границы и т. Д.). Большинство из этих параметров являются необязательными логическими значениями, но опять же, это кажется очень расточительным. Некоторые из них могут быть установлены посмертно, но некоторые зависят от значений, содержащихся в ячейке.

В этих функциях содержится довольно много кода, в основном, если операторы и работа не оценят мою публикацию.

Полагаю, у меня есть два вопроса: Есть ли лучший способ и что это такое и - есть ли бесплатный профилировщик, который я могу использовать, чтобы увидеть, если большая часть времени здесь или в длл?

Ответы [ 5 ]

6 голосов
/ 01 июня 2009

несколько часов смешно для отчета.

Если проблема в VBA, купите «Профессиональную разработку Excel» (Стивен Буллен, Роб Бови и др.): У этого есть бесплатный профилировщик VBA под названием PerfMon.

Если проблема в вычислении Excel, см. http://msdn.microsoft.com/en-us/library/aa730921.aspx?ppud=4

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

3 голосов
/ 28 мая 2009

Это не рекомендация профилировщика, но это предложение по ускорению макросов Excel, которые тратят свое время на обновление экрана. Я получил отличные результаты, отключив обновление экрана во время работы макроса: установите Application.ScreenUpdating = False, а также используйте ряд других аналогичных настроек . Обязательно включите их снова после завершения макроса: P

3 голосов
/ 28 мая 2009

Задумывались ли вы об использовании актуального решения для отчетности? Какой у тебя бэкэнд дБ? Если вы используете MSSQL 2000 или выше, есть довольно приличное решение для отчетности, которое вы можете использовать бесплатно. Службы отчетов SQL Server .

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

В качестве альтернативы, если вы знаете форматирование заранее и оно довольно статично, вы можете предварительно отформатировать листы, чтобы сократить часть работы.

Я это тоже добавлю. Большинство решений для создания отчетов допускают условное форматирование и тому подобное, но поскольку они рассчитаны на работу, такая производительность будет намного выше, чем в Excel.

1 голос
/ 28 мая 2009

Это не бесплатно, но вы можете профиль с этим. Я подозреваю, что демо будет соответствовать вашим потребностям: http://www.aivosto.com/vbwatch.html

0 голосов
/ 03 декабря 2009

Звучит так, будто код VBA (или код VB, который пишет на листах) делает это построчно, это может занять много лет и плохой дизайн. Написать в Excel как вариант за один раз. Отформатируйте лист после того, как все данные импортированы. Спасибо Росс

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