Я получаю много таблиц с веб-страницы в Excel с помощью веб-запросов. Таблицы на веб-странице перечислены следующим образом
- A1
- A2
- A3
- A4
- A5
- A6
- A7
- A8
- A9
- A10
- A11
- A12
- A13
- A14
- A15
- A16
- A17
- B1
- B2
- B3
- B4
- B5
- B6
- B7
- B8
- B9
- B10
- B11
- B12
- B13
- B14
- B15
- B16
- B17
- ...
В Excel мне нужно, чтобы они были такими:
A1 B1 C1 D1 E1 F1 G1 ...
A2 B2 C2 D2 E2 F2 G2 ...
Я получаю все эти таблицы, запуская этот код несколько раз, просто меняя веб-таблицы с 1,18,35,52,69... на 2,19,36,53,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 xx E1 F1 G1 ...
A2 B2 C2 xx E2 F1 G2 ...
Мне интересно, можно ли сделать любой из этих вариантов, в зависимости от того, что проще и/или лучше:
- В Excel откройте одно соединение и получите все данные в циклах, затем закройте соединение или
- Excel обнаруживает, что веб-запрос не возвращает никаких данных, поэтому веб-запрос пуст, и поэтому он автоматически повторяет этот веб-запрос, пока не получит данные, а затем переходит к следующему запросу.
EDIT: Графическое представление о том, как таблицы должны быть расположены в одном вызове а>