【问题标题】:Looping Excel VBA Macro that Runs other Macros循环运行其他宏的 Excel VBA 宏
【发布时间】:2013-08-15 16:59:31
【问题描述】:

我正在尝试制作一个 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

【问题讨论】:

    标签: excel vba loops offset


    【解决方案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
    

    【讨论】: