1.在excel工作表內執行巨集時,圖表無法即時更新,如果按"股票搜尋多筆"(本次將廻圈設定為三筆)只有在最後一筆執後才能更新
2.按"回輸入"==>按"單筆"都可以正常顯示
3.是否有解決方案?
檔案下載連結:
https://drive.google.com/file/d/17BhJTWtu1mEEdwIy93yO8Ke8XwxFu8JD/view?usp=share_link
對檔案按右鍵==>先解除封鎖才能正常使用
你的執行是正常的,我的還是不正常,影片如下:
https://drive.google.com/file/d/18XM7tIqoHXQwprUsVajfGs4cQvpWvM8R/view?usp=share_link
1.活頁簿應該要將資料與計算分開來,否則在同一頁中有快50萬筆資料,又要在旁邊欄位做運算時,效能會整個被拖慢。
效能比較影片如下,前半段是你原始的EXCEL,除了製圖畫面卡頓之外,在換代碼重新篩選資料的時候,CPU每次都要100%狂飆....
後半段是我調整過結構的,你比較看看差別:
https://drive.google.com/file/d/1kY1GCV7_0wZhoiP3_OTlgBzhyNYvDuG0/view?usp=sharing
調整過的EXCEL檔案如下:
https://drive.google.com/file/d/1KflS64FiMDFa4h6rkrzslR1xmBNrXJow/view?usp=sharing
2.如果你的還是不正常,那可能是你的EXCEL設定要調整,記得也要重新開機一下試試。
如果電腦太慢了,換別台電腦試試看吧~(PS.我的CPU是i5-4210U)
1.只放2個股票共453筆 2.把其他不重要的先剔除,確保無其他因素的干擾(重新製圖,只放一個圖表) 3.第一次將資料先停留在第一筆,最後一筆執行後應該會更新
4.第二次將資料先停留在第二筆,最後一筆執行後所有資料都不會更新(只更新一次,因為都最後一筆所以不會更新) (下方的cpu及記憶體監也沒有異常)
影片如下:
https://drive.google.com/file/d/19eTqWGY7I0TXV_t5aHYHPAOPSrE0XJ28/view?usp=share_link
也附上檔案:
https://drive.google.com/file/d/1o5ydq3HfkKup86M_vlBADidkKZeh5Y_j/view?usp=share_link
應該是圖表有更新但是畫面看不出來(不知什麼地方卡住)
我知道問題了~
因為我用的是EXCEL 2010,vba畫圖更新沒問題,剛才用EXCEL 2016測試就出現一樣的狀況。2016以後的版本繪圖機制有變更。
你在更新table的後面加兩個DoEvents,讓他有時間畫圖即可搞定
Range("f2").Value = Range(mystock).Value
Application.CutCopyMode = False
Range("A1:D500000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Range("F1:I2"), CopyToRange:=Range("F4:I4"), Unique:=False
DoEvents
DoEvents
Range("ad1").Select
Application.Wait (Now + TimeValue("0:00:5"))
Range("aa1").Select
Application.Wait (Now + TimeValue("0:00:1"))
Range("ab1").Select
Application.Wait (Now + TimeValue("0:00:1"))
Application.Wait (Now + TimeValue("0:00:1"))
Range("ac1").Select
Application.Wait (Now + TimeValue("0:00:5"))
Else
End If
Beep
Next i
Beep
Application.Wait (Now + TimeValue("0:00:1"))
Beep
Application.Wait (Now + TimeValue("0:00:1"))
Beep
End Sub
單筆的查詢部分可以修改如下:
使用Range(ActiveCell.Address).Value,這樣查單筆只需要一個按鈕一隻副程式,會自動搜尋游標所在位置的儲存格內容代號,就不用那麼多副程式了。
Sub 第1筆()
If Len(Range(ActiveCell.Address).Value) >= 4 Then
Range("f2").Value = Range(ActiveCell.Address).Value
Application.CutCopyMode = False
Range("A1:D500000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Range("F1:I2"), CopyToRange:=Range("F4:I4"), Unique:=False
Else
End If
Next i
Beep
End Sub
感謝大大,實在太強了!,完美解決了,感謝!,另外這個用游標處來選值實在好用,每一欄都可以是自選股(更有彈性),我把程式碼補齊
Sub 第1筆游標()
For i = 1 To 10
If Len(Range(ActiveCell.Address).Value) >= 4 Then
Range("f2").Value = Range(ActiveCell.Address).Value
Application.CutCopyMode = False
Range("A1:D500000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Range("F1:I2"), CopyToRange:=Range("F4:I4"), Unique:=False
DoEvents '讓他有時間畫圖
DoEvents
Application.Wait (Now + TimeValue("0:00:5")) '停五秒
Else
End If
Range(ActiveCell.Address).Offset(1, 0).Select '往下一格
Next i
Beep
End Sub