返回列表 上一主題 發帖

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

回復 17# GBKEE

謝謝版大開解^^

TOP

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

TOP

可以請各位先進幫忙解答這問題嗎?
1.本使用著超版GBKEE所提供的程式,但最近
    在下載時,卻連網頁背景顏色都下載下來(原只有文字沒背景)
    是什麼原因造成的?

TOP

Hi GBKEE 大大
我找了一台有IE8的電腦,您的原始程式可以執行,原來IE版本會有這樣的影響
謝謝指教

TOP

回復 13# GBKEE
Hi GBKEE前輩
謝謝您 可以用!!!

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

回復 9# GBKEE

Hi GBKEE您好
看到您的程式碼 想把他修正成 個股的集保日期
當第一筆日期輸入時填入 A1欄中
但是第二筆資料輸入時填入A28欄中
以此類推每一筆資料填入後都需間隔28欄位,
目前我只有修正到可以重複填入日期的部分,請教GBKEE 前輩 不知要如何修改,可否提點迷津 感謝您\QQ/

以下為修正程式碼

    Dim Ar(), a, i As Integer, strDate As String, stkno As String, Qur As String
    With CreateObject("InternetExplorer.Application")
        .Navigate "http://www.tdcc.com.tw/smWeb/QryStock.jsp"
        Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
        Set a = .Document.ALL.tags("option") '資料日期的內容
        ReDim Ar(a.Length - 1)
        For i = 0 To a.Length - 1
            Ar(i) = a(i).innerHTML
        Next
        .Quit
    End With
   
    For DateVar = 0 To 28
    strDate = Ar(DateVar) '導入當月日期
    Do
        strDate = InputBox(Join(Ar, vbTab), "集保戶股權分散表查詢 之 有效日期", strDate)
        If strDate = "" Then Exit Sub
     
    Loop Until IsNumeric(Application.Match(strDate, Ar, 0))
    stkno = InputBox("輸入股票代號", "股票代號", 2313)    '
    If stkno = "" Then Exit Sub
    Qur = "http://www.tdcc.com.tw/smWeb/QryStock.jsp?SCA_DATE=" & strDate & "&SqlMethod=StockNo&StockNo=" & stkno & "&StockName=&sub=%ACd%B8%DF"
    With ActiveSheet
                                For WriteDate = 1 To 1
                                        If .QueryTables.Count = 0 Then
                                                .QueryTables.Add "URL;" & Qur, .[A & WriteDate * 28 * (WriteDate) ]
                                        Else
                                                .QueryTables(1).Connection = "URL;" & Qur
                                        End If
                                        With .QueryTables(1)
                                                .WebSelectionType = xlSpecifiedTables
                                                .WebFormatting = xlWebFormattingNone
                                                .WebTables = "6,7,8"
                                                .WebPreFormattedTextToColumns = True
                                                .WebConsecutiveDelimitersAsOne = True
                                                .WebSingleBlockTextImport = False
                                                .WebDisableDateRecognition = False
                                                .WebDisableRedirections = False
                                                .Refresh BackgroundQuery:=False
                                        End With
                                Next
    End With
    Next

TOP

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

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

TOP

GBKEE 大大
1. 您所提的WEB查詢,可以執行
2. 至於原本語法的修改還是不行耶,我有參考另外一封語法,也是您回覆的,http://forum.twbts.com/viewthread.php?tid=9511,兩者目的很像,一樣是輸入代號與日期,跑資料,發現這個VBA是有效,可以跑出結果,所以挺納悶的
3.  我有發現一個問題,原本我詢問的網頁,http://www.tdcc.com.tw/smWeb/QryStock.jsp,當輸入完股票代號,跑出結果之後,網頁上的股票代號就會消失不見了,而網頁原始檔的行數由167行增加為393行,如下圖紅框,
4.  而另外一篇網頁 http://mops.twse.com.tw/mops/web/t164sb04,當輸入完股票代號,跑出結果之後,網頁上的股票代號不會消失,網頁原始檔的行數由704行維持為704行,如下圖紅框,
5. 不知道這有沒有關係,故請教一下,我在找朋友有IE8的試試看原本的code
感謝

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

        靜思自在 : 有多少力量就做多少事,不要心存等待,等待才會落空。
返回列表 上一主題