返回列表 上一主題 發帖

[發問] 查找網站資料

依據EXCEL表中的名稱,利用IE開啟網頁進行查詢

大家好
我想請問要如何透過VBA
查詢以下網頁
http://tmsearch.tipo.gov.tw/TIPO_DR/GoodsIPO.html
我有一個EXCEL的表,裡面有一欄是商品名稱
想請問各位 要如何透過VBA將該欄的名稱依序打入網頁中查詢
並將查詢後的結果(網頁右方)回傳至EXCEL
PS, 我主要是要查詢我EXCEL中的名稱是否有出現在官網中

以上
再麻煩各位幫忙了
謝謝

TOP

可以上傳個「商品名稱欄」範例檔參考看看嗎?
學習VBA

TOP

s90068 您好
商品名稱例如下列
工業用酵素
工業用牛奶發酵劑
液晶
防腐劑
工業用除臭劑
工業用乾燥劑
中和劑
上述商品都可查到

在麻煩您了
謝謝您

TOP

[發問] 查找網站資料

各位好
我利用論壇中之前版大的代碼進行部分修改後
http://forum.twbts.com/viewthread.php?tid=9511
以試圖於下列網站中的左欄輸入特定字串例如"沙拉油"
http://tmsearch.tipo.gov.tw/TIPO_DR/GoodsIPO.html
然後進行查詢,並將查詢後右欄的表格貼回excel中
但是我的代碼卻無法順利輸入"沙拉油"
我的代碼如下
  1. Sub Ex()
  2.     Dim i As Integer, s As Integer, k As Integer, A, ii, j
  3.     Dim txtGoodsName As String, isnew As String, season As String
  4.     txtGoodsName = InputBox("請輸入 公司代號")
  5.        ' If Not IsNumeric(Val(txtGoodsName)) Or Len(txtGoodsName) <> 4 Then Exit Sub              '不是四位數的數字
  6.    ' isnew = InputBox("1:最新資料,2:歷史資料" & vbLf & "請選 1 , 2")
  7.    ' If isnew <> "1" And isnew <> "2" Then Exit Sub                              '沒選1 或 2
  8.    ' If isnew = "2" Then season = InputBox("輸入年度 , 季別" & vbLf & "例 101,01")
  9.                                     '第一季 01,第二季 02第三季 03,第四季 04.
  10.     With CreateObject("InternetExplorer.Application")
  11.         .Visible = True
  12.         .Navigate "http://tmsearch.tipo.gov.tw/TIPO_DR/GoodsIPO.html"
  13.                 Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  14.         With .document
  15.             For Each A In .getelementsbytagname("INPUT")
  16.                             If A.Name = "txtGoodsName" Then A.Value = txtGoodsName
  17.                        Next
  18.           '  For Each A In .getelementsbytagname("SELECT")
  19.            '     If A.Name = "isnew" Then
  20.           '          A.Value = True
  21.             '        If isnew = "2" Then
  22.              '           A.Focus
  23.               '          Application.Wait Now + #12:00:02 AM#
  24.                '         Application.SendKeys "{DOWN}"
  25.                 '        Application.Wait Now + #12:00:02 AM#
  26.                  '       Application.SendKeys "{ENTER}"
  27.                   '  End If
  28.                ' End If
  29.                 'If A.Name = "year" And isnew = "2" Then A.Value = Split(season, ",")(0)
  30.                ' If A.Name = "season" And isnew = "2" Then A.Value = Split(season, ",")(1)
  31.            ' Next
  32.                     For Each A In .getelementsbytagname("INPUT")
  33.                                'If Trim(A.Value) = "搜尋" And A.Name <> "rulesubmit" Then A.Click        '按下[搜索]鍵
  34.                        If Trim(A.Value) = "查詢" Then A.Click         '按下[搜索]鍵
  35.                     Next
  36.             End With
  37.         Application.Wait Now + #12:00:10 AM#                     '等待網頁下載資料
  38.         Set A = .document.getelementsbytagname("table")
  39.         On Error Resume Next       '***有些table沒Rows資料會產生錯誤 不理會它,程式繼續走
  40.         With ActiveSheet
  41.             .Cells.Clear
  42.            '************************
  43.            ' For ii = 0 To A.Length - 1        '不知道table範圍在何處: 從0開始
  44.            '******************************
  45.             For ii = 11 To A.Length - 1        ''從11開始 用 Debug.Print ii  找出所要資料的table範圍
  46.                 For i = 0 To A(ii).Rows.Length - 1      '寫入資料
  47.                 'Debug.Print ii  可找出所要資料的 table 範圍
  48.                 k = k + 1
  49.                 For j = 0 To 5
  50.                     Cells(k, j + 1) = A(ii).Rows(i).Cells(j).innerText
  51.                 Next
  52.             Next
  53.             Next
  54.             .Range("C5").Cut Range("D5")
  55.             With .Range("B5:C5,D5:E5")
  56.                 .HorizontalAlignment = xlCenter
  57.                 .VerticalAlignment = xlCenter
  58.                 .Merge
  59.             End With
  60.         End With
  61.        '.Quit        '關閉網頁
  62.     End With
  63. End Sub
複製代碼
想請各位幫忙看看
謝謝~

