2013-11-25 4 views
2

Я использую надстройку Excel, которая извлекает данные с некоторого сервера. Я создаю простой макрос для извлечения данных, их разграничения и форматирования. Однако макрос не извлекает данные с сервера.VBA for Excel: данные сервера не обновляются

Формула выглядит следующим образом: =RTD([Server IP Address],"ALLASSETTICKERINFO")

Когда я типа эту формулу непосредственно в ячейку, данные возвращаются. Когда я использую это в макросе, данные не обновляются.

Sub Update_Asset_Info() 

Range("A2").Select 

' this should be fetching data from a server. Instead it's returning a string "ALLASSETTICKERINFO" 
ActiveCell.FormulaR1C1 = "=RTD([Server IP Address],"ALLASSETTICKERINFO")" 

' these "resfresh and wait" operations don't seem to help 
Range("A2").Select 
Calculate 
Application.Wait (Now + TimeValue("0:00:03")) 


' data is fetched from server if the following code is omitted, but I can't omit it. 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Application.CutCopyMode = False 
Selection.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _ 
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ 
    Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _ 
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _ 
    TrailingMinusNumbers:=True 
End Sub 

Единственный способ, с помощью которого данные обновляются, - это закрыть макрос сразу после выполнения формулы. Если я попытаюсь отформатировать данные перед завершением макроса, вместо этого данные не будут получены с сервера. Скорее, ячейка просто скажет: «ALLASSETTICKERINFO». Даже входящие команды Wait и Refresh, похоже, не помогают. Любая идея, как обойти это?

+0

Выстрел в темноте: вы пытались «Application.RTD.RefreshData» после ввода формулы. –

ответ

1

После очистки кода, его можно свести к следующему:

Sub Clark_Update_Asset_Info() 

Dim MainCell As Range 
Set MainCell = ThisWorkbook.Sheets("Sheet1").Range("A2") 'Modify as necessary. 

Application.Calculation = xlCalculationManual 

With MainCell 
    .Formula = "=RTD([Server IP Address],""ALLASSETTICKERINFO"")" 
    .Copy 
    .PasteSpecial xlPasteValues 
    .TextToColumns Destination:=MainCell, DataType:=xlDelimited, Semicolon:=True 
End With 

With Application 
    .CutCopyMode = False 
    .Calculation = xlCalculationAutomatic 
End With 

End Sub 

Пожалуйста, проверьте приведенный выше код в копию вашей книги в вопросе, как я не думаю, что есть какие-либо явные проблемы. Однако некоторые из многих вещей, которые я вижу, которые могут вызывать ошибки, заключаются в том, что вы используете .Selection и .ActiveCell и что вы забыли использовать двойные кавычки для ввода .Formula.

Сообщите нам, если это поможет.

EDIT: Кроме того, на основе this Microsoft Support nugget, синтаксис имеет вид:

=RTD(RealTimeServerProgID,ServerName,Topic1,[Topic2], ...) 

Если это соответствующая функция вам нужна, я вижу, необходимый ProgID, ServerName и Topic1 на основе выше статья. Возможно, это также способствует ошибке? Я могу видеть только две вещи, передаваемые вашему RTD.

+0

Спасибо! Это работает! Мне просто пришлось изменить 'Application.Calculation = xlCalculationManual' на' Application.Calculation = xlCalculationAutomatic'. –

Смежные вопросы