- 帖子
- 23
- 主題
- 0
- 精華
- 0
- 積分
- 73
- 點名
- 121
- 作業系統
- XP
- 軟體版本
- Office 2003
- 閱讀權限
- 20
- 註冊時間
- 2012-4-21
- 最後登錄
- 2025-5-16
           
|
24#
發表於 2015-7-27 08:30
| 只看該作者
回復 20# GBKEE
我的是win7 , IE 11 , office2013
跟no3-taco 一樣需要改成 E.all.Length >= IIf(i = 0, 415, 135)
回復 21# no3-taco
後來我改成 Loop Until InStr(1, E.outerHTML, IIf(i = 0, "00638R", "電子類加權股價指數"))比較沒問題
回復 19# jackyq
多謝jackyq大提點,我學習程式的經驗大部分都是網路上Google抓來貼上修改,真正自己寫的不多,確實從沒認真考慮到該如何寫才能讓後續的維護工作更輕鬆,關於這方面的經驗前輩是否可以推薦相關的書籍或網站,還是如果我要用Google搜尋這方面的資料該用什麼樣的關鍵字,謝謝!
關於lcctno大哥所提的問題一開始因為從網頁的原始碼看不到資料,我才想去將JSON資料內容重組來貼,根據jackyq大您的建議我想還是應該以 GBKEE 版主一開始所教用IE來抓取的方式最容易維護,後來我有找到動態產生的網頁原始碼才發現我做了好多白工,只要在貼上工作表前將網頁相關字串內容修改重組就可以讓負號正常顯示出來,下面的程式是用 GBKEE 版主原始碼來做修改,如果有更簡單的方式還希望您們能多指導一下,謝謝!- Option Explicit
- Sub Ex()
- Dim E As Object, AR(), i As Integer, o As Object, k As Integer
- AR = Array("http://www.yuantaetfs.com/#/RtNav/Index", "http://www.yuantaetfs.com/#/Home/Index")
- 'Ar = Array(網址:即時淨值,網址:國內指數) 網址置入陣列
- ActiveSheet.UsedRange.Clear
- For i = 0 To 1
- With CreateObject("InternetExplorer.Application")
- .Visible = True
- .Navigate AR(i)
- Do While .Busy Or .readyState <> 4: DoEvents: Loop
- If i = 0 Then '國內指數:不需按下同意鍵
- Do
- Set E = .Document.getElementByid("Agree")
- Loop Until Not E Is Nothing
- E.Click
- End If
- Do
- Do
- Set E = .Document.getElementsByTagName("TABLE")(21 + i)
- '即時淨值 第21個 "TABLE" ,'國內指數 第22個 "TABLE"
- Loop Until Not E Is Nothing
- 'Loop Until E.all.Length >= IIf(i = 0, 431, 150) '
- Loop Until InStr(1, E.outerHTML, IIf(i = 0, "00638R", "電子類加權股價指數")) '改用相關字串確認是否有資料
-
- '刪除▲ ▼ 符號並加上數字負號顯示
- If 0 = i Then
- For Each o In E.getElementsByClassName("ng-binding upcolor")
- If InStr(1, o.innerText, "▲ ▼") Then
- o.innerHTML = Mid(o.innerText, 5)
- End If
- Next
- For Each o In E.getElementsByClassName("ng-binding downcolor")
- If InStr(1, o.innerText, "▲ ▼") Then
- o.innerHTML = "-" & Mid(o.innerText, 5)
- Else
- o.innerHTML = "-" & o.innerText
- End If
- Next
- Else
- For Each o In E.getElementsByClassName("ChangesText2 downcolor")
- k = InStr(1, o.innerText, "(")
- If 0 < k Then
- o.innerHTML = "-" & Mid(o.innerText, 1, k - 1) & "(-" & Mid(o.innerText, k + 1)
- End If
- Next
- End If
- .Document.body.innerHTML = Replace(E.outerHTML, "<span class=""ng-hide"" ng-show=""o.price == 0"">0</span>", "") ' 去除 [折溢價] 數字後面多餘的0
- '.Document.body.innerHTML = E.outerHTML
- 'Stop
- .ExecWB 17, 2 ' Select All
- .ExecWB 12, 2 ' Copy selection
- With ActiveSheet
- .Range("A" & IIf(i = 0, 1, 27)).Select
- .PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
- With .Range(IIf(i = 0, "D16:D17", "C27:C28")).Interior
- .ColorIndex = 35
- .Pattern = xlSolid
- End With
- End With
- .Quit '關閉網頁
- End With
- Next
- End Sub
複製代碼 |
|