我正在对800份信用衍生品合约的样本进行分析。我正在编写一个我想要执行以下操作的宏:
我搜索了网站(以及MrExcel,Chip Pearson的网站,OzGrid等)并收集了我想要在BDH()函数刷新后运行的任何子等等,需要成为其中一部分新子 - 请参阅链接here,here和here,了解StackExchange上的类似问题。我已经多次修改了我的脚本,但是我很难让它运行起来。
我认为问题在于我正在使用For ...循环,需要在循环的每次迭代期间刷新BDH()。代码如下。
Dim i As Long
Dim wb As Workbook
Dim issuer As Range
Dim issuer_2 As Range
Dim tickers As Range
Dim data As Range
Dim hVaR As Range
Dim outputcol As Range
Sub GethVaR()
With Excel.Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationAutomatic
End With
Set wb = ThisWorkbook
Set issuer = wb.sheets("Tickers").Range("A2")
Set tickers = wb.sheets("Tickers").Range("V2:AC2")
Set issuer_2 = wb.sheets("Data").Range("W2:W9")
For i = 0 to 99
wb.Sheets("Tickers").Select
tickers.Offset(i * 1, 0).Select
Set data = Selection
data.Copy
wb.Sheets("Data").Select
Range("D6").PasteSpecial xlPasteValuesAndNumberFormats
issuer_2 = issuer.Offset(i * 1, 0)
Application.Run ("RefreshEntireWorkbook")
CheckData
Next i
End Sub
Sub CheckData()
Set wb = ThisWorkbook 'not sure why I have to do this twice, seems to help the code run
Set hVaR = wb.Sheets("Data").Range("W2:AB9")
Set outputcol = wb.Sheets("Output").Range("A1")
If Application.WorksheetFunction.Countifs(ActiveWorkbook.Sheets("Data"). _
Range("C7").CurrentRegion, "#N/A Requesting Data...") > 0 Then
Application.OnTime (Now + TimeValue ("00:00:01")), "CheckData"
End If
wb.Sheets("Data").Select
hVaR.Select
hVaR.Copy
wb.Sheets("Output").Select
If Application.WorksheetFunction.CountA(Range("A:A")) < 2 Then
outputcol.Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats
Else
outpulcol.End(xlDown).PasteSpecial xlPasteValuesAndNumberFormats
End If
End Sub
如上所述,“hVaR.copy”最终将相同的结果一遍又一遍地粘贴到“输出”选项卡中,即使Application.OnTime方法位于不同的子目录中也是如此。我认为这是因为第一个sub有一个调用第二个sub的循环,其中使用了Application.OnTime方法。我想不出另一种方法来循环遍历各组代码并对它们进行计算。
有没有办法使用For循环遍历800代码并保留随后的计算结果?或者我被BDH()刷新异步并冻结循环中所有代码的事实所困扰?我熟悉通过将其分解为两个子实现刷新的WAPI示例;我还没有找到一个例子,可以每次使用不同的代码刷新数据,然后保存结果。
非常感谢任何和所有建议,谢谢。