2015-11-18 4 views
0

У меня есть много таблиц с веб-страницы в Excel с помощью веб-запросов. Таблицы в веб-страницы перечислены как этотПолучить несколько таблиц в одном веб-запросе Excel

  • A1
  • A2
  • A3
  • A4
  • A5
  • A6
  • A7
  • A8
  • A9
  • А10
  • А11
  • А12
  • А13
  • А14
  • А15
  • А16
  • А17
  • В1
  • В2
  • В3
  • B4
  • В5
  • В6
  • В7
  • В8
  • В9
  • В10
  • В11
  • В12
  • В13
  • В14
  • В15
  • В16
  • В17
  • ...

В Excel мне нужно, чтобы они были как это:

А1 В1 С1 D1 Е1 F1, G1, ...

А2 В2 C2 D2 E2 F2 G2 ...

Я получаю все эти таблицы, выполняя несколько раз этот код, просто меняя веб-таблицы с 1,18,35,52,69 ... до 2,19,36,5 3,70 ... 3,20,37,54,71 ... до 17,34,51,68,85 ... и диапазон ввода данных от A1 до AE1, BI1 ...:

With ActiveSheet.QueryTables.Add(Connection:="URL;http://domain.com", Destination:=Range("$A$1")) 
    .Name = "table-01" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .WebSelectionType = xlSpecifiedTables 
    .WebFormatting = xlWebFormattingNone 
    .WebTables = _ 
    "1,18,35,52,69,86,103,120,137,154,171,188,205,222,239,256,273,290,307,324,341,358,375,392,409,426,443,460,477,494,511,528,545,562,579,596,613,630,647,664,681,698,715,732,749,766,783,800,817,834" 
    .WebPreFormattedTextToColumns = True 
    .WebConsecutiveDelimitersAsOne = True 
    .WebSingleBlockTextImport = False 
    .WebDisableDateRecognition = True 
    .WebDisableRedirections = False 
    .Refresh BackgroundQuery:=False 
End With 

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

A1 B1 C1 ой E1 F1 G1 ...

A2 B2 C2 хх E2 F1 G2 ...

мне интересно, если это возможно, чтобы сделать какие-либо из этих вариантов, в зависимости от того проще и/или лучше:

  1. из Excel, откройте одно соединение и получить все данные в циклах затем закрыть или
  2. Excel обнаружение s, что веб-запрос не возвращает никаких данных, поэтому веб-запроса является пустым, и поэтому он автоматически повторяет, что веб-запрос до тех пор, пока он получает данные, а затем перейти к следующему запросу

EDIT:Graphical idea of how the tables should be arranged in one call

+0

ВАРИАНТ 1 возможно в различных методах первый экзамен на степень бакалавра Используя объект HTTPXML, его обычно называют «скремблированием». – Jeeped

+0

Вот один. [Ссылка] (http://stackoverflow.com/questions/29723571/post-website-form-data-and-retrieve-results/29724280#29724280). Нажмите на теги [xmlhttp-vba] или [html-parsing] для получения дополнительных примеров. – Jeeped

+0

С HTPXML я получу все данные, но я должен взять table1, table17 ... и поместить их прямо друг под друга, а затем table2, table18 поставить справа и так далее со всеми другими таблицами, я не знаю правильно как их перемещать, потому что у меня нет ссылки, как узнать, когда заканчивается одна таблица и начинается следующий ... – gxe

ответ

0

Вы судимое добавить транспонирование?

With ActiveSheet.QueryTables.Add(Connection:="URL;http://domain.com", Destination:=Range("$A$1")) 
    '... 
    .Transpose = True 
End With 

Edit:

Я думал об использовании транспонирования и изменения

Destination:=Range("$A$1") 

в

Destination:=Range(StartingCell)'where StartigCell is valued to set the first empty row 

так, чтобы все данные в столбцах вместо строк

+0

см. мой комментарий выше с образцом кода [link] (http://pastebin.com/vjSRXt62), транспонирование не является вариантом, в моем примере речь шла о таблицах, а не только о столбце данных. Я должен перемещать каждую таблицу рядом друг с другом каждые 17 таблиц, а затем перемещаться вниз ... – gxe

+0

@gereqi Я отредактировал для уточнения (но извините, если я неправильно понял ваши потребности) – genespos