Board logo

標題: [發問] 能否同時執行二個巨集程式 [打印本頁]

作者: conchih    時間: 2011-10-5 11:45     標題: 能否同時執行二個巨集程式

請教各位前輩:

目前使用HTTP抓網路股市資料,1101~9999,需要很多時間(假設4hr)
能否分成二個巨集程式,同時執行
A巨集,抓1101~4999,
B巨集,抓5000~9999
這樣,2hr就可把所有資料抓完
  
而這A.B巨集程式中,會用到的主要指令
1. 假設
"URL;http://tw.stock.yahoo.com/q/q?s=1101”
2.
Workbooks.Open Filename:=1101
3.
Temp.COPY
ActiveSheet.Paste
StockNo.Select
  
因為會用到開啟檔案,和COPY&PASTE;所以二個巨集程式在執行時不能A巨集執行COPY時,B巨集剛好PASTE,造成A巨集的資料(1101)貼到B巨集(5000),這種烏龍情形

想請問一下,或有什麼其它方法
千萬別告訴我,換光纖
感恩
作者: yangtest    時間: 2011-11-14 22:01

回復 1# conchih
依你的想法,二個巨集同時抓資料會比單一巨集來得快!但是你忽略了『頻寬問題』。假設你的頻寬為2M,單一巨集抓資料時,頻寬為2M;但用兩個巨集一起抓資料時,每個巨集僅能使用1M頻寬(總頻寬還是2M)。所以整體來說速度沒變快,根本的解決方法就是提高頻寬!
作者: thps51134    時間: 2011-11-15 10:19

本帖最後由 thps51134 於 2011-11-15 10:24 編輯

回復 1# conchih
 在第三步
    指定兩邊貼到不同sheet? (避免重複paste)

 檢視巨集中有沒有不必要的select跟視點轉換, 給他關掉跟拿掉? (加快速度)

不太正經地回一下,
 微觀來看,一顆CPU同時應該只做一件事吧? (雙核以上不討論)
    所以不懂為什麼兩個巨集會比較快....甚至快到一倍
  不升級網路唷
    那再加個RAM會有幫助嗎? :D (只有copy & paste也差沒多少吧XD)
作者: mark15jill    時間: 2011-11-15 13:06

還有個問題
巨集快捷鍵?
作者: oobird    時間: 2011-11-15 16:31

1101~9999,需要很多時間(假設4hr)
不會吧?要這麼多時間?
1101~9999中真正有數據的只有945筆
我做同樣的操作只有幾分鐘。
  1. Sub Macro1()
  2.     Dim arr(), i%, j%, x, y
  3.     t = Timer
  4.     ActiveSheet.UsedRange.Offset(1, 0) = ""
  5.     For i = 1101 To 9999
  6.         With CreateObject("Microsoft.XMLHTTP")
  7.             .Open "get", "http://tw.stock.yahoo.com/q/q?s=" & i, False
  8.             .send
  9.             On Error Resume Next
  10.             k = .responsetext

  11.             x = Split(Split(k, " href=""/q/bc?s=" & i & "")(1), "<")(0)
  12.             If Err.Number = 0 Then
  13.                 m = m + 1
  14.                 ReDim Preserve arr(1 To 11, 1 To m)
  15.                 arr(1, m) = Mid(x, 2)
  16.                 For j = 1 To 10
  17.                     y = Split(Split(k, "<td align=""center"" bgcolor=""#FFFfff"" nowrap>")(j), "</")(0)
  18.                     arr(j + 1, m) = y
  19.                 Next
  20.                 arr(6, m) = Split(arr(6, m), ">")(1)
  21.             End If
  22.         End With
  23.     Next
  24.     Cells(2, 1).Resize(m, 11) = Application.Transpose(arr)
  25.     MsgBox Timer - t
  26. End Sub
複製代碼

作者: luhpro    時間: 2011-11-17 20:17

回復 1# conchih
因為牽涉到複製與貼上的動作,
所以你的程式在執行期間應該要把複製與貼上連在一起接續執行.

而若是同時執行兩個巨集的話卻不容易同步彼此的執行時間.(網頁讀取是有可能發生 Delay 的)
所以建議你改採先在背景用另一個瀏覽器視窗讀取新的資料,
然後在原先已讀完資料的瀏覽器視窗執行複製與貼上的動作,
接著輪流在兩個視窗執行上述動作,
這樣就可省讀入網頁的時間.(雖然應該還是省的不多)

不過我倒是建議樓主乾脆去證券商開一個證券帳戶,
他們都會提供看盤軟體的.




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