以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  容易造成系统崩溃的VBA,请版主帮忙调试。  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=73481)

--  作者:pel46585
--  发布时间:2014/12/24 9:15:52
--  容易造成系统崩溃的VBA,请版主帮忙调试。
可能我的思路上有问题,代码写的有些乱,并且因为时常出现错误,为了调试,加了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

--  作者:王锋
--  发布时间:2014/12/24 13:31:21
--  
你这是完整的可以直接运行的代码吗?
--  作者:pel46585
--  发布时间:2014/12/24 15:33:18
--  
是的,但有错误或不太好的地方。去掉ON ERROR RESUME NEXT后,总是提示错误。不知道要怎么解决。
--  作者:王锋
--  发布时间:2014/12/24 19:12:17
--  

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


--  作者:pel46585
--  发布时间:2014/12/26 13:30:15
--  
是的,反复多运行几次。
可能就会崩溃

--  作者:pel46585
--  发布时间: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
--  发布时间:2014/12/31 14:50:01
--  
运行次数多后,因为有ON ERROR RESUME NEXT,最终造成不可知原因,使金字塔崩溃且不可修复。
怎么解决?

--  作者:guotx2010
--  发布时间:2014/12/31 16:46:06
--  

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


--  作者:王锋
--  发布时间:2014/12/31 20:59:58
--  

导致系统出异常的原因是

 

Set Formula = Grid.GetFormulaByIndex(1)

 

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