VBA поддерживает программу в памяти - PullRequest
2 голосов
/ 27 июня 2011

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

Таким образом, в моих простых способах мои программы всегда имели следующую схему: 1. запустить программу, 2. подождать, пока программа запустится, 3. программа завершена и завершена.

То, что я сейчас делаю, - это создание таблицы из длинного списка транзакций (10 000 из). В таблице есть несколько полей со списком, чтобы пользователь мог выбрать фильтры. Прямо сейчас, каждый раз, когда пользователь меняет фильтр, весь журнал обрабатывается заново, что занимает полминуты или минуты.

Я бы предпочел, чтобы торговый журнал хранился в памяти, или как-то скрытно, но более доступным. Но не иметь программу "спиннинг" в фоновом режиме. Таким образом, пользователь может использовать Excel, не подозревая, что программа готова в фоновом режиме, если он захочет обновить таблицу позже или нет.

Это имеет смысл? Если это не может быть сделано в VBA, мне все равно будет любопытно, как это будет сделано в другой среде, скажем, на C #, если это возможно. Благодарю.

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Есть несколько вариантов

  1. Во-первых, правильно ли структурирован код?Например, действительно ли вам нужно перерабатывать все или перезапись может быть более эффективной?
  2. Если вы не можете избежать ресурсоемкого кода, уведомите пользователя с помощью индикатора выполнения или сообщения.Также рассмотрите использование DoEvents, которое освобождает операционную систему, чтобы Excel мог обрабатывать другие события.
  3. DoEvents медленный и грязный.Еще лучше посмотреть по этой ссылке DoEvents идет медленно !!!Вот более быстрые методы
  4. Перепишите свой код для асинхронной работы.Создайте класс, обработчик и обрабатывайте каждую транзакцию асинхронно.
  5. Вы можете написать некоторый VBScript / Javascript и запустить задачу для выполнения независимо от Excel / VBA.Например, есть пример Здесь
  6. Не используйте VBA:)

Редактировать: Как вы фильтруете?Если вы просматриваете тысячи элементов в тестировании массива по критериям, это может быть очень медленным.Excel Advanced Filter очень быстрый и может быстро обрабатывать сотни тысяч строк по нескольким критериям.

2 голосов
/ 27 июня 2011

Если частота обновлений в сделке с опционами достаточно низкая, вы можете отделить чтение и обработку сделок с опционами от процесса фильтрации: Шаг 1 - Обновить - читать журналы и обрабатывать их, сохраняя результаты в глобальных контейнерах (массивы, коллекции, словари, объекты ...) Шаг 2 - Пользовательские запросы - показать форму - пользователь выбирает фильтры - показать / сохранить результаты, извлеченные из глобальных контейнеров.

0 голосов
/ 27 июня 2011

При запуске макроса в Excel VBA пользователь больше не может использовать Excel, так как при запуске VBA «застревает» вся программа.

Вот несколько советов, чтобы найти решение вашей проблемы:

  • Поддерживайте работоспособность vba : при первом запуске комбобокса загружайте данные и затем отображайте результаты пользователю каждый раз, когда он запрашивает, но сохраняйте комбобокс загруженным, чтобы vba сохранял свой контекст и память
  • Загрузить данные в Excel Excel , даже скрытые, а затем использовать их, когда пользователь запрашивает некоторые данные
  • Дайте нам больше информации о том, что вы делаете, откуда вы загружаете данные, как вы можете их кэшировать, каков ваш текущий код, что вы пытались ... чтобы мы могли помочь ты больше

С уважением,

Макс

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