2013-08-15 2 views
0

열 A의 주식 시세 표시기를 사용하여 셀의 다른 "설정"시트에 붙여 넣을 vba 프로그램을 만들려고합니다. 그런 다음 프로그램이 다른 두 vba 과거 데이터를 다운로드하고 내 공식을 다시 테스트하는 코드 그런 다음 프로그램은 "데이터"시트로 돌아가 "설정"의 "B10"에있는 값을 "데이터"의 열 D에 인쇄합니다. 티커의 행에 해당하는 열 d에 인쇄 된 값이 있어야합니다. 프로그램은 500 번 반복해야합니다. 이 코드를 사용하는 방법을 찾거나 내 코드에서 잘못된 점을 지적하도록 도와 줄 수 있습니까? 감사!다른 매크로를 실행하는 루핑 Excel VBA 매크로

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) 

을 그리고 그 코드가 같이 작업을 진행하게됩니다. 그러나 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