我正在尝试创建一个vba程序,将A列中的股票代码并将其粘贴到单元格中的不同“设置”表单上,然后程序将执行另外两个vba代码,用于下载历史数据并回测我的式。然后程序将返回“数据”表并将“设置”中“B10”的值打印到“数据”中的D列。我需要打印的值在列d中对应于自动收报机的行。该计划必须重复500次。你能帮我找到如何做到这一点或指出我的代码有什么问题吗?谢谢!
Sub finalbalance()
Dim ticker As Range
Dim i As Long
Sheets("results").Activate
Set ticker = ActiveCell
For i = 1 To 500
Sheets("results").Activate
ticker.Select
Selection.Copy
Sheets("Settings").Select
Range("B1").Select
ActiveSheet.Paste
Application.Run "datadownload"
Application.Run "btest"
ticker.Offset(0, 3) = Sheets("settings").Range("B10")
ticker.Address = ticker.Offset(1, 0)
Next i
End Sub
答案 0 :(得分:1)
问题是您无法为.Address属性赋值:
'Instead of
ticker.Address = ticker.Offset(1, 0)
'Use:
Set ticker = ticker.offset(1, 0)
这将使您的代码按原样运行。但是,select语句确实不是必需的,应该避免。这是代码的清理版本:
Sub finalbalance()
Dim wsResults As Worksheet
Dim wsSettings As Worksheet
Dim rngStartCell As Range
Dim arrResults() As Variant
Dim lNumReps As Long
Dim i As Long
Set wsResults = Sheets("Results")
Set wsSettings = Sheets("Settings")
Set rngStartCell = wsResults.Range("A2")
lNumReps = 500
ReDim arrResults(1 To lNumReps)
For i = 1 To lNumReps
wsSettings.Range("B1").Value = rngStartCell.Offset(i - 1).Value
Application.Run "datadownload"
Application.Run "btest"
arrResults(i) = wsSettings.Range("B10").Value
Next i
rngStartCell.Offset(, 3).Resize(lNumReps).Value = Application.Transpose(arrResults)
End Sub