返回列表 上一主題 發帖

[發問] 代碼應該如何修正, 才能將日期填到網頁中?

[發問] 代碼應該如何修正, 才能將日期填到網頁中?

各位前輩們大家好,
因不擅於網頁操控,目前遇到問題如下:
利用底下的方法無法將我想要的數值(例如年103)帶入網頁中.

代碼應該如何修正就能克服這問題?
感謝各位前輩們指導.
  1. Sub Ex()
  2. Dim my_url, B
  3. my_url = "http://mops.twse.com.tw/server-java/t13sa150_otc?step=0"
  4. With CreateObject("InternetExplorer.Application")
  5. .Visible = True
  6. .navigate my_url
  7. Do While .Busy Or .readyState <> 4: DoEvents: Loop
  8. For Each B In .document.getElementsByTagName("SELECT")
  9.     If B.Name = "years" Then B.Value = 103
  10. Next
  11. End With
  12. End Sub
複製代碼

回復 1# justintoolbox
試試看
  1. Option Explicit
  2. Sub 網頁_contentWindow()
  3. Dim my_url As String, xDate As String, E As Object, b As Object, i As Integer, R As Integer
  4. my_url = "http://mops.twse.com.tw/server-java/t13sa150_otc?step=0"
  5. With CreateObject("InternetExplorer.Application")
  6.    ' .Visible = True
  7.     .Navigate my_url
  8.     Do While .Busy Or .readyState <> 4: DoEvents: Loop
  9.     Set E = .Document.ALL(4).contentWindow.Document  '這網頁輸入元素在這裡
  10.     Set b = E.getElementsByTagName("SELECT")
  11.     my_url = ""
  12.     For i = 1 To b("bcode").Length
  13.         my_url = my_url & " " & i & b("bcode")(i - 1).innerText & vbLf
  14.         '讀取分類項目的內容
  15.     Next
  16.    
  17.     Do
  18.         i = Val(InputBox(my_url, , 1)) '分類項目的選擇
  19.         If i = 0 Then
  20.             If MsgBox("分類項目 沒有選擇" & vbLf & "離開 程式?", vbYesNo) = vbYes Then
  21.                 GoTo Exx
  22.             End If
  23.         End If
  24.     Loop Until i > 0 And i <= b("bcode").Length
  25.     Do
  26.         xDate = Application.InputBox(Date, "請輸入日期", Date) '資料日期 輸入
  27.         If Not IsDate(xDate) Then
  28.             If MsgBox("資料日期 輸入錯誤" & vbLf & "離開 程式?", vbYesNo) = vbYes Then
  29.                 GoTo Exx
  30.             End If
  31.         End If
  32.     Loop Until IsDate(xDate)
  33.     xDate = CDate(xDate)                                '轉為日期型態
  34.     b("bcode").selectedIndex = i - 1                    '分類項目
  35.     b("years").selectedIndex = Year(Date) - Year(xDate) '年度
  36.     b("months").selectedIndex = Month(xDate) - 1        '月份
  37.     b("days").selectedIndex = Day(xDate) - 1            '日期
  38.     For Each b In E.getElementsByTagName("INPUT")
  39.         If b.Type = "submit" Then b.Click
  40.     Next
  41.     Do While .Busy Or .readyState <> 4: DoEvents: Loop
  42.     '**** 作法1
  43.    ' Set E = .Document.ALL(5).contentWindow.Document  '這網頁查詢資料在這裡
  44.    'Set E = E.getElementsByTagName("table")(0)
  45.     'Ep E.outerHTML               '網頁資料文字
  46.     '******************
  47.     '**** 作法2
  48.     Set E = .Document.ALL(5).contentWindow.Document  '這網頁查詢資料在這裡
  49.     Set E = E.getElementsByTagName("table")(0).Rows
  50.     With Sheets(2)
  51.         .UsedRange.Clear
  52.         For Each b In E
  53.             For i = 0 To b.Cells.Length - 1
  54.                 .Cells(R + 1, i + 1) = b.Cells(i).innerText
  55.             Next
  56.             R = R + 1
  57.        Next
  58.     End With
  59. Exx:
  60.     .Quit
  61. End With
  62. MsgBox "ok"
  63. End Sub
  64. Sub Ep(S As String)
  65.     With CreateObject("InternetExplorer.Application")
  66.         .Navigate "about:Tabs"
  67.      '   .Visible = True
  68.         .Document.body.innerHTML = S
  69.         .ExecWB 17, 2       '  Select All
  70.         .ExecWB 12, 2       '  Copy selection
  71.         With Sheets(1)
  72.             .UsedRange.Clear
  73.             .Range("A1").Select
  74.             .PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
  75.         End With
  76.         .Quit
  77.     End With
  78. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  justintoolbox
試試看
GBKEE 發表於 2015-9-9 10:38


非常感謝GBKEE挺力幫忙!太感謝.

剛剛立刻測試...
只是....出了問題如下:



我的系統是
Win8.1 64bit
EXCEL 2010 64bit
IE11

會不會是64bit關係所致?
懇請GBKEE版主指導~感謝。

TOP

[版主管理留言]
  • GBKEE(2015/9/10 13:59): 舊版Ie8的VBA程式碼,不能在新版Ie中一式到底,真傷腦筋.

回復 3# justintoolbox

GBKEE大,
問題解決了,參考先前的文章(http://forum.twbts.com/viewthrea ... p;extra=&page=1
瞭解一些概念後
自行把 Set E = .Document.ALL(4).contentWindow.Document改成 Set E = .Document.ALL(3).contentWindow.Document
就可以了!

太感謝 超級版主 GBKEE, 感恩!

TOP

        靜思自在 : 【時間無法遮擋】怕時間消逝,花了許多心血,想盡各式方法要遮擋時間,結果是:浪費了更多時間,且一無所成!
返回列表 上一主題