2015-11-18 30 views
0

我使用Web查詢從網頁獲取許多表格到Excel。 在網頁的表格中列出這樣在一個Excel Web查詢中獲取多個表格

  • 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,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中。 但花了很長時間,我注意到對於每個webquery,我打開一個新的連接,將數據導入Excel,關閉,移動到下一個,打開連接,將數據導入Excel,關閉...等等17次。但是,高負載,網絡服務器,錯誤和空白頁,有時響應,所以我得到了我的Excel空部件,如:

A1 B1 C1 XX E1 F1 G1 ...

A2 B2 C2 XX E2 F1 G2 ...

我想知道是否可以做任何這些選項,較容易和/或更好:

  1. 從Excel中打開一個連接,並獲取所有數據中循環,然後關閉連接,或
  2. Excel檢測s表示該webquery沒有返回任何數據,因此webquery是空白的,直到它得到的數據,然後移動到下一個查詢,以便它會自動重試該webquery

編輯: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

你有沒有tryed添加轉置?

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

編輯:

我想使用轉和更改

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

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

所以在列,而不是行

+0

請使用示例代碼[鏈接](http://pastebin.com/vjSRXt62)查看我上面的註釋,轉置不是一個選項,我的示例是指表格,而不僅僅是一列數據。我必須每隔17桌移動每張桌子,然後向下移動...... – gxe

+0

@gereqi我編輯澄清(但是,如果我誤解了你的需要,很抱歉) – genespos