Vba 将字典传递给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

我想将Scripting.Dictionary对象传递给Application.OnTime。 问题是我一直得到一个“编译错误:参数不是可选的”

该守则的结构如下:

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”全局变量?