Vba 将字典传递给Application.OnTime
我想将Scripting.Dictionary对象传递给Application.OnTime。 问题是我一直得到一个“编译错误:参数不是可选的” 该守则的结构如下:Vba 将字典传递给Application.OnTime,vba,dictionary,ontime,Vba,Dictionary,Ontime,我想将Scripting.Dictionary对象传递给Application.OnTime。 问题是我一直得到一个“编译错误:参数不是可选的” 该守则的结构如下: Public Sub mainSub() Dim orderBookIndex As New Scripting.Dictionary Dim contractIndex As New Scripting.Dictionary Call computeStuff(0, orderBookIndex, co
Public Sub mainSub()
Dim orderBookIndex As New Scripting.Dictionary
Dim contractIndex As New Scripting.Dictionary
Call computeStuff(0, orderBookIndex, contractIndex)
End Sub
mainSub调用computeStuff,然后computeStuff在递增后每秒调用“callLive”启动自己
Public Sub computeStuff(index As Integer, Optional orderBookIndex As Scripting.Dictionary, Optional contractIndex As Scripting.Dictionary)
' Do stuff
If index = 0 Then
Set orderBookIndex = New Scripting.Dictionary
Set contractIndex = New Scripting.Dictionary
End If
If index = 1 Then
Set orderBookIndex = New Scripting.Dictionary
Set contractIndex = New Scripting.Dictionary
orderBookIndex.add "a", "b" ' add random stuff
contractIndex.add "c", "d" ' add random stuff
End If
Call callLive(index, orderBookIndex, contractIndex)
End Sub
然后调用callLive并拒绝编译:
Public Sub callLive(index As Integer, Optional orderBookIndex As Scripting.Dictionary, Optional contractIndex As Scripting.Dictionary)
Dim SchTime As Double
SchTime = Now + TimeSerial(0, 0, 1)
index = index + 1
Application.OnTime SchTime, "'computeStuff """ & index & """ ,""" & orderBookIndex & """ ,""" & contractIndex & """'", , False
End Sub
我们将非常感谢您为完成此任务(或解决此问题)提供的任何帮助或指导。尝试将orderBookIndex和contractIndex作为全局变量,如下所示,看看是否适合您:
Public orderBookIndex As Scripting.Dictionary
Public contractIndex As Scripting.Dictionary
Public Sub mainSub()
Set orderBookIndex = New Scripting.Dictionary
Set contractIndex = New Scripting.Dictionary
Call computeStuff(0, orderBookIndex, contractIndex)
End Sub
Public Sub computeStuff(index As Integer, Optional orderBookIndex As Scripting.Dictionary, Optional contractIndex As Scripting.Dictionary)
' Do stuff
If index = 0 Then
Set orderBookIndex = New Scripting.Dictionary
Set contractIndex = New Scripting.Dictionary
End If
If index = 1 Then
Set orderBookIndex = New Scripting.Dictionary
Set contractIndex = New Scripting.Dictionary
orderBookIndex.Add "a", "b" ' add random stuff
contractIndex.Add "c", "d" ' add random stuff
End If
Call callLive(index, orderBookIndex, contractIndex)
End Sub
Public Sub callLive(index As Integer, orderBookIndex As Scripting.Dictionary, contractIndex As Scripting.Dictionary)
Dim SchTime As Double
SchTime = Now + TimeSerial(0, 0, 1)
index = index + 1
Application.OnTime SchTime, "'computeStuff " & index & " , orderBookIndex, contractIndex'"
End Sub
通常建议尽量少使用全局变量,但是,为什么不尝试一下呢:将字典对象设为“orderBookIndex”和“contractIndex”全局变量?