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.
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.
a tài thật đó, e cố gắng ngồi run cả buổi trưa mà chẳng thấm vào đâu (chắc do máy của e cùi hơn)File của bạn chứa trên 50000 "cục đá" nên nó "nặng" là phải rồi
Đã dọn dẹp giúp bạn
a tài thật đó, e cố gắng ngồi run cả buổi trưa mà chẳng thấm vào đâu (chắc do máy của e cùi hơn)
Code mà tôi dùng chỉ có vầy:có phải a dùng code để xóa như PTH đã nói ko? cho e xin đoạn code đó với. Thanks a!
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
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ỉ.Code mà tôi dùng chỉ có vầy:
Cứ chạy code đến khi nào nhận được thông báo "Còn 0 objects" thì ngưngMã: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ũ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áySố 10000 trong code có thể thay bởi wks.Shapes.Count thì khỏi phải chạy nhiều lần anh nhỉ.
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ỉ.
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
Do bác ndu lười thôi , dùng For each là chuẩn nhất:
Mã: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
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... Ẹ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)
Ẹ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)
Hic, em chưa hiểu lý do máy đơ? Hay với kiểu vòng lặp For each cho tập hợp nhiều Shape thì máy hoạt động kém. Có bạn nào test thử chưa?
Do while wks.Shapes.Count > 0
wks.Shapes(wks.Shapes.Count).Delete
Loop
k = wks.Shapes.Count
Do while k > 0
wks.Shapes(k).Delete
k = k - 1
Loop
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ư
Mã:Do while wks.Shapes.Count > 0 wks.Shapes(wks.Shapes.Count).Delete Loop
Hoặc tốt hơn
Mã: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ố.
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
Tạm thời mình phát hiện file của bạn có nhiều name rác vì đang dùng máy cài office 2003.Em cũng bị hiện tượng một số file excel bị tăng dung lượng mặc dù dữ liệu rất ít. Nhờ mọi người giúp đỡ. Em gửi kèm theo một trong số các file đó.
Nếu dùng excel 2007 trở lên thì việc xóa name rác rất đơn giản.Có cách nào nhanh hơn không ạ? Xóa bằng tay từng cái thì rất lâu, mà mình bị nhiều file như thế này.