返回列表 上一主題 發帖

[發問] 集保戶股權分散表查詢 抓每週資料

回復 2# espionage

試試看
  1. Sub Ex() '集保戶股權分散表查詢
  2.     Dim element As Object, i As Integer, k As Integer, J As Integer, jj As Integer, s As Integer
  3.     With CreateObject("InternetExplorer.Application")
  4.         .Visible = True
  5.         .Navigate "http://www.tdcc.com.tw/smWeb/QryStock.jsp"
  6.         Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  7.         With .Document
  8.             '.ALL("SqlMethod")(0).Checked = True    '勾選:證券代號
  9.            ' .All("StockNo").Value = "1101"
  10.             .ALL("SqlMethod")(1).Checked = True     '勾選:證券名稱
  11.             .ALL("StockName").Value = "聯電"
  12.             '.ALL("SCA_DATE").SELECTEDINDEX = 0     '第1個日期
  13.             .ALL("SCA_DATE").SELECTEDINDEX = 2      '第3個日期
  14.             .ALL("sub").Click                       '按下查詢鍵
  15.         End With
  16.         Do While .Busy Or .ReadyState <> 4          '等候網頁下載完畢
  17.             DoEvents
  18.             Application.SendKeys "~", True          '按 ENTER 按鍵 ,預防 "證券代號"有錯誤
  19.          Loop
  20.         Set element = .Document.getelementsbytagname("table")  '取得網頁資料區塊
  21.         If element.Length < 7 Then
  22.             MsgBox "證券代號  ??": Exit Sub
  23.         End If
  24.         With Sheets(1)
  25.             .Cells.Clear
  26.             k = k + 1
  27.             For s = 5 To 7                   '已找出網頁的table內容在 5-7 中
  28.                 For i = 0 To element(s).Rows.Length - 1                 '資料的列位
  29.                     For jj = 0 To element(s).Rows(i).Cells.Length - 1   '資料的欄位
  30.                         .Cells(k, jj + 1) = element(s).Rows(i).Cells(jj).INNERTEXT
  31.                     Next
  32.                     k = k + 1
  33.                 Next
  34.             Next
  35.         End With
  36.       '  .Quit  '關閉IE
  37.     End With
  38. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

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

TOP

回復 6# espionage
修改一下看看
  1. Do While .Busy Or .ReadyState <> 4          '等候網頁下載完畢
  2.             DoEvents
  3.             Application.SendKeys "~", True          '按 ENTER 按鍵 ,預防 "證券代號"有錯誤
  4.         Loop
  5.         Do
  6.             Set element = .Document.getelementsbytagname("table")  '取得網頁資料區塊
  7.         Loop Until Not element Is Nothing
  8.         MsgBox element.Length
  9.         Stop
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2015-9-15 05:56 編輯

回復 8# espionage
我只有Ie8沒這問題, Ie8 中element 的 Length =9
請有比Ie8新版的會員,看看問題在哪裡.
  1. Application.VBE.Windows("區域變數").Visible = True '請再加上
  2.     Stop  '程式停下來
  3.     '如7#的圖可以看看你的 "區域變數"視窗 中  element 的 Length 是多少
複製代碼
或是
  1. Application.Wait #12:00:05 AM#    '在程式中'等候5秒
  2.         Set element = .Document.getelementsbytagname("table")  '取得網頁資料區塊
  3.         Stop  '程式停下來,看 "區域變數"視窗 中  element 的 Length 是多少
  4.         With Sheets(1)
  5.             .Cells.Clear
  6.         
