返回列表 上一主題 發帖

[發問] 有辦法將每日資料會成一份嘛

本帖最後由 GBKEE 於 2013-9-20 11:47 編輯

回復 1# pupai
如何每日資料匯成一份??
  1. 你的網址少了 STK_NO (股票代號)
  2. 'qurl = qurl & "&a=" & Month(StartDate) - 1 & "&b=" & Day(StartDate) & _
  3.             "&c=" & Year(StartDate) & "&d=" & Month(EndDate) - 1 & "&e=" & _
  4.             Day(EndDate) & "&f=" & Year(EndDate) & "&g=" & Range("E3") & "&q=q&y=0&z=" & _
  5.             Symbol & "&x=.csv"
  6.             '*** 上面的網址qurl 為何要 a= b= c= d= e= 這些  ******
  7.              qurl = "http://www.twse.com.tw/ch/trading/exchange/BWIBBU/BWIBBU.php?myear=2013&mmon=9&STK_NO=2371"         

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

TOP

本帖最後由 GBKEE 於 2013-9-20 12:27 編輯

回復 3# pupai
請詳看圖示的錯誤信息,去看看儲存格的範圍,不知你要如何每日資料匯成一份??
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# pupai
  1. Option Explicit
  2. Sub GetData()
  3.     Dim DataSheet As Worksheet, Sh As Worksheet, Msg As Boolean
  4.     Dim EndDate As Date, StartDate As Date, i As Integer, AR, xR As Long
  5.     Dim Symbol As String, Qur As String
  6.     Set DataSheet = Sheets("Sheet1")
  7.     With DataSheet
  8.         StartDate = .[b1]
  9.         EndDate = .[b2]
  10.         Symbol = .[b3]
  11.         .Range("D1").CurrentRegion = ""
  12.     End With
  13.     '本資料自民國94年09月01日開始提供 *** 除錯  ***
  14.     If StartDate < #9/1/2005# Or EndDate < #9/1/2005# Or Len(Symbol) <= 3 Or StartDate > EndDate Or EndDate > Date Then
  15.         MsgBox "數據有誤" & IIf(StartDate < #9/1/2005#, vbLf & "StartDate :日期 小於 94年09月01日  ", "") & _
  16.         IIf(EndDate < #9/1/2005#, vbLf & "EndDate :日期 小於 94年09月01日  ", "") & _
  17.         IIf(Len(Symbol) <= 3, vbLf & "Symbol : 股票代號 ", "") & _
  18.         IIf(StartDate > EndDate, vbLf & "StartDate > EndDate", "") & _
  19.         IIf(EndDate > Date, vbLf & " EndDate >" & Date, "")
  20.         Exit Sub
  21.     End If
  22.     '*********************************************
  23.     Set Sh = Sheets.Add(Sheets(1))
  24.     DataSheet.Activate
  25.     Do While DateSerial(Year(StartDate), Month(StartDate), 1) <= EndDate
  26.         Qur = "http://www.twse.com.tw/ch/trading/exchange/BWIBBU/BWIBBU.php?myear=" & Format(StartDate, "yyyy") & "&mmon=" & Format(StartDate, "m") & "&STK_NO=" & Symbol
  27.         With Sh
  28.             If .QueryTables.Count = 0 Then
  29.                 .QueryTables.Add "URL;" & Qur, .[A1]
  30.             Else
  31.                 .QueryTables(1).Connection = "URL;" & Qur
  32.                 Msg = True
  33.             End If
  34.            With .QueryTables(1)
  35.                 .WebFormatting = xlWebFormattingNone
  36.                 .WebSelectionType = xlSpecifiedTables
  37.                 .WebDisableDateRecognition = True
  38.                 .WebTables = "8"
  39.                  .Refresh BackgroundQuery:=False
  40.                  If Application.CountA(.ResultRange) = 0 Then Msg = False
  41.                  If Msg Then
  42.                     AR = .ResultRange.Offset(2)
  43.                  Else
  44.                     AR = .ResultRange
  45.                  End If
  46.                  With DataSheet
  47.                     xR = Application.CountA(.[d:d]) + 1
  48.                     .Cells(xR, "D").Resize(UBound(AR, 1), UBound(AR, 2)) = AR
  49.                  End With
  50.            End With
  51.            End With
  52.         StartDate = DateAdd("m", 1, StartDate)
  53.     Loop
  54.     Application.DisplayAlerts = False
  55.     Sh.Delete
  56.     Application.DisplayAlerts = True
  57. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 8# pupai
沒有啊!
圖示為 執行 7# 程式碼 的結果


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

TOP

回復 11# pupai
這都可以用巨集錄製試試看,練習才會進步的.
************************************
1.新增一工作表,將之命名為股票代號.         
2將下載的資料,複製到,此新工作表
*************************************
1.原程式中有新增工作表,可將之命名為股票代號.
2,將下載的資料,複製到,此新增工作表
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 13# pupai
你說:我有用巨集完成(如附件),有嗎?哪有完成.



  1. Option Explicit
  2. Sub GetData()
  3.     Dim DataSheet As Worksheet, Sh As Worksheet, Msg As Boolean
  4.     Dim EndDate As Date, StartDate As Date, AR, xR As Long
  5.     Dim Symbol As Variant, Qur As String
  6.     Set DataSheet = Sheets("代碼")
  7.     With DataSheet
  8.         StartDate = .[C1]
  9.         EndDate = .[C2]
  10.         '本資料自民國94年09月01日開始提供 *** 除錯  ***
  11.         If StartDate < #9/1/2005# Or EndDate < #9/1/2005# Or StartDate > EndDate Or EndDate > Date Then
  12.             MsgBox "數據有誤" & IIf(StartDate < #9/1/2005#, vbLf & "StartDate :日期 小於 94年09月01日  ", "") & _
  13.             IIf(EndDate < #9/1/2005#, vbLf & "EndDate :日期 小於 94年09月01日  ", "") & _
  14.             IIf(StartDate > EndDate, vbLf & "StartDate > EndDate", "") & _
  15.             IIf(EndDate > Date, vbLf & " EndDate >" & Date, "")
  16.             Exit Sub
  17.         End If
  18.     '*********************************************
  19.         Application.DisplayAlerts = False
  20.         For Each Sh In Sheets
  21.             If Sh.Name <> DataSheet.Name Then Sh.Delete    '刪除不必要的工作
  22.         Next
  23.         For Each Symbol In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))  '股票的迴圈
  24.             Msg = False
  25.             StartDate = .[C1]                           '迴圈需重新回到原本的 StartDate日期
  26.             Set Sh = Sheets.Add(, Sheets(Sheets.Count)) '新增的工作表位於活頁簿最後面(Sheets.Count)
  27.             DataSheet.Activate
  28.             
  29.             Do While DateSerial(Year(StartDate), Month(StartDate), 1) <= EndDate
  30.                 Qur = "http://www.twse.com.tw/ch/trading/exchange/BWIBBU/BWIBBU.php?myear=" & Format(StartDate, "yyyy") & "&mmon=" & Format(StartDate, "m") & "&STK_NO=" & Symbol
  31.                 With Sh       '新增的工作表
  32.                     If .QueryTables.Count = 0 Then                      'Web查詢
  33.                         .QueryTables.Add "URL;" & Qur, .[M1]            'Web查詢資料在M欄
  34.                     Else
  35.                         .QueryTables(1).Connection = "URL;" & Qur
  36.                         Msg = True
  37.                     End If
  38.                     With .QueryTables(1)
  39.                         .WebFormatting = xlWebFormattingNone
  40.                         .WebSelectionType = xlSpecifiedTables
  41.                         .WebDisableDateRecognition = True
  42.                         .WebTables = "8"
  43.                         .Refresh BackgroundQuery:=False
  44.                         If Application.CountA(.ResultRange) = 0 Then Msg = False
  45.                         If Msg Then
  46.                             AR = .ResultRange.Offset(2)
  47.                         Else
  48.                             AR = .ResultRange
  49.                         End If
  50.                         xR = Application.CountA(.Parent.[d:d]) + 1                         '.Parent :Web查詢的父層
  51.                         .Parent.Cells(xR, "A").Resize(UBound(AR, 1), UBound(AR, 2)) = AR   '資料複製到 新增工作表的A欄
  52.                     End With
  53.                 End With
  54.                 StartDate = DateAdd("m", 1, StartDate)   '日期 + 1個月
  55.             Loop
  56.             With Sh
  57.                 .Name = Symbol                                 '以股票命名
  58.                 .QueryTables(1).ResultRange = ""               '清除Web查詢的資料
  59.                  .Names(.QueryTables(1).Name).Delete           'Web查詢的名稱
  60.             End With
  61.         Next
  62.     End With
  63.     Application.DisplayAlerts = True
  64. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 16# pupai
你還是沒搞清楚CurrentRegion是什麼,須多看vba的說明.
  1.   .Range("D1").CurrentRegion = ""                                                               '設定D1欄位值
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2013-10-23 16:18 編輯

回復 19# pupai
  1. Option Explicit
  2. Sub GetData()
  3.     Dim DataSheet As Worksheet, Sh As Worksheet
  4.     Dim EndDate As Date, StartDate As Date, AR, xR As Long
  5.     Dim Symbol As Variant, Qur As String
  6.     Set DataSheet = Sheets("代碼")
  7.     With DataSheet
  8.         StartDate = .[C1]
  9.         EndDate = .[C2]
  10.         '本資料自民國94年09月01日開始提供 *** 除錯  ***
  11.         If StartDate < #9/1/2005# Or EndDate < #9/1/2005# Or StartDate > EndDate Or EndDate > Date Then
  12.             MsgBox "數據有誤" & IIf(StartDate < #9/1/2005#, vbLf & "StartDate :日期 小於 94年09月01日  ", "") & _
  13.             IIf(EndDate < #9/1/2005#, vbLf & "EndDate :日期 小於 94年09月01日  ", "") & _
  14.             IIf(StartDate > EndDate, vbLf & "StartDate > EndDate", "") & _
  15.             IIf(EndDate > Date, vbLf & " EndDate >" & Date, "")
  16.             Exit Sub
  17.         End If
  18.     '*********************************************
  19.         Application.DisplayAlerts = False
  20.         For Each Sh In Sheets
  21.             If Sh.Name <> DataSheet.Name Then Sh.Delete    '刪除不必要的工作
  22.         Next
  23.         For Each Symbol In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))  '股票的迴圈
  24.             StartDate = .[C1]                           '迴圈需重新回到原本的 StartDate日期
  25.             Set Sh = Sheets.Add(, Sheets(Sheets.Count)) '新增的工作表位於活頁簿最後面(Sheets.Count)
  26.             DataSheet.Activate
  27.             Do While DateSerial(Year(StartDate), Month(StartDate), 1) <= EndDate
  28.                 Qur = "http://www.twse.com.tw/ch/trading/exchange/BWIBBU/BWIBBU.php?myear=" & Format(StartDate, "yyyy") & "&mmon=" & Format(StartDate, "m") & "&STK_NO=" & Symbol
  29.                 With Sh       '新增的工作表
  30.                     If .QueryTables.Count = 0 Then                      'Web查詢
  31.                         .QueryTables.Add "URL;" & Qur, .[M1]            'Web查詢資料在M欄
  32.                     Else
  33.                         .QueryTables(1).Connection = "URL;" & Qur
  34.                     End If
  35.                     With .QueryTables(1)
  36.                         .WebFormatting = xlWebFormattingNone
  37.                         .WebSelectionType = xlSpecifiedTables
  38.                         .WebDisableDateRecognition = True
  39.                         .WebTables = "7,8"
  40.                         .Refresh BackgroundQuery:=False
  41.                          If Application.CountA(.ResultRange) > 1 Then
  42.                             AR = .ResultRange.Offset(4)
  43.                             If Application.CountA(.Parent.[a:a]) = 0 Then AR = .ResultRange.Offset(3)
  44.                             xR = Application.CountA(.Parent.[a:a]) + 1                         '.Parent :Web查詢的父層
  45.                             .Parent.Cells(xR, "A").Resize(UBound(AR, 1), UBound(AR, 2)) = AR   '資料複製到 新增工作表的A欄
  46.                         End If
  47.                     End With
  48.                     
  49.                 End With

  50.                 StartDate = DateAdd("m", 1, StartDate)   '日期 + 1個月
  51.             Loop
  52.             With Sh
  53.                 .Name = Symbol                                 '以股票命名
  54.                 '------------------------
  55.                 .Activate
  56.                 .Range("E3").Select
  57.                 ActiveCell.FormulaR1C1 = _
  58.                 "=IF(ISERROR(DATEVALUE(1911+MID(RC[-4],1,FIND(""/"",RC[-4])-1) & MID(RC[-4],FIND(""/"",RC[-4]),LEN(RC[-4])))),"""",DATEVALUE(1911+MID(RC[-4],1,FIND(""/"",RC[-4])-1) & MID(RC[-4],FIND(""/"",RC[-4]),LEN(RC[-4]))))"
  59.                 .Range("E3").Select
  60.                 Selection.Copy
  61.                 .Columns("E:E").Select
  62.                 ActiveSheet.Paste
  63.                 .Columns("E:E").Select
  64.                 Selection.NumberFormatLocal = "[$-404]e/m/d;@"
  65.                 '------------------------
  66.                 .QueryTables(1).ResultRange = ""               '清除Web查詢的資料
  67.                  .Names(.QueryTables(1).Name).Delete           'Web查詢的名稱
  68.             End With
  69.         Next
  70.     End With
  71.     Application.DisplayAlerts = True
  72. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 23# pupai
應該是在這繼續發問的

附檔試試看對否
text.rar (16.57 KB)
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題