以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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=63429)

--  作者:szwangwei88
--  发布时间:2014/4/2 16:17:22
--  同一框架用vba设置不同周期的主图的显示时段有问题。
我自建的框架,有两个主窗格,一个是1分钟k线,一个是日k线,先用vba设置1分钟主图的显示时段,正常,如下程序。然后再用同样方法设置日k线图的显示时段,但日k线不起作用,是为什么?
yGrid.ReInitDataFormula
MyGrid.LockTimeSect=1
MyGrid.LockTimeSectStart=StartTime
MyGrid.LockTimeSectEnd=EndTime
MyGrid.ReInitDataFormula
MyFrame.ReCalcAllGridFromula()

--  作者:王锋
--  发布时间:2014/4/2 16:36:21
--  
你全部代码发来我看看
--  作者:szwangwei88
--  发布时间:2014/4/2 16:49:29
--  
dim MyFrame


Sub UserForm1_Initialize()
dim MyGrid
dim MyGrid1

if www.HasVisible=1 then
Set MyFrame=www
else Set MyFrame=Technic
end if

Set MyGrid=MyFrame.GetGridByName("Main")
\'msgbox MyGrid.name
Set MyGrid1=MyFrame.GetGridByName("细")
\'msgbox MyGrid1.name
UserForm1.Resizing=1
UserForm1.Move(MyGrid1.Width+MyGrid.Width-UserForm1.Width)
UserForm1_TextBox1.Text=""
UserForm1_TextBox2.Text=""
End Sub



Sub UserForm1_CommandButton1_Click()
dim TextTime

dim StartTime
dim StartTime1
dim NextDate
dim HistoryD 
dim MyGrid
dim MyGrid2
dim StartPos
dim EndTime
dim StartDay

Set MyGrid =MyFrame.GetGridByName("Main")



TextTime=UserForm1_TextBox1.Text

StartTime=CDate(TextTime)
If WeekDay(StartTime)=1 then
StartTime=StartTime-2
ElseIf WeekDay(StartTime)=7 then
StartTime=StartTime-1
End If
StartDay=StartTime
\'msgbox starttime
EndTime=StartTime+ #15:15:00#
StartTime=StartTime+#09:16:00#

Set HistoryD = MyGrid.GetHistoryData()

MyGrid.LockTimeSect=0
MyGrid.ReInitDataFormula

StartPos=MyGrid.PosByDate(StartTime)
\'msgbox startpos
StartTime1=MyGrid.DateByPos(StartPos)

If StartTime<>StartTime then
msgbox "无此日数据"
Exit Sub
end if 


MyGrid.ReInitDataFormula
MyGrid.LockTimeSect=1
\'msgbox starttime
MyGrid.LockTimeSectStart=StartTime
MyGrid.LockTimeSectEnd=EndTime
MyGrid.ReInitDataFormula

MyFrame.ReCalcAllGridFromula()

EndTime=EndTime
UserForm1_TextBox1.Text= StartDay

If MyFrame.name="www" then
Set MyGrid2=MyFrame.GetGridByName("日线")
MyGrid2.LockTimeSect=1
StartTime=MyGrid2.PosByDate(StartDay)-50
StartTime=MyGrid2.DateByPos(StartTime)
MyGrid2.LockTimeSectStart=StartTime
MyGrid2.LockTimeSectEnd=StartDay
MyGrid2.ReInitDataFormula

MyFrame.ReCalcAllGridFromula()
End If


End Sub

--  作者:szwangwei88
--  发布时间:2014/4/3 17:02:58
--  
程序在贴出,等答复。
--  作者:王锋
--  发布时间:2014/4/4 10:40:34
--  

我们内部测试时用2个框架通过宏定义来刷新是正常的。

看你的代码,中间有很多过程和变量,怀疑你的代码出现了逻辑问题,建议你用Application.msgout函数,对你的代码做一下调试吧,看看日线刷新部分到底执行过去了没有


--  作者:szwangwei88
--  发布时间:2014/4/4 14:04:47
--  
不是两个框架,是同一框架。
--  作者:王锋
--  发布时间:2014/4/6 0:15:30
--  

做了个简单的测试公式

 

Sub Test()
dim MyGrid1
dim myGrid2


Set MyGrid1 = Frame1.GetGridByName("Window1")
MyGrid1.LockTimeSect=1
MyGrid1.LockTimeSectStart="2014-3-27 09:20:00"
MyGrid1.LockTimeSectEnd="2014-3-27 15:10:00"
MyGrid1.ReInitDataFormula

Set MyGrid2 = Frame1.GetGridByName("Window2")
MyGrid2.LockTimeSect=1
MyGrid2.LockTimeSectStart="2014-3-27 09:20:00"
MyGrid2.LockTimeSectEnd="2014-3-27 15:10:00"
MyGrid2.ReInitDataFormula

 

End Sub

 

没发现你说的问题,建议你还是用调试手段多调试下你的代码吧


--  作者:szwangwei88
--  发布时间:2014/4/6 9:34:23
--  
你的程序两个窗格的都是1分钟线,而我是用在一个是1分钟线,一个是日线。就是你这个程序第二个窗格的改成日线,对日线的控制就不行了。你可以再试下。

Sub Test()
dim MyGrid1
dim myGrid2


Set MyGrid1 = Frame1.GetGridByName("Main")
MyGrid1.LockTimeSect=1
MyGrid1.LockTimeSectStart="2014-3-27 09:20:00"
MyGrid1.LockTimeSectEnd="2014-3-27 15:10:00"
MyGrid1.ReInitDataFormula

Set MyGrid2 = Frame1.GetGridByName("日线")
MyGrid2.LockTimeSect=1
MyGrid2.LockTimeSectStart="2014-4-1"
MyGrid2.LockTimeSectEnd="2014-4-5"
MyGrid2.ReInitDataFormula

 

End Sub

 


--  作者:王锋
--  发布时间:2014/4/6 23:41:45
--  
确实是有点问题,这个问题主要是之前你已经在1分钟周期上做过时段限定导致的,我们会再下个升级版修正该问题