Excel:动态数据交换API公式执行问题

问题描述

不确定这是否是提出此问题的合适论坛,如果这对于SO来说过于具体(例如,财务Y),则感到抱歉。我以前从未使用过excel-DDE,也无法在网上找到与我的问题类似的任何东西。

我正在使用TradeBase MX从交易所获取实时报价。 TBMX具有excel-DDE api,例如苹果通过=@TBMX|QUOTE!US0378331005.xtr.bid在xetra的报价。我想基于另一个单元格中的ISIN US0378331005自动生成此公式。问题是,如果单元格=CONCATENATE("=@TBMX|QUOTE!",A1,".xtr.bid")包含ISIN,但我无法通过A1生成该公式,但是excel将不会执行该公式,即,它不会在该单元格中显示出价。它只会在单元格中将=@TBMX|QUOTE!US0378331005.xtr.bid显示为文本。我尝试过定义用于评估的VBA函数

Public Function eval(s As String) As Variant
    eval = Evaluate(s)
End Function

,但是=eval(CONCATENATE("=@TBMX|QUOTE!",".xtr.bid"))也将无法正常工作。仅当我在另一个单元格中对=@TBMX|QUOTE!US0378331005.xtr.bid进行硬编码(即DDE数据已被excel调用)时,此方法才会在计算时更新一次报价。不确定如何使用公式来获得所需的功能。我希望excel在单元格中生成公式后执行DDE请求。

这只能通过VBA宏来实现,该宏会生成公式并通过.formula = "=@TBMX|QUOTE!US0378331005.xtr.bid"对其进行分配?很抱歉,由于我使用的是特定的软件TBMX,我的问题缺乏可重复性,但是由于我对DDE请求的幕后情况不甚了解,因此我不知道该怎么做。

解决方法

我使用Bloomberg作为我的API,并使用VBA编写了引用Bloomberg函数的公式。除了使用串联,您还可以将其他单元格的值更改为串联版本吗?例如,如果您想要显示出价的单元格是A3,您是否尝试过:

Sheets("yoursheetname").Range("A3").value = "=@TBMX|QUOTE!" & Sheets("yoursheetname").Range("A1").value & "xtr.bid"

我不确定您如何设置工作表,但使用R1C1引用单元格可能更有意义,或者如果您要对整个投资组合定价,并且需要填写公式,则可以使用{{1} }参考。