File Excel khi làm rất nặng

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Nhờ mọi người giúp dùm mình có 2 file Exel khi mở ra để làm và trong quá trình làm thì nó rất chậm. Cám ơn nhiều.

Cái đó chưa chắc đâu. Máy tôi chỉ là con Core2 – 2.2GHz, RAM 2GB —> Thuộc dạng bèo và tôi không nghĩ cấu hình này có thể hơn máy bạn (vì máy tôi mua lâu rồi)
—————————-

có phải a dùng code để xóa như PTH đã nói ko? cho e xin đoạn code đó với. Thanks a!

Code mà tôi dùng chỉ có vầy:

Sub DelObjects()
  Dim i As Long, wks As Worksheet
  On Error Resume Next
  Set wks = ActiveSheet
  For i = 1 To 10000
    wks.Shapes(1).Delete
  Next
  MsgBox "Còn " & wks.Shapes.Count & " objects"
End Sub

Cứ chạy code đến khi nào nhận được thông báo "Còn 0 objects" thì ngưng

Số 10000 trong code có thể thay bởi wks.Shapes.Count thì khỏi phải chạy nhiều lần anh nhỉ.

Cũng tùy theo máy mạnh thì mình cách này máy yếu nên gắt từng đoạn mà xử giống như bó đũa lấy từng chiếc ra mà bẻ sẽ dễ hơn để nguyên bó anh Phúc? Em thì dùng cách ngắt từng đoạn để đỡ bị treo máy

Do bác ndu lười thôi –=0, dùng For each là chuẩn nhất:

Sub ShapesDelete() 
  Dim Obj As Shape 
  For Each Obj In ActiveSheet.Shapes 
    If Obj.Visible = msoFalse Then 
      Obj.Delete  'Xóa đối tượng Shape bị ẩn, do virus tạo ra 
    End If 
  Next 
  Set Obj = Nothing 
End Sub

Ẹc… Ẹc… Đó là vì các bạn ít khi đụng đến mấy "cục đá" này nên nghĩ vậy. Nếu mà sửa như Phúc và thầy Hướng, bảo đảm máy đơ luôn
Tóm lại: Phài xóa từ từ và con số 10000 là giới hạn mà tôi thí nghiệm ra (trên mấy tôi)

Đúng rồi. Luật chung của dọn rác đống khổng lồ là dọn từ từ từng vùng một.
Nếu bạn vẫn muốn delete một loạt thì nên làm ngược từ số lớn trở về số nhỏ – với hy vọng tránh được tình trạng index hoặc bộ nhớ bị sắp xếp lại thường xuyên – tôi không chắc có hiệu nghiệm không, nhưng nguyên tắc của delete vẫn là vậy.

Máy tôi yếu nên đã đơ từ khi mở tập tin rồi. Vậy không test được, chỉ "võ mồm" thôi.

Dứt khoát là đã Delete tất cả thì làm trong vòng lặp và luôn delete "phần tử cuối". Delete phần tử cuối là đúng bài bản.
Để khỏi phân tích cụ thể thì cứ nghĩ nôm na là nếu ta có 1 hàng học sinh và nếu cứ bỏ từng em đứng cuối thì rồi sẽ hết học sinh. Cũng có thể bỏ từng em thứ 1 nhưng như thế thì sau mỗi lần bỏ thì toàn bộ "hàng hiện hành" phải dịch lên đầu 1 "chỗ".

Tôi tin chắc rằng nếu ai có máy mạnh thì có thể test 2 kiểu delete và theo tôi kiểu luôn delete cuối là nhanh hơn.

Kiểu như

Do while wks.Shapes.Count > 0
    wks.Shapes(wks.Shapes.Count).Delete
Loop

Hoặc tốt hơn

k = wks.Shapes.Count
Do while k > 0
    wks.Shapes(k).Delete
    k = k - 1
Loop

Tôi không rõ với For Each thì các đối tượng được duyệt theo thứ tự nào. Chắc theo thứ tự tăng dần của chỉ số.

e đã test code trên

Sub Siwtom_Xoa()
k = ActiveSheet.Shapes.Count
Application.ScreenUpdating = False
    Do While k > 0
        ActiveSheet.Shapes(k).Delete
        k = k - 1
        'Tong: 58.559
        If k = 45000 Then MsgBox ("con ") & k
        If k = 40000 Then MsgBox ("con ") & k
        If k = 30000 Then MsgBox ("con ") & k
        If k = 20000 Then MsgBox ("con ") & k
        If k = 10000 Then MsgBox ("con ") & k
        If k = 1000 Then MsgBox ("con ") & k
    Loop
Application.ScreenUpdating = True
End Sub

time:
9h19 -> 9h24 con 40.000
9h24 -> 9h28 con 30.000
9h28 -> 9h32 con 20.000
9h32 -> 9h33 con 10.000
9h33 -> 9h34 con 1000
—> càng về sau xoá càng nhanh

www.giaiphapexcel.com/diendan/threads/file-excel-khi-l%C3%A0m-r%E1%BA%A5t-n%E1%BA%B7ng.90153/

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Khóa học SprinGO phù hợp

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ

Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

Bình luận

Quảng cáo

Cũ vẫn chất

Xem thêm