rainbowsperm wrote:
但讀清單跑, 也沒發生錯誤訊息, 但跑了20-30檔, EXCEL就一樣沒反應~~試過重裝excel也不行~~
程式沒寫好
(個股資料匯入範本 - 複製新方法array.xlsm)
一、sub 更新()改成這樣
Sub 更新()
Application.Calculation = xlCalculationManual
ThisWorkbook.Activate
Call 下載財報(ThisWorkbook.Sheets("總覽").Range("J1").Value)
Call 股利政策
Call 改變顏色
Call 股利連續增長
Application.Calculation = xlCalculationAutomatic
End Sub
二、因為是雙活頁薄,會有active、select的問題
在所有的副程式最前面加上一行
ThisWorkbook.Activate
程式裡面所有的位置,需清楚指定
range()、cells()……改成
ThisWorkbook.Sheets("工作表名稱").range...
ThisWorkbook.Sheets("工作表名稱").cells...
三、Sub 股利政策(),漏了除錯功能,會造成程式中斷
goodinfo.tw網站,確定會檔ip,建議取消自動下載
改做一個獨立按鈕,需要時再手動更新
四、sub 下載基本資料3()
www.twse.com.tw網站,確定會檔ip,建議取消自動下載
改做一個獨立按鈕,需要時再手動更新
(all_debug.xlsm)
一、Workbook_Open()改這樣,才不會一直重覆開excel
Private Sub Workbook_Open()
Dim template As Excel.Workbook, lastrow As Integer, i As Integer
If MsgBox("是否進行更新作業?", vbQuestion + vbDefaultButton2 + vbYesNo) = vbNo Then
Exit Sub '取消更新
End If
lastrow = Sheets("倉儲雪球股").Range("a1").CurrentRegion.Rows.Count
Set template = Workbooks.Open(ThisWorkbook.Path & "\" & "個股資料匯入範本 - 複製新方法array.xlsm", , False)
Application.Wait (Now + TimeValue("0:00:10"))
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
For i = 2 To lastrow
template.Activate
template.Sheets(1).Range("J1").Value = Sheets("倉儲雪球股").Cells(i, 1)
DoEvents
Application.Run "'" & template.Name & "'" & "!Module2.更新"
template.SaveAs (ThisWorkbook.Path & "\" & Sheets("倉儲雪球股").Cells(i, 1) & Sheets("倉儲雪球股").Cells(i, 2) & ".xlsm")
'補充:如果電腦效能不好,這裡最好等個1~3秒,等一下excel存檔
Application.Wait (Now + TimeValue("0:00:1"))
Next i
template.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Set template = Nothing
End Sub
另外建議不要分2個檔案下載,可把"all_debug.xlsm"中的"倉儲雪球股"工作表
移到"個股資料匯入範本 - 複製新方法array.xlsm"中
把"workbook_open()"改寫放到"更新()"裡面
這樣就不用開2個excel,除錯更容易
也可參考272樓,做一個簡易的進度提示(百分比)
如果以上都改好,取消2個副程式,我測試可正常跑完1千多筆
(20200501 07:35補充)
早上無聊重新看一下網站 http://sod.nsc.com.tw
查不到資料時,網站會有相關的訊息
(回傳的正確訊息,請自行用查不到資料的股票代碼在網站上測試,例如:3452)
那10多個副程式,可在.responsetext下面,多加上一行 if……then exit sub,提早結束程式,增加效率
HTMLsourcecode.body.innerhtml = .responsetext
If InStr(HTMLsourcecode.body.innerhtml, "無此個股資料") > 0 Or InStr(HTMLsourcecode.body.innerhtml, "查無財務比率表") > 0 Or InStr(HTMLsourcecode.body.innerhtml, "查無所選個股代碼錯誤") >0 Then Exit Sub
至於擋ip的問題,早上試一下,可利用存檔時的延遲時間(我設定1~4秒亂數)
可以從頭跑到完不會中斷