返回列表 上一主題 發帖

[發問] 更新下載速度、存取問題

請問一下巨集中斷、存檔、日期問題

本帖最後由 spermbank 於 2011-9-22 20:33 編輯

1.巨集問題:
   問題:因為要接收DDE資料,但是DDE資料(元大yewwin)不能一次大量下載
            所以我寫了兩個巨集按鈕、分別去更新DDE資料,但是覺得要按兩次巨集按鈕,覺得很麻煩。
   請問:如何使巨集1中斷10秒後(非延遲10秒)、待利用yes.exe(開啟excel自動就會持續更新、但執行巨集沒辦法)更新資料完畢,在繼續執行巨集2呢?

2.存取問題:(這是網路上程式),另類似諸如此類excel vba有沒有可推薦的書籍。

   問題:在a.workbooks.open 這一行出現語法錯誤,請問我要如何修改??

Private Sub Form_Load()
Set a = CreateObject("excel.application")
sdate = "2007/4/20" '開始日期
edate = "2007/4/21" '終止日期
save_file_name = "C:\test.csv" '存檔檔名

'用excel來存檔
a.Workbooks.Open "http://www.taifex.com.tw/chinese/3/3_1_2dl.asp?syear=" & Year(sdate) & "&smonth=" & Month(sdate) & "&sday=" & Day(sdate) & "&eyear=" & Year(edate) & "&emonth=" & Month(edate) & "&eday=" & Day(edate) & "&COMMODITY_ID="
a.DisplayAlerts = False
a.ActiveWorkbook.SaveAs save_file_name, 6, False '存成csv
'要直接看可以略過關閉的指令!!!
a.quit
Set a = Nothing
Shell "explorer.exe c:\", vbMaximizedFocus
End
End Sub


3.儲存格cells(1,1) ="2000/01/31"日期格式
我要如何利用x,y,z分別捉2000、01、31等三組數字(拿掉/呢?)

TOP

回復 1# spermbank
1
  1.   Sub 巨集1()
  2.     '
  3.     '
  4.     Application.OnTime Now + TimeValue("00:00:10"), "巨集2"
  5. End Sub
複製代碼
2   2003版 中找不出錯誤

3  X = Year(Cells(1, 1))
    Y = Month(Cells(1, 1))
   Z = Day(Cells(1, 1))
'''''''''''''''''''''''''
   A = Split(Cells(1, 1), "/")
   X = A(0)
   Y = A(1)
   Z = A(2)

TOP

1.3解決 感謝大大
可是第二個問題,我還是解決不出來,以下是我的程式碼
我是用excel 2007
Sub Download()

    Set f = CreateObject("excel.application")
   
    save_file_name = "C:\test.csv" '存檔檔名
   
    s = "2002"
    i = "00"
    j = "1"
    k = "2010"
    m = "11"
    n = "31"
    o = "2011"
   
    '用excel來存檔
    f.Workbooks.Open "http://ichart.finance.yahoo.com/table.csv?s=" & s ".TW&a=" & i "&b=" & j "&c=" & k "&d=" & m "&e=" & n "&f=" & o "&g=d&ignore=.csv"
    'http://ichart.finance.yahoo.com/table.csv?s=2002.TW&a=00&b=1&c=2010&d=11&e=31&f=2011&g=d&ignore=.csv
    f.DisplayAlerts = False
    f.ActiveWorkbook.SaveAs save_file_name, 6, False '存成csv
    '要直接看可以略過關閉的指令!!!
    f.Quit
    Set f = Nothing
    Shell "explorer.exe c:\", vbMaximizedFocus
    End
   
End Sub

TOP

回復 3# spermbank
少一個連接符號 &
  f.Workbooks.Open "http://ichart.finance.yahoo.com/table.csv?s=" & s ".TW&a=" & i "&b=" & j "&c=" & k "&d=" & m "&e=" & n "&f=" & o  "&g=d&ignore=.csv

F.Workbooks.Open "http://ichart.finance.yahoo.com/table.csv?s=" & s & ".TW&a=" & i & "&b=" & j & "&c=" & k & "&d=" & m & "&e=" & n & "&f=" & o & "&g=d&ignore=.csv"

TOP

真的很感謝大大,自己看這行程式已經看過好幾個小時,都沒有發現,如今程式能繼續往下寫,真的很開心,超級開心,謝謝。

TOP

[發問] 更新下載速度、存取問題

本帖最後由 spermbank 於 2011-9-24 15:43 編輯

1:執行 [所有歷史股價按鈕] 存成.csv檔,發現存取檔案速度非常慢
  問:如何修改程式提升下載速度?

2:如何讀取代號1101.csv第1欄所有日期(data),寫入excel中的sheet2的第1列中,並且讀取所有*.csv檔案中的第5欄(close)的資料,依序對照檔名與第1欄中的代號將第5欄資料寫入各代號的列位中.
  此問題有爬文尋找相關問題試寫,可是還是寫不出來,想請問各位大大。

  PS:附加:附件text1 PS:還是小學生,可請大大寫完,程式碼用貼,謝謝。

text.rar (100.62 KB)

