以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- 框架vba编程指定窗口显示合约? (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=64803) |
||||
-- 作者:raidsan -- 发布时间:2014/5/8 17:15:53 -- 框架vba编程指定窗口显示合约? 对于包含多个周期窗口的框架, 点击表格中期货主力合约, 希望在日线以下级别窗口中仍然显示该主力合约的K线图, 但是在周线和月线窗口则自动显示对应的期货连续合约的K线图, 下面的代码为什么无法实现切换? 框架名: MyChart, 周线窗口名: WinWeek, 在三个事件中都写了代码, 测试在表格中点击合约 JM09, 结果 TableChangeStock, TableClickStock 两个事件被触发了, 但是周线窗口并没有被切换成 JMLX 合约, 周线窗口不论是设成与表格是同一分组, 还是设成没有分组, 结果都一样 Sub MyChart_TableChangeStock(Grid, Code, Market, Result)
Application.MsgOut "TableChangeStock: Grid.Name=" & Grid.Name &", Code=" & Code & ", Market=" & Market
if Code="JM09" THEN
Application.MsgOut "TableChangeStock JM09"
call MyChart.GetGridByName("WinWeek").ChangeStock("JMLX","DQ")
MyChart.GetGridByName("WinWeek").reInitData
MyChart.Refresh
\'MyChart.InitAllGrid
END IF End Sub Sub MyChart_TableClickStock(Grid, Code, Market, Result)
Application.MsgOut "TableClickStock: Grid.Name=" & Grid.Name &", Code=" & Code & ", Market=" & Market
if Code="JM09" THEN
Application.MsgOut "TableClickStock JM09"
call MyChart.GetGridByName("WinWeek").ChangeStock("JMLX","DQ")
MyChart.GetGridByName("WinWeek").reInitData
MyChart.Refresh
\'MyChart.InitAllGrid
END IF End Sub Sub MyChart_ChangeStock(Grid, Code, Market, Result)
Application.MsgOut "ChangeStock: Grid.Name=" & Grid.Name &", Code=" & Code & ", Market=" & Market
if Code="JM09" THEN
Application.MsgOut "ChangeStock JM09"
call MyChart.GetGridByName("WinWeek").ChangeStock("JMLX","DQ")
MyChart.GetGridByName("WinWeek").reInitData
MyChart.Refresh
\'MyChart.InitAllGrid
END IF End Sub |
||||
-- 作者:王锋 -- 发布时间:2014/5/8 17:18:36 -- 把你做的框架导出来,我们看看 |
||||
-- 作者:raidsan -- 发布时间:2014/5/8 20:12:51 -- 直接在这里上传吧 另外存在问题, 每次打开框架时都会跳出4次错误提示窗口: "操作文档数据时遇到了一个错误。" 不知道是我的表格指定的表头问题, 还是表头对应的指标问题? |
||||
-- 作者:王锋 -- 发布时间:2014/5/10 11:32:28 -- 你的合约代码写错了
焦煤连续的合约金字塔代码是JM00 call MyChart.GetGridByName("WinWeek").ChangeStock("JM00","DQ")
其他的代码也都有类似的问题. 还有你的资料给的不全,有几个TAB表没给,我这里没法完整运行你的东西,你试试改完后再看看 |
||||
-- 作者:raidsan -- 发布时间:2014/5/10 23:12:51 -- 谢谢提醒, 经过重新编写测试, 自动切换功能已经实现, 发布在这里供其他有需要的人参考一下: 以下内容为程序代码: 1 \'调用子过程, 可存放于全局 Global模块中 2 Sub FrameSwitchStock(Frame, Grid, Code, Market, IndexWinName) 3 dim indexCode, indexMarket 4 indexCode = Code 5 indexMarket = Market 6 7 \'期货品种的周线显示对应的连续合约 8 if Market="DQ" OR Market="ZJ" OR Market="SQ" or Market="SY" or Market="ZQ" then \'有什么方法可以方便地判断指定市场的种类是期货市场 ? 9 indexCode = Left(Code,Len(Code)-2) & "00" 10 indexMarket = Market 11 end if 12 13 Set IndexGrid = Frame.GetGridByName(IndexWinName) 14 if IndexGrid is Nothing then 15 Application.MsgOut "目标窗口不存在: " & IndexWinName 16 else 17 if IndexGrid.StockLabel<> indexCode THEN 18 call IndexGrid.ChangeStock(indexCode, indexMarket) 19 IndexGrid.reInitData 20 Frame.Refresh 21 Frame.InitAllGrid 22 END IF 23 end if 24 end Sub 25 26 \'从列表切换合约时触发 27 Sub MyChart_TableChangeStock(Grid, Code, Market, Result) 28 \'Application.MsgOut "TableChangeStock: Grid.Name=" & Grid.Name &", Code=" & Code & ", Market=" & Market 29 call FrameSwitchStock(MyChart, Grid, Code, Market, "WeekWin") 30 call FrameSwitchStock(MyChart, Grid, Code, Market, "MonthWin") 31 End Sub 32 33 \'子窗口直接输入代码切换合约时触发 34 Sub MyChart_ChangeStock(Grid, Code, Market, Result) 35 \'Application.MsgOut "ChangeStock: Grid.Name=" & Grid.Name &", Code=" & Code & ", Market=" & Market 36 if Grid.Name <> "WeekWin" then 37 call FrameSwitchStock(MyChart, Grid, Code, Market, "WeekWin") 38 end if 39 if Grid.Name <> "MonthWin" then 40 call FrameSwitchStock(MyChart, Grid, Code, Market, "MonthWin") 41 end if 42 End Sub 43 |
||||
-- 作者:raidsan -- 发布时间:2014/5/10 23:20:37 -- 只是弹出4次错误提示窗口: "操作文档数据时遇到了一个错误。"的问题没有解决 附件里应该包含用到的 .tab了
|
||||
-- 作者:王锋 -- 发布时间:2014/5/14 10:59:40 -- 我们这里无法线重现你所描述的报错问题,请加Qq 442902994,我们研发人员远程看看你那边的现象 |