2016-02-01 2 views
0

У меня есть макрос Excel для анализа данных, извлеченных с веб-страницы. Я изучаю качество воды и запускаю сеть мониторинга. На этих объектах у меня есть автоматические пробоотборники воды, которые срабатывают во время штормов.Переработка существующего макроса в цикл for

Я использую этот макрос для вывода дескриптивных данных с нашего сайта. Он был первоначально настроен статически, создавая новый лист для каждого сайта (всего 9 сайтов), а код длинный и повторяющийся. Я хочу переписать его, используя цикл for, чтобы иметь относительно небольшой объем кода, который выполняется для каждого сайта, и возвращает ту же информацию в том же формате, который у меня уже установлен.

Существует несколько частей оригинального сценария, которые по существу жестко закодированы для каждого сайта, поскольку они имеют имя и номер сайта.

  • Я хочу, чтобы номера и имена сайтов заменялись новым, каждый раз, когда цикл for проходит.

У меня есть веб-URL в коде, что одинаково для каждого сайта, за исключением номера сайта в конце.

  • Как я могу сохранить это как URL-адрес, но заменять номер сайта во время каждой итерации цикла?
  • Как определить свой список номеров и имен сайтов?

Старый макрос начинается с создания листа («sheet1»). Select ... и затем пробегает остальную часть кода. Следующий сайт жестко, как лист («Лист2»). Выберите и т.д.

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

Ниже приведен пример кода, я работаю с:

Workbooks.Add 

Worksheets.Add().Name = "Rivers Ridge Summary" 

Worksheets.Add().Name = "Sheppard Data" 
Worksheets.Add().Name = "Sheppard Summary" 
Worksheets.Add().Name = "Lucas Creek Data" 
Worksheets.Add().Name = "Lucas Creek Summary" 
Worksheets.Add().Name = "Ramsgate Data" 
Worksheets.Add().Name = "Ramsgate Summary" 
Worksheets.Add().Name = "Professional Place Data" 
Worksheets.Add().Name = "Professional Place Summary" 


Sheets("Sheet1").Select 
Sheets("Sheet1").Name = "Rivers Ridge Data" 
Sheets("Rivers Ridge Data").Select 
With ActiveSheet.QueryTables.Add(Connection:= _ 
    "URL;http://waterdata.usgs.gov/va/nwis/uv?cb_72199=on&cb_63680=on&cb_99234=on&format=rdb&period=1&site_no=0204279245" _ 
    , Destination:=Range("$A$1")) 
    .Name = _ 
    "uv?cb_72199=on&cb_63680=on&cb_99234=on&format=rdb&period=1&site_no=0204279245" 

... и т.д.. и т.д .. все остальное код здесь .. а затем на следующий сайт

Sheets("Sheppard Data").Select 

With ActiveSheet.QueryTables.Add(Connection:= _ 
    "URL;http://waterdata.usgs.gov/va/nwis/uv?cb_72199=on&cb_63680=on&cb_99234=on&format=rdb&period=1&site_no=0204289989" _ 
    , Destination:=Range("$A$1")) 
    .Name = _ 
    "uv?cb_72199=on&cb_63680=on&cb_99234=on&format=rdb&period=1&site_no=0204289989" 

..followed всеми кода ... и так далее для каждого сайта ..

«реки Ridge Data "- это один сайт (Шеппард - другой), а« 0204279245 »- номер сайта. Я хочу, чтобы они переключались во время каждой итерации цикла.

Обратите внимание, если вам нужна дополнительная информация или образец того, над чем я работаю.

+0

пожалуйста, вы можете разделить его на несколько пункта вместо одного? – manetsus

+0

Вам нужно показать код, с которым вам нужна помощь. – Davesexcel

+0

Вы можете запустить 'Для каждой петли' следующим образом:' Для каждого xSht In Sheets (Array («Sheet1», «Sheet2», ...)), тогда вы можете использовать 'xSht' в качестве замены для' листов («sheet ***») 'like' Sheets («Sheet ***»). Select' становится 'xSht.Select';) –

ответ

0

Я бы предложил использовать вкладку настройки с двумя столбцами, именем сайта и номером сайта. Затем вы можете пройти через этот список. В цикле вы можете создать данные и сводные листы, а затем объединить число в веб-адрес. Это может выглядеть примерно так.

Sub CollectAndReport() 
Dim sWeb as string, sWeb2 as string 
Dim i as integer 
Dim sName as String 

sWeb="www.google.com" 

For i =2 to 10 
sName = Sheets("Setup").Range("A"&i).Value 
Worksheets.add sName 
sWeb2 = sWeb & Sheets("Setup").("B"& i).Value 

... ваш другой код здесь

Next i End Sub

Смежные вопросы