Board logo

標題: [發問] 取出網頁資料會出現指定年月不合 [打印本頁]

作者: dechiuan999    時間: 2014-7-5 18:24     標題: 取出網頁資料會出現指定年月不合

各位大大好:
   
  小弟正在學習如何取得網頁資料。
也引用GBKEE版主大大的語法,並
依指定網頁來取出資料,但出現實際
指定取出的年月卻不合。請問各位大大
小弟應如何修改下列語法呢?

謝謝各位大大!

Sub Ex()

    Dim i As Integer, s As Integer, k As Integer, A, ii, j
    Dim STK_NO As String     '股票代碼 INPUT
    Dim myear As String    '年度 SELECT
    Dim mmon As String     '月份 SELECT
    STK_NO = "2330"
    myear = "102"
    mmon = "5"
   
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/STOCK_DAYMAIN.php"
        Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
        With .document
            For Each A In .getelementsbytagname("INPUT")
                If A.Name = "STK_NO" Then A.Value = STK_NO
            Next
            For Each A In .getelementsbytagname("SELECT")  '己經指定年份,但實際並取得指定年份
                If A.Name = "myear" Then
                    A.Value = True
                        A.Focus
                        Application.Wait Now + #12:00:02 AM#
                        Application.SendKeys "{DOWN}"
                        Application.Wait Now + #12:00:02 AM#
                        Application.SendKeys "{ENTER}"
                        Exit For
                End If
            Next
            
            For Each A In .getelementsbytagname("SELECT")  '己經指定月份,但實際並取得指定月份
                If A.Name = "mmon" Then
                    A.Value = True
                    Application.Wait Now + #12:00:02 AM#
                    Application.SendKeys "{DOWN}"
                    Application.Wait Now + #12:00:02 AM#
                    Application.SendKeys "{ENTER}"
                    Exit For
                 End If
            Next
                    
            For Each A In .getelementsbytagname("INPUT")
                If Trim(A.Value) = "查詢" And A.Name = "login_btn" Then A.Click        '
            Next
        End With
        Application.Wait Now + #12:00:10 AM#
        Set A = .document.getelementsbytagname("table")
        On Error Resume Next
        With ActiveSheet
            .Cells.Clear
            For ii = 1 To A.Length - 1
                For i = 0 To A(ii).Rows.Length - 1      '寫入資料
                k = k + 1
                    For j = 0 To 8
                        Cells(k, j + 1) = A(ii).Rows(i).Cells(j).innerText
                    Next
                Next
            Next
           
        End With
        .Quit        '關閉網頁
    End With
End Sub

謝謝各位大大!
作者: GBKEE    時間: 2014-7-6 15:10

回復 1# dechiuan999
  1. Option Explicit
  2. Sub Ex_個股日成交資訊()
  3.     Dim i As Integer, s As Integer, k As Integer, A As Object, ii, j
  4.     Dim STK_NO As String    '股票代碼 INPUT
  5.    ' Dim myear As String     '年度 SELECT
  6.    ' Dim mmon As String      '月份 SELECT
  7.     STK_NO = "2485"
  8.     With CreateObject("InternetExplorer.Application")
  9.         .Visible = True
  10.         .navigate "http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/STOCK_DAYMAIN.php"
  11.         Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  12.         With .document
  13.             .getelementsbytagname("INPUT")("STK_NO").Value = STK_NO
  14.             .getelementsbytagname("SELECT")("myear").Value = Year(Date)      '2014
  15.             .getelementsbytagname("SELECT")("mmon").Value = Month(Date)      '7 月
  16.             
  17.             '.getelementsbytagname("SELECT")("myear").Value = Year(Date) - 1 '2013
  18.             '.getelementsbytagname("SELECT")("mmon").Value = Month(Date) - 1 '6 月
  19.                     
  20.             .getelementsbytagname("INPUT")("login_btn").Click
  21.         End With
  22.         Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  23.         Do
  24.             Set A = .document.getelementsbytagname("table")
  25.         Loop While A Is Nothing
  26.         If InStr(A(6).innertext, "查無資料:") Then
  27.             MsgBox A(6).innertext
  28.         Else
  29.             With ActiveSheet
  30.                 .Cells.Clear
  31.                 For i = 0 To A(7).Rows.Length - 1      '寫入資料
  32.                     k = k + 1
  33.                     For j = 0 To A(7).Rows(i).Cells.Length - 1
  34.                         .Cells(k, j + 1) = A(7).Rows(i).Cells(j).innertext
  35.                     Next
  36.                 Next
  37.             End With
  38.         End If
  39.         .Quit        '關閉網頁
  40.     End With
  41. End Sub
複製代碼

作者: dechiuan999    時間: 2014-7-6 22:18

回復 2# GBKEE


  版主大大您好:


謝謝您的指點。
小弟對此語法仍有許多疑惑
尚請版主大大明示

Set A = .document.getelementsbytagname("table")
表示設定A物件來取得返回带有指定TABLE標籤名的對象集合。
而語法中有使用到
A(6) 及 A(7)
小弟一直無法悟出其函意為何呢?
作者: GBKEE    時間: 2014-7-7 14:31

回復 3# dechiuan999
  1. Do
  2.             Set A = .document.getelementsbytagname("table")
  3.         Loop While A Is Nothing
  4.         If InStr(A(6).innertext, "查無資料:") Then
  5.             MsgBox A(6).innertext
  6.         Else
  7.             Dim A_Length As Integer
  8.             With ActiveSheet
  9.                 .Cells.Clear
  10.                 k = 1
  11.                 For A_Length = 0 To A.Length - 1
  12.                     
  13.                     '*** A(6) 及 A(7) 小弟一直無法悟出其函意為何呢? ***
  14.                      .Cells(k, "A") = "table.Item  " & A_Length
  15.                     .Cells(k, "A").Interior.Color = vbYellow                    
  16.                     '********************************************
  17.                   
  18.                     For i = 0 To A(A_Length).Rows.Length - 1      '寫入資料
  19.                         k = k + 1
  20.                         For j = 0 To A(A_Length).Rows(i).Cells.Length - 1
  21.                             .Cells(k, j + 1) = A(A_Length).Rows(i).Cells(j).innertext
  22.                         Next
  23.                     Next
  24.                     k = k + 1
  25.                 Next
  26.             End With
  27.         End If
複製代碼

作者: dechiuan999    時間: 2014-7-7 20:48

回復 4# GBKEE


    謝謝版主
小弟已完全了解。

感恩大大!




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