2013-08-15 4 views
0

Я пытаюсь создать программу vba, которая будет использовать биржевой тикер в столбце A и вставить его на другом листе «настройки» в ячейке, после чего программа выполнит два других vba коды, которые скачивают исторические данные и проверяют мою формулу. Затем программа вернется в лист данных и напечатает значение в «B10» в «настройках» в столбце D в «данных». Мне нужно, чтобы напечатанное значение находилось в столбце d, соответствующем строке тикера. Программа должна повторяться 500 раз. Можете ли вы помочь мне найти, как это сделать или указать, что не так в моем коде? Благодаря!Looping Excel VBA Macro, который запускает другие макросы

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 

ответ

1

Проблема заключается в том, вы не можете присвоить значение свойству .Address:

'Instead of 
ticker.Address = ticker.Offset(1, 0) 

'Use: 
Set ticker = ticker.offset(1, 0) 

И получите ваш код работает как. Однако инструкции выбора действительно не нужны и их следует избегать. Вот очищенная версия кода:

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