複製代碼
或是用WEB查詢
  1. Sub Ex() '集保戶股權分散表_WEB查詢
  2.     Dim Ar(), a, i As Integer, strDate As String, stkno As String, Qur As String
  3.     With CreateObject("InternetExplorer.Application")
  4.         .Navigate "http://www.tdcc.com.tw/smWeb/QryStock.jsp"
  5.         Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  6.         Set a = .Document.ALL.tags("option") '資料日期的內容
  7.         ReDim Ar(a.Length - 1)
  8.         For i = 0 To a.Length - 1
  9.             Ar(i) = a(i).innerHTML
  10.         Next
  11.         .Quit
  12.     End With
  13.     strDate = Ar(0) '導入當月日期
  14.     Do
  15.         strDate = InputBox(Join(Ar, vbTab), "集保戶股權分散表查詢 之 有效日期", strDate)
  16.         If strDate = "" Then Exit Sub
  17.      
  18.     Loop Until IsNumeric(Application.Match(strDate, Ar, 0))
  19.     stkno = InputBox("輸入股票代號", "股票代號", 2317)    '
  20.     If stkno = "" Then Exit Sub
  21.     Qur = "http://www.tdcc.com.tw/smWeb/QryStock.jsp?SCA_DATE=" & strDate & "&SqlMethod=StockNo&StockNo=" & stkno & "&StockName=&sub=%ACd%B8%DF"
  22.     With ActiveSheet
  23.         If .QueryTables.Count = 0 Then
  24.             .QueryTables.Add "URL;" & Qur, .[A1]
  25.         Else
  26.             .QueryTables(1).Connection = "URL;" & Qur
  27.         End If
  28.         With .QueryTables(1)
  29.             .WebSelectionType = xlSpecifiedTables
  30.             .WebFormatting = xlWebFormattingNone
  31.             .WebTables = "6,7,8"
  32.             .WebPreFormattedTextToColumns = True
  33.             .WebConsecutiveDelimitersAsOne = True
  34.             .WebSingleBlockTextImport = False
  35.             .WebDisableDateRecognition = False
  36.             .WebDisableRedirections = False
  37.             .Refresh BackgroundQuery:=False
  38.         End With
  39.     End With
  40. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2015-9-16 06:12 編輯

回復 10# espionage
網頁上的股票代號查詢後會不會消失不見.端看各網頁原始碼的寫法.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 12# s13983037
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Ar(), a As Variant, i As Integer, stkno As String, Qur As String, DateVar As Integer, Sh As Worksheet
  4.     With CreateObject("InternetExplorer.Application")
  5.         .Navigate "http://www.tdcc.com.tw/smWeb/QryStock.jsp"
  6.         Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  7.         Set a = .Document.ALL.tags("option") '資料日期的內容
  8.         ReDim Ar(a.Length - 1)
  9.         For i = 0 To a.Length - 1
  10.             Ar(i) = a(i).innerHTML
  11.         Next
  12.         .Quit
  13.     End With
  14.     stkno = InputBox("輸入股票代號", "股票代號", 2313)    '
  15.     If stkno = "" Then Exit Sub
  16.     Set Sh = ActiveSheet             '指定工作表
  17.     With Sh
  18.         For DateVar = 0 To UBound(Ar)
  19.             Qur = "http://www.tdcc.com.tw/smWeb/QryStock.jsp?SCA_DATE=" & Ar(DateVar) & "&SqlMethod=StockNo&StockNo=" & stkno & "&StockName=&sub=%ACd%B8%DF"
  20.             .QueryTables.Add "URL;" & Qur, .Cells(1 + (DateVar * 27), "A")
  21.             '.Cells(1 + (DateVar * 27), "A")  A欄間隔 27列
  22.             With .QueryTables(1)
  23.                 .WebSelectionType = xlSpecifiedTables
  24.                 .WebFormatting = xlWebFormattingNone
  25.                 .WebTables = "6,7,8"
  26.                 .WebPreFormattedTextToColumns = True
  27.                 .WebConsecutiveDelimitersAsOne = True
  28.                 .WebSingleBlockTextImport = False
  29.                 .WebDisableDateRecognition = False
  30.                 .WebDisableRedirections = False
  31.                 .Refresh BackgroundQuery:=False
  32.                 Sh.Names(.Name).Delete '刪掉工作表上的名稱
  33.                 .Delete                '刪掉這QueryTable
  34.             End With
  35.         Next
  36.     End With
  37. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 16# chang0833
  1. .PreserveFormatting = False   '程式碼上加上這行
  2.                 .Refresh BackgroundQuery:=False
  3.                 Sh.Names(.Name).Delete '刪掉工作表上的名稱
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 23# chang0833

我將工作表格線改成紅色,沒有下載到網頁格式顏色
你沒上傳檔案,我莫宰羊ㄚ


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

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題