各位好
我利用下列程式 貌似可將值send 到網站上,但是我不知道該如何把網站的資料抓回來
不知道是否有人能幫我看看
  1. Sub jdj()
  2. Dim xmlhttp As Object
  3. Set xmlhttp = CreateObject("msxml2.xmlhttp.3.0")
  4. xmlhttp.Open "post", " http://tmsearch.tipo.gov.tw/TIPO_DR/servlet/InitGoodsIPOResult", False
  5. xmlhttp.send " txtGoodsName=%A8F%A9%D4&txtGoodsID=&hdnGoodsNameLabel=%B0%D3%AB%7E%28%AAA%B0%C8%29%A6W%BA%D9&hdnGoodsIDLabel=%B0%D3%AB%7E%28%AAA%B0%C8%29%B2%D5%B8s%A5N%BDX"
  6. If xmlhttp.readystate = 4 Then
  7. MsgBox "done"
  8. end if
  9. end sub
複製代碼
謝謝

TOP

回復 5# ciboybj
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim D  As Object, e As Object, URL As String
  4.     '工業用酵素
  5.     '工業用牛奶發酵劑
  6.     '液晶
  7.     '防腐劑
  8.     '工業用除臭劑
  9.     '工業用乾燥劑
  10.     '中和劑
  11.     URL = "http://tmsearch.tipo.gov.tw/TIPO_DR/GoodsIPOContent.jsp"
  12.     With CreateObject("InternetExplorer.Application")
  13.         .Navigate URL
  14.         .Visible = True
  15.          Do While .ReadyState <> 4 Or .Busy
  16.             DoEvents
  17.         Loop
  18.         Set D = .document.all(6).all(0).contentWindow.frames.document.getElementsByTagName("INPUT")
  19.         D("txtGoodsName").Value = "中和劑"
  20.         For Each e In D
  21.             If e.Value = "查詢" Then e.Click: Exit For
  22.         Next
  23.         Do While .ReadyState <> 4 Or .Busy
  24.             DoEvents
  25.         Loop
  26.         Set D = .document.LastChild.LastChild.all(1).contentWindow.frames.document.getElementsByTagName("table")
  27.         Ep D(0).outerHTML
  28.         .Quit
  29.     End With
  30. End Sub
  31. Private Sub Ep(S As String)
  32.     With CreateObject("InternetExplorer.Application")
  33.         .Navigate "about:Tabs"
  34.         .Visible = True
  35.        .document.body.innerhtml = S
  36.         .ExecWB 17, 2       '  Select All
  37.         .ExecWB 12, 2       '  Copy selection
  38.         With ActiveSheet
  39.             .Cells.Clear
  40.             .Range("A1").Select
  41.             .PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
  42.         End With
  43.         .Quit
  44.     End With
  45. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

GBKEE 您好
我在win 7 excel 2010 下執行時
出現執行階段錯誤438
偵錯指向下列程式碼
Set D = .document.LastChild.LastChild.all(1).contentWindow.frames.document.getElementsByTagName("table")
想請問您這要怎麼解決
ps 我另外在win xp excel2003中測試成功

再請您幫忙
謝謝您

TOP

回復 8# ciboybj
物件不支援此屬性或方法 (錯誤 438)
不好意思我只有2003版.無法替你修正

請修改6#的程式碼
   
  1. Dim IE As Object
  2.     Set IE = CreateObject("InternetExplorer.Application")
  3.     With IE
  4.     'With CreateObject("InternetExplorer.Application")
複製代碼

有錯誤時 請到如圖 IE物件找找 "table" 在哪裡


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

TOP

本帖最後由 joey0415 於 2014-8-6 21:15 編輯
回復  ciboybj
試試看
GBKEE 發表於 2014-8-5 06:27



寫的真好!請問超版

Set D = .document.all(6).all(0).contentWindow.frames.document.getElementsByTagName("INPUT")

這句話的意思是有六個INPUT中的第一個子視窗將它設為物件嗎?

如果是的話,那下面這句
Set D = .document.LastChild.LastChild.all(1).contentWindow.frames.document.getElementsByTagName("table")
將右邊的TABLE的設為物件嗎?

左邊的叫.all(6).all(0).contentWindow.frames

右邊的叫.LastChild.LastChild.all(1).contentWindow.frames

為什麼右邊的不叫Set XXX = .document.all(1).all(0).contentWindow.frames.document.getElementsByTagName("table")

而且說上面的不是物件呢?是沒有還是寫錯呢?

請版主解說一下好嗎?還是有哪一個網頁可以參考!謝謝

TOP

回復 8# ciboybj
找了一下2010版 試試看可改成如下
  1. ' Set D = .document.LastChild.LastChild.all(1).contentWindow.frames.document.getElementsByTagName("table")
  2.         Set D = .document.all(6).all(1).contentWindow.frames.document.getElementsByTagName("table")
複製代碼
回復 10# joey0415
Set D = .document.all(6).all(0).contentWindow.frames.document.getElementsByTagName("INPUT")
解釋如下
.document->HTML的[文件物件]
.All->document的element [元素集合]
all(6):排行第6位(下限索引值從0 開始)的[元素];.all(0)排行第0的[元素];  
contentWindow屬性是指指定的frame或者iframe所在的window物件
getElementsByTagName("INPUT")->元素中的TagName為"INPUT"的集合物件
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 人的眼睛長在前面,只看到別人的缺點,絲毫看不到自己的缺點。
返回列表 上一主題