Vba 使用大量BDH单元引用实现彭博时间延迟

Vba 使用大量BDH单元引用实现彭博时间延迟,vba,bloomberg,Vba,Bloomberg,我已经看了一些如何使用Application.OnTime的示例, 在更新之前检查单元内的进度,并编写了一个实现,但我不确定为什么它不起作用。 我不想把整件事都贴在这里,因为这可能比只看工作簿中的sub更让人困惑 我想知道有这方面经验的人是否愿意看看我的代码。我可以pm我正在处理的文件 下面是将数据加载到shell工作表中的方法。理想情况下,数据将在运行pattern_recogADR sub之前加载。。。否则就会出现错误 Sub build_singleEquity() 'x As Long

我已经看了一些如何使用Application.OnTime的示例, 在更新之前检查单元内的进度,并编写了一个实现,但我不确定为什么它不起作用。 我不想把整件事都贴在这里,因为这可能比只看工作簿中的sub更让人困惑

我想知道有这方面经验的人是否愿意看看我的代码。我可以pm我正在处理的文件

下面是将数据加载到shell工作表中的方法。理想情况下,数据将在运行pattern_recogADR sub之前加载。。。否则就会出现错误

Sub build_singleEquity()

'x As Long

Dim x As Long
x = 6


'Dim x As Long
'x = 4

Application.ScreenUpdating = False
Call DefineTixCollection 'creates table of inputs
'check
'Debug.Print TixCollection(4).ORD

'set up data points - from "Input" sheet
'Dim x As Long
'Dim path As String
'path = Sheets("Input").Range("V1").value

'For x = 1 To TixCollection.Count

    Sheets("SingleEquityHistoryHedge").Activate

    'clear inputs
    Range("B2:B8").Clear

    Dim Inputs() As Variant
    Dim name As String

    name = "SingleEquityHistoryHedge"

    'insert new inputs

        Inputs = Array(TixCollection(x).ADR, TixCollection(x).ORD, TixCollection(x).ratio, _
        TixCollection(x).crrncy, TixCollection(x).hedge_index, TixCollection(x).hedge_ord, _
        TixCollection(x).hedge_ratio)
        Call PrintArray(2, 2, Inputs, name, "yes") ' prints inputs

    Dim last_row As Long
    last_row = Range("A" & Rows.count).End(xlUp).Row

    Range("AN11") = "USD" & TixCollection(x).crrncy
    Range("AA11") = "USD" & TixCollection(x).crrncy

 '   Dim sht_name As String

'Application.Run "RefreshAllStaticData"

 BloombergUI.ThisWorkbook.RefreshAll

 '   sht_name = TixCollection(x).ADR

  '  Call Sheet_SaveAs(path, sht_name, "SingleEquityHistoryHedge") 'save collection of sheets

'Next x

'Call TriggerCalc



'check this out
Call pattern_recogADR(x + 4, 5, 13)


End Sub

这是模式记录子。。。。正如你所看到的,我试过很多不同的东西,都被注释掉了

Sub pattern_recogADR(pos As Long, pat_days As Long, sht_start As Long)

'

'Application.Wait Now + "00:00:20"

'Dim pat As pattern

'Dim tix As clsTix

Dim newTime As Date
newTime = Now + TimeValue("00:00:30")

Do While Not Now >= newTime
'add back in as parameters
'Dim pos As Long
Dim x As Long
'Dim pat_days As Long
'Dim sht_start As Long
'************************
'pos = 5
'pat_days = 5
'sht_start = 13

Sheets("SingleEquityHistoryHedge").Activate
'Sleep 20000 'sleeps


Dim st As Long
Dim st_num As Long
Dim st_end As Long
Dim count As Long
Dim patrn As Long


count = sht_start

Dim i As Long
Dim j As Long
Dim patPLUSret() As Variant
Dim k As Long
Dim z As Long


k = 2
z = 3

For j = 8 To 12


'**************************************
    count = sht_start
    st_num = sht_start
    st_end = 13


        If IsNumeric(Cells(count, j).value) Then
                'sets default pattern to beginning cell value

               ' Debug.Print st_num


                If Cells(st_num, j).value < 0 Then
                    For i = count + 1 To count + 1 + pat_days
                        If IsNumeric(Cells(i, j).value) Then
                            If Cells(i, j).value < 0 Then
                            st_end = i
                            'Debug.Print st_end
                            End If
                        Else
                            Exit For


                        End If
                    Next i

                        patrn = st_end - st_num

                       ' Debug.Print count
                       ' Debug.Print patrn

                        ReDim Preserve patPLUSret(k * 2 + 1)
                        patPLUSret(0) = Range("B2").value 'ADR
                        patPLUSret(1) = Range("B3").value 'ORD
                        patPLUSret(k) = patrn
                        patPLUSret(z) = Application.WorksheetFunction.Average(Range(Cells(st_num, j), Cells(st_end, j)))

                    '    Debug.Print patPLUSret(j)
                    '    Debug.Print patPLUSret(j + 1)

                        st_num = sht_start 'resets starting point to initial
                        st_end = sht_start



                       ' For x = 4 To 6
                       '     If Range("L" & x).value = "x" Then
                       '       ReDim Preserve mac_array(x - 4)
                       '       mac_array(x - 4) = Range("N" & x).value
                       '     End If
                       ' Next x


                        ' check this out
                         'tix.arbPnl = patrn
                        'save to separate class for patterns
                         'TixCollection.Add tix, tix.ADR
                        '******************************


                ElseIf Cells(st_num, j).value > 0 Then
                    For i = count + 1 To count + 1 + pat_days
                        If IsNumeric(Cells(i, j).value) Then
                            If Cells(i, j).value > 0 Then
                                st_end = i
                            End If
                        Else
                            st_end = st_num
                            Exit For
                        End If
                    Next i

                        patrn = st_end - st_num

                        ReDim Preserve patPLUSret(k * 2 + 1)
                        patPLUSret(0) = Range("B2").value 'ADR
                        patPLUSret(1) = Range("B3").value 'ORD
                        patPLUSret(k) = patrn
                        patPLUSret(z) = Application.WorksheetFunction.Average(Range(Cells(st_num, j), Cells(st_end, j)))

                       ' Debug.Print patPLUSret(j)
                       ' Debug.Print patPLUSret(j + 1)


                        st_num = sht_start 'resets starting point to initial
                        st_end = sht_start

                      '  Debug.Print patrn

                        'pat.arbPnl = patrn
                        'save to separate class for patterns
                End If


                k = k + 2
                z = z + 2
        Else
            count = count + 1
            st_num = count
        End If

   '
  '  k = k + 1

        'new_array = patPLUSret


