question

Upvotes
Accepted
322 5 12 16

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

eikoneikon-com-apiexcelvba
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvotes
Accepted
66 1 1 4

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


icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvotes
966 11 19 26

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

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Click below to post an Idea Post Idea