How do I trigger a VBA macro from within the TR function in Eikon Excel

How do I trigger a VBA macro from within the TR function in Eikon Excel

Best Answer

  • Following on from Neil's reply, RData(), RHistory() and TR() functions have a MACRO
    argument where macros can be run when the function has updated its data. The
    macros can be in the code on the Workbook or Sheet object, in a VBA module
    contained in the workbook or code in another, separate workbook.

    The
    Word document attached gives a description and various examples of how
    to use the MACRO argument, including file names with gaps
    and named ranges.

    The
    examples and document show RData() and RHistory() and TR() examples. The syntax for the TR function itself is slightly different as the
    argument (MACRO) and parameter (myMacroName) are separated by a colon
    (:) in Rdata()/RHistory() and by an equality sign (=) in TR().

    Thus,
    requesting BID and ASK for VOD.L, to run the macro called myMacro1 when
    the data updates, the two functions will look like this;
    =RData("VOD.L","BID;ASK;PRCTCK_1",,"MACRO:myMacro1","CH:Fd",A2)

    =TR("VOD.L","BID;"&"ASK;"&"PRCTCK_1","MACRO=myMacro1 CH=Fd",A2)

    It isn't possible to include or send variables with the
    macro name when it is defined in the RData(), RHistory() or TR()
    function, such as
    =RData("VOD.L","BID;ASK;PRCTCK_1",,"MACRO:myMacro1(myVariable)","CH:Fd",A2)

    =TR("VOD.L","BID;"&"ASK;"&"PRCTCK_1","MACRO=myMacro1(myVariable) CH=Fd",A2)

    What will be required is to run an initial macro, e.g. myMacro1
    that gathers or creates the required variable, which then runs a
    subroutine, e.g. myMacro2, or a function, e.g. myCustomFunction, to
    return the desired result. The code sample below shows this.

    Option Explicit

    'Called by RData
    Sub myMacro1()
    Dim myVar As Variant

    'Using a custom function
    myVar = myCustomFunction(5)
    MsgBox "Result of myCustomFunction" & Chr(13) & myVar

    'Using a subroutine
    Call myMacro2(5)
    End Sub

    Function myCustomFunction(ByVal var1 As Integer)
    myCustomFunction = var1 * 25
    End Function

    Private Sub myMacro2(ByVal val1 As Integer)
    MsgBox "Result of myMacro2" & Chr(13) & val1 * 125
    End Sub

    The zip file attached to this reply contains the Word document and Excel sample file.

    rdata-tr-macro-examples.zip

Answers

  • You can get your TR function to trigger a macro through the "custom TimeFrame" option.

    In the example below the "Showmessage" macro is called every time updates are displayed within the set timeframe.

    macro.png

    = TR(F7:F46,"BID","START=09:00 END=20:30 MACRO=SHOWMESSAGE")

    You would set your custom timeframe as below, from UPDATE FREQ menu

    custom-timeframe.png