Excel BBG формулы не обновляются - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь написать базовый сценарий, чтобы открыть другой файл, обновить данные в этом файле, сохранить этот обновленный файл как значения (не формулы), а затем закрыть исходный открытый файл, содержащий формулы, без сохранения.Моя проблема в том, что файл на самом деле не извлекает запрошенные формулы до тех пор, пока макрос не завершится и «обновленный» файл не сохранится.Другими словами, формулы начинают обновляться, по-видимому, никогда не заканчивают обновление, а затем копируют / вставляют поверх себя строку «# N / A Requesting Data ...» вместо фактических данных.Я видел несколько симларских вопросов по этому поводу, но я не видел ни одного, который бы определял, почему проблема существует в первую очередь.Я попытался запустить обновление и сохранение в разных подпрограммах и попробовал несколько разных способов ожидания завершения формул, но безрезультатно.Например:

'ATTEMPT 1
'Application.Calculate
'If Not Application.CalculationState = xlDone Then
'   DoEvents
'End If

'ATTEMPT 2
'Do: DoEvents: Loop While Application.CalculationState = xlCalculating

'ATTEMPT 3
'Do Until ActiveSheet.CalculationState = xlDone
'   DoEvents
'Loop

Вот код, который запускается после открытия исходного файла:

Sub Auto_Open()

Call Refresh

'COPY PASTE VALUES
ActiveSheet.Cells.Copy

'COPY UPDATED SHEET TO NEW BOOK & SAVE AS .XLS
Workbooks.Add
With ActiveSheet
.Cells.PasteSpecial xlValues
.Cells.PasteSpecial xlFormats
End With
Application.CutCopyMode = False
ActiveWorkbook.SaveAs (NewBook & Format(Now(), "DD-MMM-YYYY hh mm AMPM") & ".xls")


End Sub

Вот подпрограмма, которая фактически обновляет данные:

Sub Refresh()

Application.Calculation = xlCalculationManual 'УБЕДИТЕСЬ, ЧТО ЭТО ТОЛЬКО ИЗБИРАЕТ ДАННЫЕ, КОГДА ВЫ СКАЗИТЕ ЭТО *

Dim wkbook As Workbook
Dim OpenedBook As String
OpenedBook = "G:\Folder Name\Sub Folder\File Opened in Folder.xlsx" 'FULL PATH OF WORKBOOK TO BE OPENED
NewBook = "G:\Folder Name\Sub Folder\File Saved in Folder\" 'BASE NAME OF THE SAVED WORKBOOK

'OPEN THE DESIRED WORKBOOK
Set wkbook = Workbooks.Open(OpenedBook)
wkbook.Activate

'REFRESH ALL BBG FORMULAE
Application.Run "RefreshAllWorkbooks"
Application.Run "RefreshAllStaticData"
Application.Wait (Now + TimeValue("00:00:10"))


End Sub

Фактически обновляемая формула работает иначе, и она является простыми формулами BBG BDH.Например, BDP (B3 & "curncy", "px_mid"), где B3 имеет валютную пару, например, "EURUSD".Есть мысли о том, почему формулы не работают, даже после того, как Wait и DoEvents исправили?У меня возникло недовольство тем, что я неправильно понимаю что-то фундаментальное в том, как работает BBG / VBA, поэтому, пожалуйста, помогите мне понять, почему эта ситуация существует в первую очередь.Заранее спасибо!

...