Next j

  '  Debug.Print patPLUSret

    Sheets("PatternADR_ORD").Activate
    Range(Cells(pos, 1), Cells(pos, 10)) = patPLUSret


Loop


End Sub
Sub-pattern\u recogADR(pos为长,pat为长,sht为长)
'
'Application.Wait Now+“00:00:20”
"暗拍为图案"
“Dim tix As clsTix
将新时间变为日期
新时间=现在+时间值(“00:00:30”)
不立即执行>=newTime
'作为参数添加回
“只要
暗x等长
“暗淡的白昼一样长
“昏暗的短裙,只要开始就好。”
'************************
'位置=5
“八天=五天”
'sht_start=13
工作表(“SingleEquityHistoryHedge”)。激活
“睡眠20000”睡眠
长得一样暗
暗圣母与长圣母
暗淡的圣徒结束了
不算长
暗斑如长
计数=短程启动
我想我会坚持多久
Dim j尽可能长
Dim patPLUSret()作为变量
暗k一样长
暗z一样长
k=2
z=3
对于j=8到12
'**************************************
计数=短程启动
st_num=sht_开始
st_end=13
如果是数字(单元格(计数,j).value),则
'将默认模式设置为起始单元格值
'Debug.Print st_num
如果单元格(st_num,j).值小于0,则
对于i=计数+1到计数+1+八天
如果是数字(单元格(i,j).value),则
如果单元格(i,j).值小于0,则
st_end=i
'Debug.Print st_end
如果结束
其他的
退出
如果结束
接下来我
patrn=st_end-st_num
'调试。打印计数
'调试。打印patrn
ReDim-Preserve-patPLUSret(k*2+1)
patPLUSret(0)=范围(“B2”)。值“ADR”
patPLUSret(1)=范围(“B3”).值'ORD
patPLUSret(k)=patrn
patPLUSret(z)=应用程序.工作表函数.平均值(范围(单元格(st_num,j),单元格(st_end,j)))
'Debug.Print patPLUSret(j)
'Debug.Print patPLUSret(j+1)
st_num=sht_start将起点重置为初始值
st\U end=sht\U start
'对于x=4到6
'如果范围为(“L”&x).value=“x”,则
'ReDim保留mac_阵列(x-4)
'mac_数组(x-4)=范围(“N”和x).值
"完"
“下一个x
“看看这个
'tix.arbPnl=patrn
'保存到模式的单独类
'TixCollection.Add tix,tix.ADR
'******************************
ElseIf单元格(st_num,j)。值>0则
对于i=计数+1到计数+1+八天
如果是数字(单元格(i,j).value),则
如果单元格(i,j).值>0,则
st_end=i
如果结束
其他的
st_end=st_num
退出
如果结束
接下来我
patrn=st_end-st_num
ReDim-Preserve-patPLUSret(k*2+1)
patPLUSret(0)=范围(“B2”)。值“ADR”
patPLUSret(1)=范围(“B3”).值'ORD
patPLUSret(k)=patrn
patPLUSret(z)=应用程序.工作表函数.平均值(范围(单元格(st_num,j),单元格(st_end,j)))
'Debug.Print patPLUSret(j)
'Debug.Print patPLUSret(j+1)
st_num=sht_start将起点重置为初始值
st\U end=sht\U start
'调试。打印patrn
‘pat.arbbnl=patrn
'保存到模式的单独类
如果结束
k=k+2
z=z+2
其他的
计数=计数+1
st_num=计数
如果结束
'
'k=k+1
'new_array=patPLUSret
下一个j
'Debug.Print patPLUSret
图纸(“图纸”)。激活
范围(单元格(位置1),单元格(位置10))=patPLUSret
环
端接头

如果您在第二个子系统中等待或循环模拟等待,它不会将控制权返回到电子表格,公式也不会更新

而不是

Call pattern_recogADR(x + 4, 5, 13)
你为什么不打电话:

Application.onTime "'pattern_recogADR ""x + 4"", ""5"", ""13""'"

你最好的办法是发布一个最小的工作示例,说明什么不工作。嗨,安德兰,我要在这里发布我的代码。。。。目前有两种方法,我用定时器尝试了do-while循环。。。但是它似乎没有做任何事情,因为您的循环似乎是反向实现的。您不希望循环所有的子例程,您希望在循环期间不执行它。回到我的示例:
Do While Not Now>=newTime
,下一行应该是
DoEvents
,下一行应该是
Loop
。然后是代码的其余部分。我仍然不知道这是否有效。哎呀,我没看到这个