Board logo

標題: 更新股市每日盤後行情最新資料 [打印本頁]

作者: gelai01000001    時間: 2013-8-30 02:20     標題: 更新股市每日盤後行情最新資料

"如果股市當天休市,可自動更新有交易的最新日期"??請問如何修改程式
Sub 下載網站資料()
   
    With Range(Cells(3, 1), Cells(1000, 16))
        .Clear
        .Delete
            
    End With
   
    Dim ptxt As String
        
        Startday = Left(Date, 4) & "0" & Mid(Date, 6, 1) & Right(Date, 2)  "如果股市當天休市,可自動更新有交易的最新日期"??請問如何修改程式
        Startmonth = Left(Date, 4) & "0" & Mid(Date, 6, 1)
        
        
        '下載網站的網址
        With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/genpage/Report" & Startmonth & "/A112" & Startday & "ALLBUT0999_1.php?select2=ALLBUT0999&chk_date=" & Startday, Destination:=Range("A3"))
   
        ' xlOverwriteCells 表示覆蓋欄位
        .RefreshStyle = xlOverwriteCells
        ' 抓取網頁的第10個表格作為匯入資料
        .WebTables = "10"
        .Refresh BackgroundQuery:=False
        
        End With
    '將R2C1:R878C16範圍的儲存格字形調整為12
    Cells.Select
    Cells.Font.Size = 12

End Sub

煩請各位高手專家解惑,謝謝!
作者: chen_cook    時間: 2013-8-30 04:50

回復 1# gelai01000001


    "如果股市當天休市,可自動更新有交易的最新日期"??請問如何修改程式
    找全年行事曆當DATABASE先比對,確認否為假日再抓DATA...你已會高難度程序,這個你應該會寫才對!!
    另一種是算週一到五不過會有例外,此方法還是要用到上述收尾!!!
作者: gelai01000001    時間: 2013-9-1 22:52

chen_cook 前輩專家!感謝你幫忙抽空解惑。
可是你說的〈全年行事曆當DATABASE先比對〉,小學生還是不太懂呢!
因我上述的程式是網路上拼湊而來,VBA其實說真的我不是很了解。

如果照你說的方式?是否要使用
If Then
Elseif(敘述未股市休市的日期)
Else
end if

麻煩chen_cook 前輩專家指導!
作者: chen_cook    時間: 2013-9-2 05:13

回復 3# gelai01000001

    [attach]15913[/attach]
     我不是前輩...我也不會太深的EXCEL VAB....
     依行事曆轉成一維陣列或一個DATDBASE(SHEET DATA可以方便隔年 UPDATE)
     但還是會有例外如近日的防災假!!(事後再追加)
     如何編寫你的方法是可行的(我的做法是比對若為假日就不去抓WEB DATA了,直接就結束了)
     以上!!
作者: GBKEE    時間: 2013-9-2 11:21

本帖最後由 GBKEE 於 2013-9-3 07:21 編輯

