返回列表 上一主題 發帖

[發問] 無法用外部資料匯入的網站能用VBA讀取資料嗎?

[發問] 無法用外部資料匯入的網站能用VBA讀取資料嗎?

近日在做一些追縱研究,需要定期到下面網站讀取所有公司的名稱、地址和地址類型
https://eservices.customs.gov.hk/MSOS/wsrh/001s1?searchBy=B

我試過用「外部資料匯入」和錄製巨集來處理,但EXCEL看來讀不到那些TABLE的資料。
請問VBA能夠處理嗎?謝謝大家。

本帖最後由 GBKEE 於 2014-6-23 09:43 編輯

回復 11# 小俠客
  1. '網頁搜尋結果: 0 記錄
  2. Option Explicit
  3. Sub IE下一頁()
  4.     Dim url As String, a As Object, Table As Object, i As Integer, pubSrch As Object, Pages As Integer
  5.     Dim Sh As Worksheet, B As String, E
  6.     Set Sh = ActiveSheet
  7.     Sh.Cells.Clear
  8.     '************************************
  9.     url = "https://eservices.customs.gov.hk/MSOS/wsrh/001s1?"  
  10.    'url = "https://eservices.customs.gov.hk/MSOS/wsrh/001s1?"searchBy=A"  '網頁有資料
  11.     '************************************
  12.     With CreateObject("InternetExplorer.Application")
  13.         .Visible = True     '  是否顯示 IE
  14.         .Navigate url
  15.         Do While .ReadyState <> 4 Or .Busy
  16.             DoEvents
  17.         Loop
  18.         Do
  19.             Set a = .Document.getElementsByTAGName("TD")
  20.         Loop Until Not a Is Nothing 'And a.Length = 84
  21.         On Error Resume Next
  22.         With Sh
  23.             For i = 0 To a.Length - 1
  24.                 .Cells(i + 1, "A") = i
  25.                 .Cells(i + 1, "B") = a(i).Type
  26.                 .Cells(i + 1, "C") = a(i).ID
  27.                 .Cells(i + 1, "D") = a(i).InnerText
  28.                 .Cells(i + 1, "E") = a(i).Value
  29.             Next
  30.             
  31.         End With
  32.         
  33.         .Quit
  34.     End With
  35.     MsgBox "getElementsByTAGName(""TD"") 合計 " & a.Length
  36. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  小俠客 Set A = .Document.getElementsByTAGName("TD")
不放在 Do   Loop 迴圈也可以,
但因網頁資料 ...
GBKEE 發表於 2014-6-20 21:03


原來如此,因為我是用「逐行執行」的方式研究代碼,所以比較沒有這個問題,實際運行確需要作這個checking。
那麼a.length = 84又是甚麼意思?

A = 「返回帶有TD標簽名的對象集合」
A.Length 是指這個集合的總數
但我參考 「Private Sub 網頁的元素()」
我發現只有54個TD ......

TOP

回復 9# 小俠客
  1. Do
  2.             Set A = .Document.getElementsByTAGName("TD")
  3.         Loop Until Not A Is Nothing And A.Length = 84
  4.         MsgBox A.Length  '可看看倒底是多少
複製代碼
Set A = .Document.getElementsByTAGName("TD")
不放在 Do   Loop 迴圈也可以,
但因網頁資料下載速度比程式速度執行慢,導致  A Is Nothing
只得用  Do   Loop  直到 Not A Is Nothing
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  小俠客





檔案下載後,如圖示匯入 表單
GBKEE 發表於 2014-6-14 16:47



    經過數天的研究,我開始有點了解
但我對大大之前提供的代碼仍然不太清晰,可以請你稍作解譯嗎?
  1.         Do
  2.             Set A = .Document.getElementsByTAGName("TD")
  3.         Loop Until Not A Is Nothing And A.Length = 84
複製代碼
我查到getElementsByTAGName("TD")是指「返回帶有指定標簽名的對象集合」
即是A = 「返回帶有TD標簽名的對象集合」
A.Length 是指這個集合的總數
但我參考 「Private Sub 網頁的元素()」
我發現只有54個TD ,為什麼大大會寫84?(A.length真的是84,只是我不明白為何是84,而且如何得知是84)

另外,如果我們是希望從"TD"集合中找出 A(i).ID = "grid-table-pubSrch_center"
  1.         Do
  2.             Set A = .Document.getElementsByTAGName("TD")
  3.         Loop Until Not A Is Nothing And A.Length = 84
複製代碼
可不可以寫成
  1. Set A = .Document.getElementsByTAGName("TD")
複製代碼
因為我不太明白這個LOOP的作用
謝謝大大指教

TOP

本帖最後由 GBKEE 於 2014-6-14 20:44 編輯

回復 7# 小俠客
把網頁上的資料當成FORM來讀取


Ex.rar (2.21 KB)


檔案下載後,如圖示匯入 表單



感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  小俠客
1) "FM20.DLL" 是Microsoft Forms 2.0 Object Library ,但如果我想了解它的功能和使用方便 ...
GBKEE 發表於 2014-6-12 08:33




有點弄不清楚,版大可否簡介「Microsoft Forms 2.0 Object Library」在此程式的作用?
是把網頁上的資料當成FORM來讀取嗎?

TOP

回復 5# 小俠客
1) "FM20.DLL" 是Microsoft Forms 2.0 Object Library ,但如果我想了解它的功能和使用方便,應該如何入手?
Private Sub Ep(Sh As Worksheet, S As String)
  Dim D As New DataObject ,VBA中要引用項目Microsoft Forms 2.0 Object Library
活頁簿 中只要有使用到 MSForms的控制項 VBA都會自動地引用Microsoft Forms 2.0 Object Library

2) "grid-table-pubSrch_center"、"next_grid-table-pubSrch",這些keyword是如何找出來?我在原始檔找不到......
請參考 Private Sub 網頁的元素()

3) 我對CreateObject("InternetExplorer.Application")的操作不了解,有沒有相關資料可以參考?
Google CreateObject("InternetExplorer.Application") 看看
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 小俠客 於 2014-6-10 14:19 編輯

對不起,關於GBKEE大分享的CODING,我有些疑問:

1) "FM20.DLL" 是Microsoft Forms 2.0 Object Library ,但如果我想了解它的功能和使用方便,應該如何入手?

2) "grid-table-pubSrch_center"、"next_grid-table-pubSrch",這些keyword是如何找出來?我在原始檔找不到......

3) 我對CreateObject("InternetExplorer.Application")的操作不了解,有沒有相關資料可以參考?

謝謝大家
謝謝。

TOP

本帖最後由 小俠客 於 2014-6-10 12:08 編輯

謝謝GBKEE大大,好像已經可以了!
太利害,我再試試看。
代碼有很多看不懂的東西,希望仔細看後能弄清楚當中原理,謝謝。

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題