Валидируйте \ исправить мое понимание вопроса:
Все начинается с книги с одного листа Sheet1
, который содержит в колонке B
список кодов ISIN
Процедура get_formula
используется для :
a. Добавить новый лист для каждого ISN в Sheet1
b. Введите в A1
формулу, указывающую на резидент UDF в AddIn. Формула извлекается из отдельной рабочей книги шаблонов.
Перед запуском процедуры get_formula
надстройка деактивируется
Что касается этого заявления:
Однако, если я войти в базу данных макрос не работает. Я не уверен, это потому, что оригинальная книга открывается превосходным на каком-то уровне за небольшой промежуток времени (так что извлечение данных начинается с двух книг), или проблема связана с Application.Wait. Я предполагаю, что Application.Wait не только приостанавливает макрос, но также предотвращает получение формулы для данных. Можно ли приостановить макрос, но не лист excel?
В этом отношении Application.Wait Method (Excel) говорит:
Метод Wait приостанавливает все операции Microsoft Excel и может предотвратить вас от выполнения других операций на вашем компьютере, в то время как Wait в эффект. Однако фоновые процессы, такие как печать и , пересчитываются.
Поскольку эта формула фактически UDF, вполне возможно, что она не работает из-за ожидания, однако я не могу проверить, что причиной этого является не только UDF с расчетом, но и запустить S подключение к базе данных.
Кроме того, существует несоответствие между формулой в пост:
=TR('Sheet 1'!C1;'Sheet 1'!$F$1:$F$5;"Frq=D SDate=#1 EDate=#2 Curn=EUR CH=Fd";$B$1;'Sheet 1'!$D$1;'Sheet 1'!$E$1)
И формулы в матричной книге:
=TR(Sheet1!B1,"Tr.TPESTValue;TR.TPEstValue.brokername; TR.TPEstValue.date; TR.TPEstValue.analystname;TR.TPEstValue.analystcode","Curn=EUR SDate=20101106 EDate=20150701 CH=Fd",$B$1)
Оп показал, что формула из шаблона книги является один для использования.
Это решение содержит формулу, которая будет применяться как постоянная, поэтому нет необходимости открывать книгу шаблонов, поэтому нет необходимости ждать.
Это предполагает, что лист держит список кодов ISIN называется ISINs
(изменено, если требуется)
Он называет новые листы с соответствующим ISIN для легкого identitfication и навигации.
У этого есть возможность установить расчет в ручную, прежде чем обновлять книгу, вернув ее в исходные настройки пользователя в конце. Предложите запустить оба способа проверки \ проверки скорости.
Sub ISINs_Set_Published()
'All lines starting with ":" have the purpose of measuring tasks time and printing it in the immediate window
'They should be commented or deleted after the time assessment is completed
: Dim dTmeIni As Date
: Dim dTmeLap As Date
: Dim dTmeEnd As Date
Const kISINs As String = "ISINs"
Const kFml As String = "=TR(kCll," & _
"'Tr.TPESTValue;TR.TPEstValue.brokername; TR.TPEstValue.date; TR.TPEstValue.analystname;TR.TPEstValue.analystcode'," & _
"'Curn=EUR SDate=20101106 EDate=20150701 CH=Fd',$B$1)"
Dim WshSrc As Worksheet, WshTrg As Worksheet
Dim rSrc As Range, rCll As Range
Dim sFml As String
Dim tCalculation As XlCalculation
: SendKeys "^g^a{DEL}": Stop
: dTmeIni = Now: dTmeLap = dTmeIni: dTmeEnd = dTmeIni
: Debug.Print vbLf; dTmeEnd, Format(dTmeEnd - dTmeLap, "hh:mm:ss"), "Process starts"
Rem Application Settings
'Change Excel settings to improve speed
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
tCalculation = Application.Calculation 'To save user setting
Application.Calculation = xlCalculationManual 'Set calculation to manual so formulas will not get calculated till end of process
Rem Set Range with ISINs
With ThisWorkbook.Worksheets(kISINs).Columns(2)
Set rSrc = .Cells(2).Resize(-1 + .Cells(.Cells.Count).End(xlUp).Row)
End With
: dTmeEnd = Now
: Debug.Print vbLf; dTmeEnd, Format(dTmeEnd - dTmeLap, "hh:mm:ss"), , "Loop starts"
: dTmeLap = dTmeEnd
Rem Add ISINs Worksheets
For Each rCll In rSrc.Cells
: dTmeEnd = Now
: Debug.Print vbLf; dTmeEnd, Format(dTmeEnd - dTmeLap, "hh:mm:ss"), , , "ISIN: "; rCll.Value2
: dTmeLap = dTmeEnd
Rem Refresh Formula
With WorksheetFunction
sFml = .Substitute(kFml, Chr(39), Chr(34))
sFml = .Substitute(sFml, "kCll", Chr(39) & rCll.Worksheet.Name & Chr(39) & Chr(33) & rCll.Address)
End With
Rem Add Worksheet
With ThisWorkbook
On Error Resume Next
.Sheets(rCll.Value2).Delete 'Deletes ISIN sheet if present
On Error GoTo 0
Set WshTrg = .Sheets.Add(After:=.Sheets(.Sheets.Count))
End With
Rem Name Worksheet & Set Formula
With WshTrg
.Name = rCll.Value2
: dTmeEnd = Now
: Debug.Print dTmeEnd, Format(dTmeEnd - dTmeLap, "hh:mm:ss"), , , "Set Formula starts"
: dTmeLap = dTmeEnd
.Cells(1).Formula = sFml
: dTmeEnd = Now
: Debug.Print dTmeEnd, Format(dTmeEnd - dTmeLap, "hh:mm:ss"), , , "Set Formula ends"
: dTmeLap = dTmeEnd
End With: Next
: dTmeEnd = Now
: Debug.Print vbLf; dTmeEnd, Format(dTmeEnd - dTmeLap, "hh:mm:ss"), , "Loop ends"
: dTmeLap = dTmeEnd
Rem Application Settings
Application.Goto rSrc.Worksheet.Cells(1), 1
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.Calculation = tCalculation
: dTmeEnd = Now
: Debug.Print vbLf; dTmeEnd, Format(dTmeEnd - dTmeLap, "hh:mm:ss"), , "Application Calculate starts"
: dTmeLap = dTmeEnd
Application.Calculate
: dTmeEnd = Now
: Debug.Print dTmeEnd, Format(dTmeEnd - dTmeLap, "hh:mm:ss"), , "Application Calculate ends"
: Debug.Print vbLf; dTmeEnd, Format(dTmeEnd - dTmeIni, "hh:mm:ss"), "Procedure ends"
End Sub
Как упоминалось ранее, я не могу проверить результаты формул, поскольку они указывают на ваш надстройке, но если формулы в книге представленные работают, то они должны также, как они точно так же, как и в образце.
Возможно, вы можете рассчитать Calculate как строку над application.wait, чтобы обеспечить полное обновление данных Excel до ожидания? –
Спасибо за ваше предложение, я попробую его и сообщите, погода его работает. – In777
Являются ли эти формулы фиксированными или формулы продолжают меняться. Если они исправлены, я предлагаю иметь формулы в процедуре (то есть макрос) и применять их по мере необходимости (нет необходимости сохранять их из файла шаблона, в чем смысл получения чего-то, что он будет всегда одинаковым Даже если формулы меняются, вы можете иметь процедуру для чтения формул из файла «шаблон», как переписать их в процедуру по мере их обновления ... – EEM