比如我在后台里有句
把这个键值赋值成目前的交易时间供vba读取~
SETREGVAL('vba','mailtime',dynainfo(207));
但是vba如何读取我后台写入的指定的注册表键值呢?
下面这句没看懂~都不知道注册表键值去哪里找
'测试注册表读写 Sub TestRegistry() Set registry = CreateObject("stock.registry") Call registry.Open("software\weisoft\金字塔\settings") Call registry.WriteInt("id",123) result=registry.ReadInt("id") application.msgout result End Sub |
Sub TestRegistry()
Set registry = CreateObject("stock.registry")
Call registry.Open("software\weisoft\金字塔\vba")
result=registry.ReadInt("id")
application.msgout result
End Sub
这样试试
application.msgout result这句弹不出来啊~
SETREGVAL('vba','mailtime',dynainfo(207));
我要使用mailtime这个键值~用vba与后台做应答~
怎么在vba里面调用出这个键值~
没弹出来说明这个VBA语句没有运行,你可以再把需求描述的清楚一些,我们再看看如何帮你解决
首先用后台运行这句
SETREGVAL('vba','mailtime',dynainfo(207));
把时间赋值给注册表
然后用vba读取注册表这个键值~
vba再引用当前交易时间与这个键值对比~
if vba引用的当前交易时间-注册表键值>20秒 then begin//判断后台无应答为假死状态
StopAlarmRun 停止后台程序化预警
(这里可能需要停顿5-10秒,再启动后台)
StartAlarmRun 启动后台程序化预警
end
防止后台假死
'VBA启动时事件
Sub APPLICATION_VBAStart()
Application.MsgOut "监控后台启动工作"
Application.SetTimer 1, 3000 '设定3秒定时器
End Sub
Sub APPLICATION_Timer(ID)
If ID = 1 Then
MyTime = CStr(Hour(Time))+CStr(Minute(Time))+CStr(Second(Time))
PelTime = TestRegistry()
Application.MsgOut CLng(MyTime) - PelTime
If CLng(MyTime) - PelTime > 20 Then
Application.MsgOut "发现后台异常,正在重启后台程序化"
MarketData.StopAlarmRun
MarketData.StartAlarmRun
End If
End If
End Sub
Function TestRegistry()
Set registry = CreateObject("stock.registry")
Call registry.Open("software\weisoft\金字塔\vba")
result=registry.ReadInt("id")
TestRegistry = result
set registry = nothing '对象使用完要释放,负责会出现内存泄露
End Function
谢谢这段vba代码
很好的范例
[此贴子已经被作者于2014/4/10 1:24:07编辑过]
写个后台demo9003~就下面一段代码~
监控IF05~分笔周期高频刷新
SETREGVAL('vba','mailtime',dynainfo(207));
启动VBA运行7楼代码总是不断循环开关后台
If ID = 1 Then
MyTime = CStr(Hour(Time))+CStr(Minute(Time))+CStr(Second(Time))
PelTime = TestRegistry()
‘ Application.MsgOut CLng(MyTime) - PelTime
Application.MsgOut CLng(MyTime)
Application.MsgOut PelTime
If CLng(MyTime) - PelTime > 20 Then
Application.MsgOut "发现后台异常,正在重启后台程序化"
MarketData.StopAlarmRun
MarketData.StartAlarmRun
End If
End If
End Sub
上面那句改一下~发现PelTime一直为0
~是否说明注册表读取出错?VBA一直没有读到正确的GETREGVAL('vba','mailtime',0)这个数值
是的,你的注册表这个值有问题,你可以打开注册表编辑器,看看里面的数值到底PEL公式置进去没有