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