返回列表 上一主題 發帖

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

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

本帖最後由 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.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

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

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)

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

回復 7# GBKEE


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

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

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

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

回復 11# GBKEE

感謝大大,讓我的程式又可以繼續往下寫。
關於捉歷史股價沒捉到的部分,經過一筆一筆的比對,確定是網站無此資料。
另,捉歷史股價方面程式有點不懂,但是關於刪除有關"櫃"的列位
為什麼我那樣子的寫法不行呢?

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

TOP

本帖最後由 spermbank 於 2011-9-26 01:41 編輯

回復 13# GBKEE


    問題2: 如何讀取代號1101.csv第1欄所有日期(data),寫入excel中的sheet2的第1列中,並且讀取所有*.csv檔案中的第5欄(close)的資料,依序對照檔名與第1欄中的代號將第5欄資料寫入各代號的列位中

    紅字部分 請附範例上來

附檔:excel中Sheet2為想要達成的範例,輸入的資料為data資料夾中部分的*.csv
        下載下來的*.csv,可能與Sheet2的代號不一致,因為網路下載的資料不全
        所以想要從下載下來的*.csv與Sheet2代號核對後,並把所有*.csv的第(Close)欄資料轉置到Sheet2中各代號的列位.

Test.rar (319.53 KB)

TOP

本帖最後由 spermbank 於 2011-9-27 00:23 編輯

回復 15# GBKEE

大大謝謝你,程式能順利跑,哈哈,:$
可是發現一個問題,讀取一個csv就會開啟一個excel檔案,導致工作列Excel過多會爆掉,
程式大概可以5分鐘跑完,跑完就恢復正常,還可以等待。
可是是不是有辦法解決這個問題呢??

另外:
12.              Set CsvRange = OpCsv.Sheets(1).Range("A:A").SpecialCells(xlCellTypeConstants).Offset(1) '設定範圍
雖然我看不懂後面的設定,但是可不可以改成
12.              Set CsvRange = OpCsv.Sheets(1).Columns(1).SpecialCells(xlCellTypeConstants).Offset(1) '設定範圍
另外:
                Set CsvRange = OpCsv.Sheets(1).Columns(6).SpecialCells(xlCellTypeConstants).Offset(1)  '設定*.csv檔案中的第6欄(Volume)的資

                TheRow.Offset(, 2).Resize(, CsvRange.Rows.Count) = Application.Transpose(CsvRange)

要怎麼先把第6欄(Volume)所有值都先除以1000再存入Sheet2呢?

TOP

x = Application.WorksheetFunction.CountA(Range("A:A")) '欄位有值範圍計算
    Dim AA(2000, 4)
    For i = 2 To x
        AA(i, 1) = (Cells(i, 3) + Cells(i, 4) + Cells(i, 5) + Cells(i, 6) + Cells(i, 7)) / 5
        AA(i, 2) = Application.WorksheetFunction.Average(Range("A" & i, "V" & i))  '20日-20個儲存格中的數值平均
        AA(i, 3) = Application.WorksheetFunction.Average(Range("A" & i, "BJ" & i)) '60日
        AA(i, 4) = Application.WorksheetFunction.Average(Range("A" & i, "DR" & i)) '120日
    Next

       想做平均值,可是發現只有A(i,1)的數值對
       另外A(i,2)、A(i,3)、A(i,4)的數值都是錯的
       可否請大大幫我解BUG

TOP

        靜思自在 : 能幹不幹,不如苦幹實幹。
返回列表 上一主題