#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.