Board logo

標題: [發問] 判斷功能表按鈕而執行程式碼問題 [打印本頁]

作者: reangame    時間: 2014-5-14 23:21     標題: 網頁抓取資料疑問

本帖最後由 reangame 於 2014-5-14 23:23 編輯

請教各位大大,下方程式碼是以錄製方式出來的,可是該網頁有可以日期查詢,我試著用錄製方式去抓程式碼,可是卻抓不到選完日期後查詢的程式碼,怎麼匯入都是當日資料,請問如何指定日期查詢後匯入Excel?
  1.     [a1].Select
  2.     With ActiveSheet.QueryTables.Add(Connection:= _
  3.         "URL;http://www.twse.com.tw/ch/trading/exchange/BWIBBU/BWIBBU_d.php#", _
  4.         Destination:=Range("A1"))
  5.         .name = "BWIBBU_d"
  6.         .FieldNames = True
  7.         .RowNumbers = False
  8.         .FillAdjacentFormulas = False
  9.         .PreserveFormatting = False
  10.         .RefreshOnFileOpen = False
  11.         .BackgroundQuery = True
  12.         .RefreshStyle = xlInsertDeleteCells
  13.         .SavePassword = False
  14.         .SaveData = True
  15.         .AdjustColumnWidth = True
  16.         .RefreshPeriod = 0
  17.         .WebSelectionType = xlSpecifiedTables
  18.         .WebFormatting = xlWebFormattingAll
  19.         .WebTables = "8"
  20.         .WebPreFormattedTextToColumns = True
  21.         .WebConsecutiveDelimitersAsOne = True
  22.         .WebSingleBlockTextImport = False
  23.         .WebDisableDateRecognition = False
  24.         .WebDisableRedirections = False
  25.         .Refresh BackgroundQuery:=False
  26.     End With
複製代碼
順便附上我的半成品檔案
作者: reangame    時間: 2014-5-14 23:30

另外附帶一問,請看我的半成品,裡面有個【開啟月份股票網頁】,原意是想自動下載月份資料並匯入Excel,因小弟功力還不夠,只能以替代方式開啟網頁後手動下載,再以【匯入月份股票資料】方式匯入,可否指導如何自動下載後匯入Excel之方式?
作者: joey0415    時間: 2014-5-16 10:23

Sub tt()


        [a1].Select
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;http://www.twse.com.tw/ch/trading/exchange/BWIBBU/BWIBBU_d.php#", Destination:=Range("A1"))
            .PostText = "input_date=103%2F05%2F13&select2=ALL&order=STKNO&login_btn=%ACd%B8%DF"
            .WebTables = "8"
            .Refresh BackgroundQuery:=False
            .Delete
        End With

End Sub
作者: reangame    時間: 2014-5-16 21:46

本帖最後由 reangame 於 2014-5-16 21:48 編輯

joey0415 大大,測試過了,可以執行,但拜託指導一下           
            .PostText = "input_date=103%2F05%2F13&select2=ALL&order=STKNO&login_btn=%ACd%B8%DF"   ==>這是甚麼意思?
            .WebTables = "8"  ==>這是甚麼意思?
            .Refresh BackgroundQuery:=False  ==>這是甚麼意思?
            .Delete  ==>為什麼要?
作者: reangame    時間: 2014-5-16 21:51

另外請看我的半成品,裡面有個功能【開啟月份股票網頁】,原意是想自動下載月份資料並匯入Excel,目前只能以替代方式開啟網頁後手動下載,再以【匯入月份股票資料】方式匯入,可否指導如何在不打開IE情況下,自動下載後匯入Excel之方式?
作者: reangame    時間: 2014-5-21 12:58     標題: 判斷功能表按鈕而執行程式碼問題

[attach]18323[/attach]
說明:上圖為【系統功能表】點選【選擇股票收盤行情】show【選擇收盤日期_股票收盤】:1,點選確定執行抓取股票收盤行情。
                                                        點選【選擇股票比例資料】show【選擇收盤日期_比例資料】:2,點選確定執行抓取股票比例資料。
                                                        點選【選擇三大法人資料】show【選擇收盤日期_三大法人】:3,點選確定執行抓取三大法人資料。

請問有辦法做出如下圖的概念嗎? 只需要一個表單就好了,
判斷【系統功能表】點了哪個按鈕,show【選擇收盤日期】:1,點選確定執行對應的程式碼?
因為如果這樣下去只要新增功能就必須再做一個表單(4.5.6.....),太不自動化了,希望有高手可以指導一下。

我在【網頁抓取資料疑問】這文章中有放檔案,連結如後:網頁抓取資料疑問
如果可以也請指導一下,非常感謝您!
作者: joey0415    時間: 2014-5-21 20:59

回復 1# reangame

一、要抓資料前先查詢自己的資料庫,每個資料庫最後更新日期
二、抓取最後更新日與今日間的差距離
三、抓取未更新日期進資料庫
四、如果抓取網頁有問題就跳過,如果資料不符如沒資料就跳過…

這樣就自動化了,不用這樣設計
作者: reangame    時間: 2014-5-21 23:47

回復 2# joey0415

joey0415大大:
您的意思是點選1.2.3功能後,直接比對資料庫跟網頁的資料是否同一天,如果不是就抓取更新,是這樣嗎?

如果是這樣的話,就不太符合我想要的功能,我主要是想抓取選定的日期然後分別去查詢網頁資料,
點選1.2.3功能所選定的日期有可能不是同一天的資料,所以才會這樣設計,還請再指導,感恩!
作者: stillfish00    時間: 2014-5-22 14:23

回復 1# reangame

選擇收盤日期表單的程式碼可新增加一個全域變數,儲存是來自哪個按鈕。

如【選擇收盤日期】程式碼上方加上:
  1. Public Enum enumClickOption
  2.   optDefault
  3.   opt選擇股票收盤行情
  4.   opt選擇股票比例資料
  5.   opt選擇三大法人資料
  6. End Enum
  7. Public fromOption As enumClickOption
複製代碼
點選【選擇股票收盤行情】, show之前加上一行
  1. Private Sub CommandButton1_Click()
  2.     Unload Me
  3.     選擇收盤日期.fromOption =opt選擇股票收盤行情
  4.     選擇收盤日期.Show
  5. End Sub
複製代碼
其他按鈕依此類推

最後【選擇收盤日期】確定時,再判斷該變數決定執行哪個行為
作者: reangame    時間: 2014-5-24 15:49

回復 9# stillfish00

stillfish00 大大:
非常抱歉,這兩天比較忙沒空上來,沒想到一上來就看到您的回覆,對我幫助非常大,
一開始測試一個多小時,就是有地方執行不了,一度想要再上來請求您的協助,
後來發現原來您回復的程式碼:
Public Enum enumClickOption
  optDefault
  opt選擇股票收盤行情
  opt選擇股票比例資料==>選擇股比例資料
  opt選擇三大法人資料
End Enum
Public fromOption As enumClickOption
跟我的程式碼差了一個字,差點就要放棄了,還好有耐心的測試,
把字修正後,卻不知道要執行的程式碼要擺在哪裡  @@....
又開始測試,最後終於想出來,
在【選擇收盤日期】表單的確定鈕,裡面的程式碼鍵入:
  1. Private Sub CommandButton1_Click()
  2. Select Case fromOption
  3.     Case 1
  4.                  程式碼1
  5.     Case 2
  6.                  程式碼2
  7.     Case 3
  8.                  程式碼3
  9. End Sub
複製代碼
終於可以執行了,以後就可以省略很多同樣的表單了,
真心感謝您的指導!!!!!




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