回復 3# gelai01000001
  1. Option Explicit
  2. Sub 下載網站資料()
  3.     Dim Startmonth As String, Startday As String, xDate As Date, Msg As Boolean, Sh As Worksheet
  4.     Dim T As Date
  5.     T = Time
  6.     On Error Resume Next                    '程式執行中有錯誤時,不裡會繼續執行程式
  7.     xDate = Date                            '當日
  8.     '***************測試用
  9.     xDate = #9/8/2013#                 '休市日  
  10.     '***************測試無誤後可刪除掉
  11.     Set Sh = ActiveSheet                    '指定工作表:此程式在任何模組中皆可用
  12. EX:
  13.     If Err.Number <> 0 Or Msg = True Then   '當日(尚未有資料:錯誤) 或 休市
  14.         xDate = xDate - 1                   '往後退一日
  15.         Err.Clear
  16.         Msg = False
  17.     End If
  18.     Sh.UsedRange.Clear                       '清理工作表已使用的範圍
  19.     Startday = Format(xDate, "YYYYMMDD")
  20.     Startmonth = Format(xDate, "YYYYMM")
  21.         '下載網站的網址
  22.     With Sh.QueryTables.Add(Connection:="URL;http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/genpage/Report" & Startmonth & "/A112" & Startday & "ALLBUT0999_1.php?select2=ALLBUT0999&chk_date=" & Format(xDate, "E/MM/DD"), Destination:=Range("A3"))
  23.         .RefreshStyle = xlOverwriteCells                            '抓取網頁的第10個表格作為匯入資料
  24.         .WebTables = "10"
  25.         .Refresh BackgroundQuery:=False                             '當日(尚未有資料:錯誤)
  26.         If Err.Number <> 0 Then GoTo EX
  27.         If Application.CountA(Sh.QueryTables(1).ResultRange) = 0 Then  '休市 沒有資料
  28.             Msg = True
  29.             GoTo EX
  30.         End If
  31.     End With
  32.     With Sh.UsedRange
  33.         .Font.Size = 12
  34.         .EntireColumn.AutoFit
  35.     End With
  36.     MsgBox "交易的最新日期 " & xDate & vbLf & Application.Text(Time - T, "費時 [SS] 秒")
  37. End Sub
複製代碼

作者: gelai01000001    時間: 2013-9-3 01:17

我將date的日期改為星期天的日期,程式會無止靜的跑回圈?
請問GBKEE超級版主,假如我更新的日期(Date)距離股市最後交易日超過1天以上,又該如何修改呢?感謝指導
  1. Sub 下載網站資料()
  2.     Dim Startmonth As String, Startday As String, xDate As Date, Msg As Boolean, Sh As Worksheet
  3.     On Error GoTo EX                        '程式執行中有錯誤時跳到 EX: 繼續執行程式
  4.     xDate = Date                            '當日
  5.     Set Sh = ActiveSheet                    '指定工作表:此程式在任何模組中皆可用
  6. EX:
  7.     If Err.Number <> 0 Or Msg = True Then   '當日(尚未有資料:錯誤) 或 休市
  8.         [color=Red]xDate = xDate - 1    (應改為xDate = Date - 1)[/color]     假如休市超過1天以上(2,3,4,5,6,春節9天),又如何修改呢?         
  9.         Err.Clear
  10.         Msg = False
  11.     End If
  12.     Sh.UsedRange.Clear                       '清理工作表已使用的範圍
  13.     Startday = Format(xDate, "YYYYMMDD")
  14.     Startmonth = Format(xDate, "YYYYMM")
  15.         '下載網站的網址
  16.     With Sh.QueryTables.Add(Connection:="URL;http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/genpage/Report" & Startmonth & "/A112" & Startday & "ALLBUT0999_1.php?select2=ALLBUT0999&chk_date=" & Format(xDate, "E/MM/DD"), Destination:=Range("A3"))
  17.         .RefreshStyle = xlOverwriteCells                            '抓取網頁的第10個表格作為匯入資料
  18.         .WebTables = "10"
  19.         .Refresh BackgroundQuery:=False                             '當日(尚未有資料:錯誤)
  20.         If Application.CountA(Sh.QueryTables(1).ResultRange) = 0 Then  '休市 沒有資料
  21.             Msg = True
  22.             GoTo EX
  23.         End If
  24.     End With
  25.     With Sh.UsedRange
  26.         .Font.Size = 12
  27.         .EntireColumn.AutoFit
  28.     End With
  29. End Sub
複製代碼
回復 5# GBKEE
作者: GBKEE    時間: 2013-9-3 07:19

回復 6# gelai01000001
程式會無止盡的跑回圈?不會吧!是資料量大下載費時吧 !!
5#的程式碼已修正試試看
作者: gelai01000001    時間: 2013-9-6 00:13

本帖最後由 GBKEE 於 2013-9-6 07:26 編輯

回復 7# GBKEE
GBKEE感謝你這麼熱心抽空指導解惑!
丟啦!這才是我想阿ㄋㄟ!2013春節休假9天也可以呢!




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