A:
实现:提取A列指定好的股票组合的最新的收盘价,成交量等数据,可用于盘中刷新。
本章中提供两种写法,主推第二种优化方式,效率高,结果刷新快。
一般的写法:通过对股票的循环,一个个指标进行交互提取,这种方式计算很慢,交互本身存在消耗,如下面这种,供参考实现方式
Private Sub CommandButton1_Click()
Dim Obj As Object
Set Obj = CreateObject("TSExpert.CoExec") 'com对象
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' 工作表
Dim rng As Range
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '找到最后一行的下标
For i = 2 To lastRow
Obj.Stock = ws.Cells(i, "A").Value
ws.Cells(i, "B").Value = Obj.RemoteCallFunc("stockName", ws.Cells(i, "A").Value)
ws.Cells(i, "C").Value = Obj.RemoteCallFunc("close", "")
ws.Cells(i, "D").Value = Obj.RemoteCallFunc("vol", "")
ws.Cells(i, "E").Value = Obj.RemoteCallFunc("amount", "")
ws.Cells(i, "F").Value = Obj.RemoteCallFunc("stockzf3", "")
ws.Cells(i, "G").Value = Obj.RemoteCallFunc("base", 10029)
Next i
ws.Range("I6") = ws.Range("I6") + 1 '记录运行次数,方便观察是否运行完成
End Sub
优化写法:封装取数模型,通过一次交互提取需要的指标数据,这种方式效率快
Private Sub CommandButton1_Click()
Dim Obj As Object
Set Obj = CreateObject("TSExpert.CoExec") 'com对象
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' 工作表
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '找到最后一行的下标
Dim dataArray() As Variant
dataArray = ws.Range("A2:A" & lastRow).Value ' 将A列的数据放入数组
ws.Range("B1:G" & lastRow) = Obj.RemoteCallFunc("getStockData_VBA", Array(dataArray))
ws.Range("I6") = ws.Range("I6") + 1
End Sub
其中,封装的天软函数getStockData_VBA脚本如下:
Function getStockData_VBA(stocks);
Begin
setsysparam(pn_date(),today());
t:= select //thisrow as "代码",
stockName(thisrow) as "名称",
spec(close(),thisrow) as "价格",
spec(vol(),thisrow) as "成交量",
spec(amount(),thisrow) as "成交金额(万)",
spec(stockzf3(),thisrow) as "涨幅(%)",
spec(base(10029),thisrow) as "行业"
from stocks end;
return t;
End;
示例中vba实现的文件:
一般的写法:
附件:VBA_CallTSDemo01.xlsm
优化写法:
附件:VBA_CallTSDemo02.xlsm