欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 哪里出了问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3373人关注过本帖树形打印复制链接

主题:哪里出了问题

帅哥哟,离线,有人找我吗?
老树新芽
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:58 积分:227 威望:0 精华:0 注册:2011/12/21 19:59:25
哪里出了问题  发帖心情 Post By:2013/4/28 23:47:18 [只看该作者]

应版主要求,把我的问题单独发表提问。不过问题越来越多了。

 

一、OFFICE vba的变量有工程级、模块级和过程级,还有公有、私有概念。请问金字塔有没有这些概念。过程级变量不说了,我知道肯定不会有冲突。如果是过程之外的变量,那么是对当前模块有效,还是对所有模块有效?是对当前VBA工程有效?还是对整个工程有效?

 

二、对于代码调试我很头痛,关于调试模式基本不知所云。我干脆用执行模式,用MSGOUT输出来调试代码。我要重新修改代码时,按SHIFT+BREAK终止执行,但是带来一个很低级的问题:每次终止执行之后,光标就自动跑到模块的顶端去了,我需要花时间找到我的代码位置。有没有办法让光标停在我指定的位置?(好笑吧)

 

三、对于marketdata.gethistorydata()对象的引用,折腾了好久,反复测试才知道这个东东不能被设置两次引用,代码能过,但结果不对,跨周期、跨品种统统不行。后来发现论坛上对此有说明并有解决办法。但是我已经发现一个解决办法了,把要引用的两个HISTORYDATA对象,一个放在过程外面设置引用,一个放在过程内设置引用。我测试了几遍,似乎可以,我想知道,我的这个方法是不是正解之一。====这个问题我自己回答,我的这个方法是幻觉,只能用设置数组的办法解决。

 

我更想知道,是不是有且仅有HISTORYDATA对象引用会出现这样的问题,至于MINUTEDATA和REPORTDATA则没有这样的问题。直接告诉我答案吧!

 

四、我直接在数据管理器里面把要删除的数据清空了。

 

五、现在的新状况是,我每次开机之后,不能自动激活动态显示牌REPORT框架。正常情况下,每次启动金字塔,

会自动层叠三个窗口,主程序窗口、综合管理窗口和动态显示牌窗口,这三个窗口都是不能被关闭的,而我们

打开的技术分析或者其它框架窗格,那已经是第四层了。我不知道出了什么状况,我的动态显示牌不能自动加载。

 

六、Application对象有两个事件,一个是START,一个是VBASTART。Start事件是每次启动金字塔时产生,我猜START事件过程中至少包括了VB引擎启动和激活REPORT框架等指令。对于VBAstart事件,我不确定是指每次VB启动时发生(打开金字塔主程序和SHIFT+break之后重新启动时发生),还是执行任意一个宏指令(ALT+F8)时发生。

 

七、我甚至不确切在代码窗口运行“执行”指令的确切意思,是指启动VB引擎,还是编译并保存代码。因为写的所有VBA过程代码全部都在模块里,包括宏,而只有执行宏的时候,宏才被执行,其它的过程只有在宏调用时才执行。

 

很多东西不懂,教程里没有清晰答案,所以问题比较多,还请解答,谢谢!

[此贴子已经被作者于2013-4-28 23:47:46编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2013/4/29 20:21:52 [只看该作者]

一、OFFICE vba的变量有工程级、模块级和过程级,还有公有、私有概念。 请问金字塔有没有这些概念?
    答:金字塔中工程级别的变量需要设置为public型,模块级别设置为private型,过程级别不用说就是过程中定义的。至于公有私有之类,可以理解为public和private。
    例如:一个工程中有两个模块ModOne,ModTwo,如果你希望有某一个变量在两个模块中都能使用,那么就在其中任意一个模块的开始位置定义为public就可以了,而每一个模块开头的地方以private定义的变量,只在该模块各个过程可见:
    ‘ModOne模块1中定义变量的情况
     public pVar1,pVar2            '全局变量(整个工程可见)
     private Var1,Var2               '模块级变量或私有变量(只在本模块各个过程可见)
     Sub test1()
          pVar1=99
          application.msgout "Test1中给pVar1赋值为" & pVar1
          dim aaa                          '过程级别的变量,只在test1可见
          aaa=888
     End Sub

     Sub Test2()
            application.msgout "Test2中pVar1的值为" & pVar1
     End Sub

    'ModTwo定义变量的情况
    private Var3,Var4
    Sub Test3()
        application.msgout "模块1中定义的全局变量pVar1,在模块2中依然可见"&pVar1
   End Sub


 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2013/4/29 20:25:44 [只看该作者]

二、调试最好的方法依然是application.msgout显示运行过程的变量状态,停止之后不能定位到上次修改位置的问题,建议记住所在的行号,这样就可以很快定位到那里了。


 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2013/4/29 20:29:03 [只看该作者]

三、gethistorydata确实只能引用一次,如果你需要引用多个,可以考虑使用数组,将第一个的数据保存到数组,
    minutedata和reportdata可以引用多个


 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2013/4/29 20:37:18 [只看该作者]

五、工具->选项->多框架显示模式,开启就可以
六、只要用一个VBAStart事件就可以了,Start事件可以不理会
七、”执行“意识就是启动VBA引擎的意思,系统就会启动VBA引擎,自动执行Application_VbaStart事件。
    你要执行的代码,放在vbastart事件就行了,至于其他的代码,如果需要反复调用的,需要使用定时器。
    如果是需要与人交互的,就要使用窗体,窗体上提供调用某些功能的按钮。



 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2013/4/29 22:03:49 [只看该作者]

问题2 补充一下,你可以使用 编辑 菜单下的书签功能,可以快速的定位到你所需要的位置


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
老树新芽
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:58 积分:227 威望:0 精华:0 注册:2011/12/21 19:59:25
  发帖心情 Post By:2013/5/2 13:33:31 [只看该作者]

基本明白了,谢谢!

 回到顶部