Невозможно закрыть проекты-призраки в Excel vba

#excel #project #ghost-blog

#excel #проект #призрак-блог

Вопрос:

Я использую Excel 2003 для получения данных в реальном времени с фондового рынка (более 500 акций, по 12 точек данных каждая). Основное приложение (18,00 строк кода) также вычисляет тенденции и прогнозирует (пытается) указать лучшую сделку.

3 раза в день мне нужно загружать дополнительную информацию и экспортировать ее в базу данных (цена открытия, значения спреда и закрытия)

Я делаю это, открывая дополнительный файл Excel в том же экземпляре (открытие в отдельном экземпляре будет стоить мне дополнительно 250 долларов в месяц).

Проблема в том, что, хотя вторичные книги закрыты, «призрачные» проекты остаются в основном приложении. В результате я получаю ошибки «из памяти». Поскольку я использую один и тот же дополнительный параметр как для OpenPrice, так и для ClosingValues, я фактически получаю два «призрачных» проекта, оба с именами «DailyValues»

Я попытался закрыть дополнительную рабочую книгу изнутри:

Это рабочая тетрадь.Закрыть

и из вызывающего приложения:

 DoEvents
If IsWorkbookOpen(pstrFileName) = False Then
  Workbooks.Open (pstrFilePath amp; pstrFileName)
End If
Call ReadText("Saving Spread")
'Application.Run (pstrFileName amp; "!ExportSpreadAndClose")
Application.Run (pstrFileName amp; "!UpdateAndExport")
strExportTime = "Spread Exported at " amp; Format(Now(), "HH:mm")
lngSpreadCount = Workbooks(pstrFileName).Worksheets("SettingsSP").Range("SpreadCount").Value
If lngSpreadCount > 0 Then
 Call ReadText(Format(lngSpreadCount, "#,##0") amp; strExportTime)
 Debug.Print Format(lngSpreadCount, "#,##0") amp; strExportTime
Else
 Call ReadText("Error Exporting Spread")
 Debug.Print "Error Exporting Spread"
End If

If pbolCloseSpread = True Then
 If IsWorkbookOpen(pstrFileName) = True Then
    Workbooks(pstrFileName).Saved = True
    Workbooks(pstrFileName).Close
  End If
End If
  

Ни один из них не помогает.

Общих глобальных переменных нет, но я считываю возвращаемое значение из экспорта во вторичном приложении из основного.

Может ли он быть подключен к экспорту базы данных? Основное приложение экспортирует данные в базу данных (более 500 строк, более 12 столбцов) раз в минуту без каких-либо побочных эффектов.

В Excel 2010 я не получаю ошибок памяти, но «призрачные» проекты остаются. Excel 2010 почти в два раза медленнее, чем 2003 — на той же машине (i7, 6 ядер, 48 ГБ памяти, Server 2008 R2).

Пожалуйста, сообщите

PS Я работаю с Excel с 1992 года.

Комментарии:

1. В 2007 году Excel радикально изменил систему на XML. Если ваш код в 2010 году работает медленнее, чем в 2003 году, это связано с тем, что в него вносятся изменения «на лету». 18,00 строк (с дополнительным 0 или без него :-)), безусловно, пугают, но вы можете найти рекомендации о том, что искать проще, чем как избавиться от файлов-призраков.

2. Это проекты-призраки, а не готовые файлы. XML применяется к методу хранения, а не к псевдокоду. Фактический файл .xlsm на самом деле представляет собой набор архивированных XML, .emf и других файлов. При открытии размер файла увеличивается в 3-4 раза. нигде в документации Excel или в Интернете я не смог найти способ закрыть VBEProject. По-видимому, метод не существует. Excel 2010 просто имеет лучшее управление памятью (2 ГБ вместо 1 ГБ). Никакие адаптации не выполняются «на лету». Я открываю файл 2003 в 2010, Excel выделяет необходимые изменения, я их вношу и сохраняю 2010 .xlsm.