iT邦幫忙

0

excel工作表內執行巨集時,圖表無法即時更新?

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20221224/20156273VZFeqQo6hP.jpg
1.在excel工作表內執行巨集時,圖表無法即時更新,如果按"股票搜尋多筆"(本次將廻圈設定為三筆)只有在最後一筆執後才能更新
2.按"回輸入"==>按"單筆"都可以正常顯示
3.是否有解決方案?
檔案下載連結:
https://drive.google.com/file/d/17BhJTWtu1mEEdwIy93yO8Ke8XwxFu8JD/view?usp=share_link

對檔案按右鍵==>先解除封鎖才能正常使用
https://ithelp.ithome.com.tw/upload/images/20221224/201562736trkHenTym.jpg

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
aaron3399
iT邦好手 1 級 ‧ 2022-12-24 22:29:25
最佳解答
看更多先前的回應...收起先前的回應...
zen2965 iT邦新手 5 級 ‧ 2022-12-25 00:39:10 檢舉

你的執行是正常的,我的還是不正常,影片如下:
https://drive.google.com/file/d/18XM7tIqoHXQwprUsVajfGs4cQvpWvM8R/view?usp=share_link

aaron3399 iT邦好手 1 級 ‧ 2022-12-25 02:44:40 檢舉

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)

zen2965 iT邦新手 5 級 ‧ 2022-12-25 14:10:33 檢舉

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
應該是圖表有更新但是畫面看不出來(不知什麼地方卡住)

aaron3399 iT邦好手 1 級 ‧ 2022-12-25 16:47:18 檢舉

我知道問題了~
因為我用的是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
aaron3399 iT邦好手 1 級 ‧ 2022-12-25 20:19:42 檢舉

單筆的查詢部分可以修改如下:
使用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

https://ithelp.ithome.com.tw/upload/images/20221225/20061361hakunCs3um.jpg

zen2965 iT邦新手 5 級 ‧ 2022-12-25 23:35:04 檢舉

感謝大大,實在太強了!,完美解決了,感謝!,另外這個用游標處來選值實在好用,每一欄都可以是自選股(更有彈性),我把程式碼補齊

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

我要發表回答

立即登入回答