2016-04-25 14 views
0

Я пытаюсь редактировать код VBA. Я настроил его для своих нужд, но в настоящее время он повторяет тот же процесс более 20 раз, и я в основном ввел код 20 раз и изменил переменные.Я хотел бы запустить цикл, но изменить 2 переменных каждый экземпляр

У меня скорее всего будет до 100 экземпляров, и я не хочу вручную это делать. Как я могу отредактировать этот код, чтобы он выполнялся 100 раз при изменении переменных?

Как вы видите, я включил один и тот же код дважды с небольшими изменениями. Мне нужно было бы изменить тикер и диапазон для каждой итерации, а также для целевого диапазона потребуется переместить 1 столбец за каждый раз.

Кстати, это для того, чтобы вытащить информацию о финансах Yahoo.

Sub Data_Get() 
' 
' Data_Get Macro 
' 
Dim ticker1, ticker2, ticker3 As String, sday, smonth, syear, eday, emonth, eyear As Long 

ticker1 = Range("L1") 
ticker2 = Range("L2") 
ticker3 = Range("L3") 

sday = Day(Range("L4")) 
smonth = Month(Range("L4")) - 1 
syear = Year(Range("L4")) 
eday = Day(Range("L5")) 
emonth = Month(Range("L5")) - 1 
eyear = Year(Range("L5")) 

' 
With ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;http://real-chart.finance.yahoo.com/table.csv?s=" & ticker1 & "&d=" & emonth & "&e=" & eday & "&f=" & eyear & "&g=d&a=" & smonth & "&b=" & sday & "&c=" & syear & "&ignore=.csv" _ 
    , Destination:=Range("$A$1")) 
    .Name = "data" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 437 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = True 
    .TextFileTabDelimiter = True 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(5, 9, 9, 9, 9, 9, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 
End With 

With ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;http://real-chart.finance.yahoo.com/table.csv?s=" & ticker2 & "&d=" & emonth & "&e=" & eday & "&f=" & eyear & "&g=d&a=" & smonth & "&b=" & sday & "&c=" & syear & "&ignore=.csv" _ 
    , Destination:=Range("$C$1")) 
    .Name = "data2" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 437 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = True 
    .TextFileTabDelimiter = True 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 
End With 
End Sub 

ответ

0

Сделайте что-то вроде следующего ...

Dim i as long, nIter as long 
' calculate the number iterations here, using your calcuation 
nIter = 100 

' do the same job repeatedly 
for iLoop = 1 to nIter 

' put the code you want to repeat in here 
' if you want to move down in a range every iteration, one possible way is as follows... 
ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;http://real-chart.finance.yahoo.com/table.csv?s=" & ticker1 & _ 
     "&d=" & emonth & "&e=" & eday & "&f=" & eyear & "&g=d&a=" & smonth & _ 
     "&b=" & sday & "&c=" & syear & "&ignore=.csv" _ 
     , Destination:=Range("$A$1").Offset(iLoop-1,0)) 

next iLoop 
+0

Спасибо! Так много! Я сделал эту работу, но моя последняя проблема заключается в том, что у меня есть информация в строке 1 по каждому списку, но когда я запускаю ее, она создает новые столбцы и перемещает вещи в верхней строке. Как я могу это предотвратить? – Namelessandroid

+0

Взгляните на [MS Documentation] (https://msdn.microsoft.com/EN-US/library/office/ff839455.aspx). Я думаю, вы должны использовать 'xlInsertEntireRows' вместо' xlInsertDeleteCells' – OldUgly