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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 容易造成系统崩溃的VBA,请版主帮忙调试。

   

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


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

主题:容易造成系统崩溃的VBA,请版主帮忙调试。

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


加好友 发短信
等级:论坛游侠 帖子:167 积分:661 威望:0 精华:1 注册:2009/12/25 23:43:24
容易造成系统崩溃的VBA,请版主帮忙调试。  发帖心情 Post By:2014/12/24 9:15:52 [只看该作者]

可能我的思路上有问题,代码写的有些乱,并且因为时常出现错误,为了调试,加了On Error Resume Next,后果是容易崩溃。
我的目的是键入数字1,更换主图为MA,副图为KDJ,键入2时,更换为其它公式。 能用其它的方式解决更好。
Sub SelectFormula()
On Error Resume Next
If Application.IsActivateFrame("Technic") <> 1 Then
Msgbox "不是技术分析页面,无法加载公式组"
Exit Sub
End If
txtInput = inputbox("选择公式组。1、MA KDJ;2、SAR MACD")
If txtInput = "1" Then TxtSelect = "MA KDJ"
If txtInput = "2" Then TxtSelect = "SAR MACD"
TXT=Split(TxtSelect," ")
Set Grid = Technic.GetGridByName("Main")
Set Formula = Grid.GetFormulaByIndex(1)
If  Err.Number = 61704 Then
Grid.InsertFormula txt(0),3
Err.Number = 0
End If
If Err.Number = 0 Then
Grid.InsertFormula txt(0),3
Grid.DeleteFormula Formula.name
End If
Set Grid = Nothing
Set Formula = Nothing
Set Grid = Technic.GetGridByName("Window9")
'msgbox Grid.FormulaCount & Grid.Name
Set Formula = Grid.GetFormulaByIndex(0)
If  Err.Number = 61704 Then
Error.Clear
Set Formula = Grid.GetFormulaByIndex(1)
application.MsgOut Err.Number
Grid.InsertFormula txt(1),3
Err.Number = 0
End If
If Err.Number = 0 Then
Grid.InsertFormula txt(1),3
'Grid.DeleteFormula Formula.name
End If
End Sub

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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2014/12/24 13:31:21 [只看该作者]

你这是完整的可以直接运行的代码吗?


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

金字塔-技术部

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

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

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


加好友 发短信
等级:论坛游侠 帖子:167 积分:661 威望:0 精华:1 注册:2009/12/25 23:43:24
  发帖心情 Post By:2014/12/24 15:33:18 [只看该作者]

是的,但有错误或不太好的地方。去掉ON ERROR RESUME NEXT后,总是提示错误。不知道要怎么解决。

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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2014/12/24 19:12:17 [只看该作者]

直接用执行宏就可以跑了?



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

金字塔-技术部

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

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

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


加好友 发短信
等级:论坛游侠 帖子:167 积分:661 威望:0 精华:1 注册:2009/12/25 23:43:24
  发帖心情 Post By:2014/12/26 13:30:15 [只看该作者]

是的,反复多运行几次。
可能就会崩溃

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


加好友 发短信
等级:论坛游侠 帖子:167 积分:661 威望:0 精华:1 注册:2009/12/25 23:43:24
  发帖心情 Post By:2014/12/31 14:41:40 [只看该作者]

暂时看,这个代码,如果运行一次vba后;重启金字塔,再重新运行代码是不出错的。但连续运行2次vba就出错。
考虑认为是:Grid.GetFormulaByIndex(i)部分出了错,错误原因,应当是没有正确释放Formul对象。
帮助文档中没有正确释放Formul对象或者正确释放Grid对象的代码。
我按一般的VB代码写的 Set Formula = Nothing,试验证明无效。

[此贴子已经被作者于2014/12/31 14:43:40编辑过]

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


加好友 发短信
等级:论坛游侠 帖子:167 积分:661 威望:0 精华:1 注册:2009/12/25 23:43:24
  发帖心情 Post By:2014/12/31 14:50:01 [只看该作者]

运行次数多后,因为有ON ERROR RESUME NEXT,最终造成不可知原因,使金字塔崩溃且不可修复。
怎么解决?

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


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

用3.24版试试看会不会崩溃?


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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2014/12/31 20:59:58 [只看该作者]

导致系统出异常的原因是

 

Set Formula = Grid.GetFormulaByIndex(1)

 

你这句话,你要判断系统当前的Grid加载了那么多公式后再取,否则取到的Formula对象是空的



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

金字塔-技术部

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

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

Email:service@weistock.com
 回到顶部