我有一个函数,它返回给定日期的股票价格。如果返回的值为空,则Do-Until循环将日期减少1,并使用新日期再次调用该函数。一旦满足条件且未找到价格,则价格设置为0。
下面的代码片段说明了此代码的工作版本的工作方式:
Dim Date1 As Date
Dim r As Variant
Dim Price1 As Variant
Dim arg1 As Variant
Dim arg2 As Variant
Dim counter As Integer
r = Function1(arg1, arg2, Date1, Date1)
Price1 = r(0, 0)
Do Until IsEmpty(Price1) = False And counter <= 10
Date1 = Date1 - 1
counter = counter + 1
r = Function1(arg1, arg2, Date1, Date1)
Price1 = r(0, 0)
If counter = 10 Then
Price1 = 0
End If
Loop
现在,我正在尝试重新创建此代码,以便我可以在其中传递两个日期,并为各自的日期检索两个不同的价格(在结果为空的情况下,还经历了Do-Until例程)。
到目前为止,我一直在尝试使用“For”循环和各种“If”语句以正确的方式传递参数,但没有一个有效。
我的最新尝试以及逻辑如下所示:
在迭代1中,将Date1传递给函数,检索Price 1并将其分配给变量PriceT。
在迭代2中,将Date2传递给函数,检索Price 2并将其分配给变量PriceTX,然后退出循环。
Dim Dates(0 To 1) As Date
Dim Count As Integer
Dim counter, PriceT, PriceTX, arg1, arg2, x, y, j As Variant
For Count = 1 To 2
If Count = 1 Then j = Date1 Else j = Date2
x = Function1(arg1, arg2, j, j)
y = x(0,0)
Do Until IsEmpty(y) = False And counter <= 10
j = j - 1
counter = counter + 1
x = Function1(arg1, arg2, j, j)
y = x(0, 0)
If counter = 10 Then
y = 0
End If
Loop
If Count = 1 Then y = PriceT Else y = PriceTX
Next
我想提及的是,我正在寻求一种简洁且高度优化的解决方案,我正在努力避免将工作代码复制两次,并将行数增加一倍(尽管我知道这会像我已经尝试过的那样有效)
我真的不明白还有什么别的办法。如有任何建议,将不胜感激。