Board logo

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

作者: justintoolbox    時間: 2015-9-8 11:38     標題: 代碼應該如何修正, 才能將日期填到網頁中?

各位前輩們大家好,
因不擅於網頁操控,目前遇到問題如下:
利用底下的方法無法將我想要的數值(例如年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
複製代碼

作者: GBKEE    時間: 2015-9-9 10:38

回復 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
複製代碼

作者: justintoolbox    時間: 2015-9-9 15:35

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


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

剛剛立刻測試...
只是....出了問題如下:
[attach]21934[/attach]
[attach]21935[/attach]

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

會不會是64bit關係所致?
懇請GBKEE版主指導~感謝。
作者: justintoolbox    時間: 2015-9-9 20:15

回復 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, 感恩!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)