回復 1# spermbank
要開關 1298個檔案 速度快不了
  1. Sub 按鈕3_Click()
  2.     With ThisWorkbook.Sheets("Sheet1")
  3.         .Range("H" & 11).Formula = "更新中..."
  4.         ii = .Cells(6, 6) - 1 '起始月
  5.         j = .Cells(7, 6) '起始日
  6.         k = .Cells(5, 6) '起始年
  7.         m = .Cells(6, 8) - 1 '終止月
  8.         n = .Cells(7, 8) '終止日
  9.         o = .Cells(5, 8) '終止年
  10.         h = .Cells(9, 6) '存檔位置
  11.         Application.ScreenUpdating = False       '停止螢幕更新
  12.         For i = 2 To Application.CountA(.Range("A:A")) '欄位有值範圍計算
  13.             symbol = .Cells(i, 1)
  14.             save_file_name = h & symbol & ".csv" '存檔檔名
  15.             If .Range("C" & i).Formula = "市" Then
  16.                 '用excel來存檔
  17.                 Workbooks.Open "http://ichart.finance.yahoo.com/table.csv?s=" & symbol & ".TW&a=" & ii & "&b=" & j & "&c=" & k & "&d=" & m & "&e=" & n & "&f=" & o & "&g=d&ignore=.csv"
  18.             Else
  19.                 Workbooks.Open "http://ichart.finance.yahoo.com/table.csv?s=" & symbol & ".TWO&a=" & ii & "&b=" & j & "&c=" & k & "&d=" & m & "&e=" & n & "&f=" & o & "&g=d&ignore=.csv"
  20.             End If
  21.             With ActiveWorkbook   '檔案開啟後成為作用中的活頁簿
  22.                 .SaveAs save_file_name, 6, False '存成csv
  23.                 .Close False
  24.             End With
  25.         Next
  26.         .Range("H" & 11).Formula = "更新結束"
  27.     End With
  28.     Application.ScreenUpdating = True     '螢幕更新
  29. End Sub
複製代碼

TOP

本帖最後由 spermbank 於 2011-9-24 18:30 編輯

回復 7# GBKEE


  大大你好:
         附加檔案是我在網路上找到的類似檔案,發現它執行的速度,的確快很多,給您參考一下。
  看看是否有一些靈感,可以讓程式速度變得快一些(可是此檔尚未開放巨集程式碼)。
        還有再執行此程式時,出現一個視窗"聯絡伺服器以取得資訊",是否可以不顯示或修改程式,因為除了拖慢excel執行速度之外,讓電腦無法從事其他工作。
另外:
       可否請大大協助解決第二個問題,謝謝。

       真的很謝謝大大回應我^^

Yahoo_Finance.v.2-1.rar (541.31 KB)

TOP

本帖最後由 GBKEE 於 2011-9-24 20:34 編輯

回復 8# spermbank
自己測試看看
  1. Sub 按鈕3_Click()
  2.     Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
  3.     With ThisWorkbook.Sheets("Sheet1")
  4.         .Range("H" & 11).Formula = "更新中..."
  5.         ii = .Cells(6, 6) - 1 '起始月
  6.         j = .Cells(7, 6) '起始日
  7.         k = .Cells(5, 6) '起始年
  8.         m = .Cells(6, 8) - 1 '終止月
  9.         n = .Cells(7, 8) '終止日
  10.         o = .Cells(5, 8) '終止年
  11.         h = .Cells(9, 6) '存檔位置
  12.         For i = 2 To Application.CountA(.Range("A:A")) '欄位有值範圍計算
  13.             symbol = .Cells(i, 1)
  14.             save_file_name = h & symbol & ".csv" '存檔檔名
  15.             If .Range("C" & i).Formula = "市" Then
  16.                 '用excel來存檔
  17.                 myURL = "http://ichart.finance.yahoo.com/table.csv?s=" & symbol & ".TW&a=" & ii & "&b=" & j & "&c=" & k & "&d=" & m & "&e=" & n & "&f=" & o & "&g=d&ignore=.csv"
  18.             Else
  19.                 myURL = "http://ichart.finance.yahoo.com/table.csv?s=" & symbol & ".TWO&a=" & ii & "&b=" & j & "&c=" & k & "&d=" & m & "&e=" & n & "&f=" & o & "&g=d&ignore=.csv"
  20.             End If
  21.             WinHttpReq.Open "GET", myURL, False
  22.             WinHttpReq.Send        '
  23.             myURL = WinHttpReq.ResponseBody
  24.             If WinHttpReq.Status = 200 Then
  25.                 With CreateObject("ADODB.Stream")
  26.                     .Open
  27.                     .Type = 1
  28.                     .Write WinHttpReq.ResponseBody
  29.                     .SaveToFile (save_file_name)
  30.                     .Close
  31.                 End With
  32.             End If
  33.         Next
  34.         .Range("H" & 11).Formula = "更新結束"
  35.     End With
  36. End Sub
複製代碼

TOP

本帖最後由 spermbank 於 2011-9-25 03:11 編輯

回復 9# GBKEE

速度快超多,大概8-10分鐘,1千多筆洗個澡就跑完^^ 真的是十分感謝大大
可是1341筆中只下載1255筆,不知道是代號重複或miss或網頁無此資料。我再來找找看錯誤在哪裡
另外:

此程式為再第C欄位中有"櫃"這字眼,就刪除該欄的第A至C列
可是跑此程式發現,卻需要執行多次,有"櫃"這字眼的第A至C列才會被刪除
可是程式不是執行一次就可以成功,卻要執行多次才可。
實在是找不出錯誤,不過我懷疑是不是我不熟悉delet或select的限制,還是速度問題
請大大指教。

(以下是程式碼,另有附加檔案)
Sub 按鈕6_Click()

    Sheets("Sheet1").Select
    x = Application.WorksheetFunction.CountA(Range("A:A")) '欄位有值範圍計算
    For i = 2 To x
        If Range("C" & i).Formula = "櫃" Then
           Range("A" & i, "D" & i).Select
          Selection.Delete Shift:=xlUp
        End If
    Next
End Sub

test.rar (124.48 KB)

TOP

        靜思自在 : 【時間成就一切】時間可以造就人格,可以成就事業,也可以儲積功德。
返回列表 上一主題