0

我想将 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

任何帮助或指导来完成此任务(或解决此问题)都将受到高度赞赏。

4

1 回答 1

0

尝试将 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
于 2015-10-07T10:39:48.247 回答