台灣最大程式設計社群網站
線上人數
775
 
會員總數:245217
討論主題:189089
歡迎您免費加入會員
討論區列表 >> office VBA / WinOS >> excel vba 複製貼上幾次後就會變慢當掉
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
excel vba 複製貼上幾次後就會變慢當掉
價值 : 100 QP  點閱數:1989 回應數:1

樓主

stacy
門外漢
0 1
32 0
發送站內信

想請教大家,下面的程式在跑個5-10次後就會變的越來越慢,主要都是卡在.copy的動作上,不知道是否那邊有bug...
在WIN7,XP執行都會,EXCEL都是2007。

程式主要運作是:
假如想在第5列(隨機)的地方插入列,因表格位置不想被使用者更動,所以用下面的程式作複製貼上來做到增加列的感覺
但跑了幾次後就會變慢甚至當掉也打不開了。

備註:複製貼上的範圍中有包含到公式
=INDEX(良率!$F$1:$I$100,ROW($O5),MATCH($B$2,良率!$F$4:$I$4,0))→這個對應的良率欄位是用陣列公式算的
=IFERROR(SUM($Q5/$P5),"")

Sub 增加列數()
Application.ScreenUpdating = False '隱藏執行視窗提高執行速度,需再將之顯示
Application.DisplayAlerts = False '關閉對話視窗 不跳出確認視窗
Application.Calculation = xlManual '手動計算公式

Dim r, r1, r2, end_r As Integer

'==欄位設定(完整記錄在thisworkbook-OPEN中)==

ReDim cc(1 To Sheets("欄位對照").Range("A65536").End(xlUp).Row, 1 To 2)
For i = LBound(cc) To UBound(cc)
cc(i, 1) = Sheets("欄位對照").Cells(i, 1).Value
cc(i, 2) = i
Next
end_c = UBound(cc)
'==欄位設定end==

end_r = Range("H65536").End(xlUp).Row

r1 = Selection.Rows(1).Row + 1 '滑鼠的下一列
r = Selection.Rows.Count '選了幾列

If r1 <= end_r Then '若停在最後一列,不用搬移資料

'將滑鼠的下一列複製往下r列後貼上→這列LAG最嚴重
Range(Cells(r1, 1), Cells(end_r, end_c)).Copy Range(Cells(r1 + r, 1), Cells(r1 + r, end_c))

'將滑鼠的下一列到r列資料清除
Range(Cells(r1, 1), Cells((r1 + r) - 1, end_c)).ClearContents

End If

'將滑鼠的列派工部份資料貼滿r列
'===貼上內容 r1 - 1, r1 - 1, r1, (r1 + r) - 1
Range(Cells(r1 - 1, 1), Cells(r1 - 1, cc(12, 2))).Copy Range(Cells(r1, 1), Cells((r1 + r) - 1, cc(12, 2)))
'===貼上內===


Application.Calculation = xlAutomatic '手動計算公式
Application.ScreenUpdating = True '隱藏執行視窗提高執行速度,需再將之顯示
Application.DisplayAlerts = True '關閉對話視窗 不跳出確認視窗

End Sub

<pre lang="vb">

搜尋相關Tags的文章: [ vba ] , [ 複製 ] , [ 速度 ] , [ 慢 ] ,
本篇文章發表於2017-03-22 17:47
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

kk
檢舉此回應
經常複製並貼上的活頁簿之間所致過多的樣式。
https://support.office.com/zh-hk/article/excel-%E6%B2%92%E6%9C%89%E5%9B%9E%E6%87%89%E3%80%81%E6%87%B8%E6%BB%AF%E3%80%81%E5%87%8D%E7%B5%90%E6%88%96%E5%81%9C%E6%AD%A2%E9%81%8B%E4%BD%9C-37e7d3c9-9e84-40bf-a805-4ca6853a1ff4
本篇文章回覆於2019-10-30 19:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.