File Excel nặng quá làm cho không thể chạy nổi nữa (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thanhpt204

Thành viên mới
Tham gia
25/7/12
Bài viết
14
Được thích
1
Donate (Momo)
Donate
Giới tính
Nữ
Nghề nghiệp
Kế toán
File kế toán bằng Excel của mình đang làm bị quá nặng, bạn nào có cách nào làm cho chạy nó nhẹ bớt và chạy nhanh hơn giúp mình khồng, từ sáng đến giờ chả làm gì được với nó cả. hichic.
Cả nhà cấp cứu hộ mình với.
 
99% file đó bị vỉrus nên nặng. Cần xóa Name rác, ẩn... Nếu dùng xls thì chuyển sang xlsx là giảm đáng kể đó
 
Chuyển từ xls sang xlsx là như thế nào vậy bác, có phải save as sang file khác dưới định dạng đó ah
Em có làm rồi mà không được bác ah. Làm thế nào để có thể xóa được các Name rác ah. Vì file này của em rất nhiều công thức.
 
Lần chỉnh sửa cuối:
Trong Diễn đàn bàn nhiều rôì, bạn tìm kiếm là ra ngay.
 
File kế toán bằng Excel của mình đang làm bị quá nặng, bạn nào có cách nào làm cho chạy nó nhẹ bớt và chạy nhanh hơn giúp mình khồng, từ sáng đến giờ chả làm gì được với nó cả. hichic.
Cả nhà cấp cứu hộ mình với.

Bạn thử dùng code này để xóa name rác trong 1 Workbook nhé.

Mã:
Sub Xuan()
'thu tuc xoa name rac
Dim Namerac As Name
For Each Namerac In ThisWorkbook.Names
If Namerac.Visible = False Then
Namerac.Delete
End If
Next
End Sub
 
Bạn thử dùng code này để xóa name rác trong 1 Workbook nhé.

Mã:
Sub Xuan()
'thu tuc xoa name rac
Dim Namerac As Name
For Each Namerac In ThisWorkbook.Names
If Namerac.Visible = False Then
Namerac.Delete
End If
Next
End Sub
Cái này là xóa các name bị ẩn đâu phải là name rác ?
 
Thì xóa Nam rác đơn giản mà bác, chỉ cần chọn Name with Errors rồi xóa toàn bộ là được
 
Thầy có thể viết cụ thể câu lệnh đó giúp

Cái này thủ công (nếu viết code phải tìm các ký tự lỗi), code làm gì bác. Bác vào tab Formulas/Name Manager/Filter/Names with Errors. Danh sách tên lỗi hiện ra, bác chọn Name đầu tiên và bấm Ctrl+End để chọn toàn bộ và xoá là được.
 
File kế toán bằng Excel của mình đang làm bị quá nặng, bạn nào có cách nào làm cho chạy nó nhẹ bớt và chạy nhanh hơn giúp mình khồng, từ sáng đến giờ chả làm gì được với nó cả. hichic.
Cả nhà cấp cứu hộ mình với.
File này chắc không phải do name rác mà là các shapes của phần mềm.
Thử file này xem có giúp gi được cho bạn không
Trong excel 2007 có chức năng xoá name lỗi và name rác. Nhưng cũng phải chạy code cho hiện name ẩn ra rồi mới xoá được. Nhớ sao lưu dự phòng trước khi quậy nhé.
 

File đính kèm

File này chắc không phải do name rác mà là các shapes của phần mềm.
Thử file này xem có giúp gi được cho bạn không
Trong excel 2007 có chức năng xoá name lỗi và name rác. Nhưng cũng phải chạy code cho hiện name ẩn ra rồi mới xoá được. Nhớ sao lưu dự phòng trước khi quậy nhé.
Các Bạn có thể giúp mình sửa code xóa hinh chỉ trong 1 sheet có được kg, vì trong File của mình còn rất nhiều hình khác, mình kg muốn nó bị xóa! Cảm ơn các bạn!
 
Các Bạn có thể giúp mình sửa code xóa hinh chỉ trong 1 sheet có được kg, vì trong File của mình còn rất nhiều hình khác, mình kg muốn nó bị xóa! Cảm ơn các bạn!
Code này chỉ xóa các hình trong sheet hiên hành
PHP:
Sub xoa_shape()
Dim hinh As Shape
   For Each hinh In ActiveSheet.Shapes
      hinh.Visible = True
      hinh.Delete
   Next
End Sub
 
File này chắc không phải do name rác mà là các shapes của phần mềm.
Thử file này xem có giúp gi được cho bạn không
Trong excel 2007 có chức năng xoá name lỗi và name rác. Nhưng cũng phải chạy code cho hiện name ẩn ra rồi mới xoá được. Nhớ sao lưu dự phòng trước khi quậy nhé.
Hi anh, hôm nay đọc bài này em thấy có vấn đề muốn giải quyết
Em có 1 gút mắc là làm sao khi xóa hình mà mình vẫn giữ được những cái cần giữ
Em ví dụ: Tại cột C của sheet MA, bắt đầu từ C2 trở xuống em sẽ liệt kê tòan bộ tên như: Picture16, AutoShape 100, Line 1, Button 19 ... (tên này em chọn Object, rồi copy tên ở khung hiển thị địa chỉ, nằm gần khung Fomulas)
Như vậy khi chạy code thì những Object nào kg có tên ở cột C thì sẽ bị xóa, còn cái nào có tên thì vẫn giữ lại! khg biết có được kg nhỉ? Vì trong File em có thể có những hình hay Objects lạ mà em không kiểm sóat được (vì do người khác dùng file nên hay copy lung tung)!
Hặc giả có code nào đếm số lượng Objects trong 1 Sheet thì sẽ phát hiện có Objects lạ trong Sheet
Em cảm ơn!
 
Hi anh, hôm nay đọc bài này em thấy có vấn đề muốn giải quyết
Em có 1 gút mắc là làm sao khi xóa hình mà mình vẫn giữ được những cái cần giữ
Em ví dụ: Tại cột C của sheet MA, bắt đầu từ C2 trở xuống em sẽ liệt kê tòan bộ tên như: Picture16, AutoShape 100, Line 1, Button 19 ... (tên này em chọn Object, rồi copy tên ở khung hiển thị địa chỉ, nằm gần khung Fomulas)
Như vậy khi chạy code thì những Object nào kg có tên ở cột C thì sẽ bị xóa, còn cái nào có tên thì vẫn giữ lại! khg biết có được kg nhỉ? Vì trong File em có thể có những hình hay Objects lạ mà em không kiểm sóat được (vì do người khác dùng file nên hay copy lung tung)!
Hặc giả có code nào đếm số lượng Objects trong 1 Sheet thì sẽ phát hiện có Objects lạ trong Sheet
Em cảm ơn!

Thì bạn chỉnh lại code Quang Hai tí thôi:
Mã:
Sub xoa_shape()
  Dim aShp, tmp As String, hinh As Shape
  aShp = Array("Picture16", "AutoShape 100", "Line 1", "Button 19")
  tmp = vbBack & Join(aShp, vbBack) & vbBack
  For Each hinh In ActiveSheet.Shapes
    If InStr(tmp, hinh.Name) = 0 Then
      hinh.Visible = True
      hinh.Delete
    End If
 Next
End Sub
aShp = Array("Picture16", "AutoShape 100", "Line 1", "Button 19") nghĩa là bạn phải liệt kê ra những object nào muốn giữ lại tại đây
--------------------------------------
Còn nếu muốn giữ lại những object tại vùng nào đó (C2:C1000 chẳng hạn mà không cần biết object tên gì) thì dùng code khác:
Mã:
Function ShapeRange(ByVal wks As Worksheet, ByVal shp As Shape) As Range
  On Error Resume Next
  Set ShapeRange = wks.Range(shp.TopLeftCell, shp.BottomRightCell)
End Function
Mã:
Sub DelShape()
  Dim shpRng As Range, shp As Shape, wks As Worksheet
  On Error Resume Next
  Set wks = ActiveSheet
  For Each shp In wks.Shapes
    Set shpRng = ShapeRange(wks, shp)
    If Intersect(shpRng, Range("C2:C1000")) Is Nothing Then
      shp.Visible = True
      shp.Delete
    End If
  Next
End Sub
 
Lần chỉnh sửa cuối:
--------------------------------------
Còn nếu muốn giữ lại những object tại vùng nào đó (C2:C1000 chẳng hạn mà không cần biết object tên gì) thì dùng code khác:
Mã:
Function ShapeRange(ByVal wks As Worksheet, ByVal shp As Shape) As Range
  On Error Resume Next
  Set ShapeRange = wks.Range(shp.TopLeftCell, shp.BottomRightCell)
End Function
Mã:
Sub DelShape()
  Dim shpRng As Range, shp As Shape, wks As Worksheet
  On Error Resume Next
  Set wks = ActiveSheet
  For Each shp In wks.Shapes
    Set shpRng = ShapeRange(wks, shp)
    If Intersect(shpRng, Range("C2:C1000")) Is Nothing Then
      shp.Visible = True
      shp.Delete
    End If
  Next
End Sub
Thầy nói rõ thêm cách sử dụng hàm và code trên ạ!
Em cảm ơn!
 
Thầy nói rõ thêm cách sử dụng hàm và code trên ạ!
Em cảm ơn!

Thì copy code trên cho vào Module, xong chạy Sub DelShape là được rồi
Chỉ cần lưu ý chổ này:
If Intersect(shpRng, Range("C2:C1000")) Is Nothing Then
C2:C1000 là vùng chứa Shape mà bạn muốn giữ lại
 
Thì bạn chỉnh lại code Quang Hai tí thôi:
Mã:
Sub xoa_shape()
  Dim aShp, tmp As String, hinh As Shape
  aShp = Array("Picture16", "AutoShape 100", "Line 1", "Button 19")
  tmp = vbBack & Join(aShp, vbBack) & vbBack
  For Each hinh In ActiveSheet.Shapes
    If InStr(tmp, hinh.Name) = 0 Then
      hinh.Visible = True
      hinh.Delete
    End If
 Next
End Sub
aShp = Array("Picture16", "AutoShape 100", "Line 1", "Button 19") nghĩa là bạn phải liệt kê ra những object nào muốn giữ lại tại đây
Ô! cách này hay quá, nhưng sao mình thấy fải chạy code cho từng Sheet một, File của mình quá nhiều Sheet! Làm sao để nó chạy 1 lần cho 1 File kg nhỉ? mình cù lần cái vụ này! Bạn giúp mình nha! Xin cảm ơn rất nhiều!
 
Ô! cách này hay quá, nhưng sao mình thấy fải chạy code cho từng Sheet một, File của mình quá nhiều Sheet! Làm sao để nó chạy 1 lần cho 1 File kg nhỉ? mình cù lần cái vụ này! Bạn giúp mình nha! Xin cảm ơn rất nhiều!
Thì thử như vầy xem
Mã:
Sub xoa_shape()
  Dim aShp, tmp As String, hinh As Shape
  Dim ws As Worksheet
  aShp = Array("Picture16", "AutoShape 100", "Line 1", "Button 19")
  tmp = vbBack & Join(aShp, vbBack) & vbBack
  For Each ws In Worksheets
    For Each hinh In ws.Shapes
        If InStr(tmp, hinh.Name) = 0 Then
            hinh.Visible = True
            hinh.Delete
        End If
    Next
  Next
End Sub
 
Thì thử như vầy xem
Mã:
Sub xoa_shape()
  Dim aShp, tmp As String, hinh As Shape
  Dim ws As Worksheet
  aShp = Array("Picture16", "AutoShape 100", "Line 1", "Button 19")
  tmp = vbBack & Join(aShp, vbBack) & vbBack
  For Each ws In Worksheets
    For Each hinh In ws.Shapes
        If InStr(tmp, hinh.Name) = 0 Then
            hinh.Visible = True
            hinh.Delete
        End If
    Next
  Next
End Sub
Em mới phát hiện 1 điều thú vị: Code trên & code của Thần Ndu (bài 14), nó xóa bén List của validation, và điểm đặc biệt nữa là nó không cho phục hồi List của validation!!!!!
Hic, em có một số sheet bị như vậy!
Cho em hỏi:
1/Có cách nào để phục hồi List của validation nói trên
2/ Sửa code trên để nó kg xóa List của validation, hay Combobox ....
Em cảm ơn!
 
Em mới phát hiện 1 điều thú vị: Code trên & code của Thần Ndu (bài 14), nó xóa bén List của validation, và điểm đặc biệt nữa là nó không cho phục hồi List của validation!!!!!
Hic, em có một số sheet bị như vậy!
Cho em hỏi:
1/Có cách nào để phục hồi List của validation nói trên
Cái này dễ:
- Khởi động Excel
- Bấm Open và duyệt đến file của bạn
- Bấm mũi tên xổ xuống cạnh nút Open, chọn Open and Repair
2/ Sửa code trên để nó kg xóa List của validation, hay Combobox ....
Em cảm ơn!
Shape là nói chung tất cả các object. Để phân biệt từng loại, ta phải viết code "chỉ" trực tiếp đến loại đó
Ví dụ:
Mã:
Sub Test()

 Dim wks As Worksheet
 Set wks = ActiveSheet
 wks.Rectangles.Delete  ''<--- Xóa những shape thuộc loại Rectangle
 wks.Pictures.Delete      ''<--- Xóa những shape thuộc loại Picture

End Sub
vân vân...
Hoặc có thể dùng Type Property để xác định kiêu object
Mã:
Sub Test2()
  Dim shp As Shape
  For Each shp In ActiveSheet.Shapes
    MsgBox shp.Type, , shp.Name
  Next shp
End Sub
Vẽ nhiều loại object trên sheet rồi chạy code trên để xem chúng có Type là gì, từ đó mà loại trừ
----------------------------------------------
Code trên & code của Thần Ndu (bài 14)....
Mình được PHONG THẦN lúc nào không biết
 
Lần chỉnh sửa cuối:
Cái này dễ:
- Khởi động Excel
- Bấm Open và duyệt đến file của bạn
- Bấm mũi tên xổ xuống cạnh nút Open, chọn Open and Repair

Shape là nói chung tất cả các object. Để phân biệt từng loại, ta phải viết code "chỉ" trực tiếp đến loại đó
Ví dụ:
Mã:
Sub Test()

 Dim wks As Worksheet
 Set wks = ActiveSheet
 wks.Rectangles.Delete  ''<--- Xóa những shape thuộc loại Rectangle
 wks.Pictures.Delete      ''<--- Xóa những shape thuộc loại Picture

End Sub
vân vân...
Hoặc có thể dùng Type Property để xác định kiêu object
Mã:
Sub Test2()
  Dim shp As Shape
  For Each shp In ActiveSheet.Shapes
    MsgBox shp.Type, , shp.Name
  Next shp
End Sub
Vẽ nhiều loại object trên sheet rồi chạy code trên để xem chúng có Type là gì, từ đó mà loại trừ
Em đã làm theo những điều trên, và nó fát sinh 1 lỗi mới như sau:
Mở File của em vào Sheet TH, bấm nút "xóa hình" sau đó chọn cell D15 (cell này có Comment) thì File tự thóat Excel và khởi động lại, ĐÂY LÀ LỖI MÀ EM SỢ NHẤT!
cho em hỏi:
1/ Làm sao khắc fục lỗi trên?
2/ Trong 1 Fie có quá nhiều Comment thì làm sao liệt kê hết, có cách nào cho nó gọn không?
em cảm ơn!
'***************
----------------------------------------------

Mình được PHONG THẦN lúc nào không biết
Hì, em viết nhầm
Theo em nghĩ, BQT của GPE củng nên có 1 trang riêng để giới thệu "Quá trình hình thành & phát triển của GPE", 1 fần nói lên công lao đóng góp cho diễn đàn phát triển, trong đó có những người như Thầy & các Thầy cô & anh chị khác đã bỏ bao nhiêu công sức để có những bài viết hướng dẫn, phân tích ... & tìm tòi nâng cao mà không vụ lợi!. Vì Mr. Bill có sáng chế ra 1 chiếc Ô-tô đẹp và tiện nghi, nhưng kg có ai hướng dẫn để sử dụng nó thì chiếc xe này chỉ nằm ở fòng trưng bày mà thôi!

Như vậy, Thầy & những người khác được bầu là CÔNG THẦN của trang GPE thì đâu có gì quá đáng nhỉ!
Trên đây là những ý kiến thiển cận của em mà thôi, nếu có gì chưa đúng xin BQT GPE & các Thầy cô, anh chị bỏ qua!
Em cảm ơn!
 

File đính kèm

Em đã làm theo những điều trên, và nó fát sinh 1 lỗi mới như sau:
Mở File của em vào Sheet TH, bấm nút "xóa hình" sau đó chọn cell D15 (cell này có Comment) thì File tự thóat Excel và khởi động lại, ĐÂY LÀ LỖI MÀ EM SỢ NHẤT!
cho em hỏi:
1/ Làm sao khắc fục lỗi trên?

Chắc Office của bạn có vấn đề chứ tôi thử trên máy tôi làm gì có chuyện tự thoát
(Chắc dùng thằng 2007 tào lao đây)
---------------------------------
2/ Trong 1 Fie có quá nhiều Comment thì làm sao liệt kê hết, có cách nào cho nó gọn không?
em cảm ơn!
Muốn liệt kê thì bạn cứ dùng vòng lập mà làm thôi (trong tầm tay bạn)... Còn chuyện GỌN gì gì đó tôi không hiểu (ý bạn muốn gọn nghĩa là thế nào?)
 
Vậy với trường hợp của mình thì xử lý thế nào đc các bác. Tình hình là e đã tìm hiểu và biết được nguyên nhân file này của em bị nặng là do số lượng Object quá lớn. Đến nỗi sử dụng cách nào cũng ko thể xóa đc. Cả dùng bằng lệnh, cả dùng bằng tay, cả Ctrl + G... cứ mỗi lần thao tác xong thì xoay mãi xoay mãi (ko biết đến lúc nào), dùng đoạn code trên vẫn treo :(. Các bác có cách nào khác ngoài cut sang một file khác không. Thanks. Link file đây ah.

http://www.mediafire.com/?z70c4bll70gy5yp

Hình như nó có tới gần 4k các shapes thì phải.
 
Vậy với trường hợp của mình thì xử lý thế nào đc các bác. Tình hình là e đã tìm hiểu và biết được nguyên nhân file này của em bị nặng là do số lượng Object quá lớn. Đến nỗi sử dụng cách nào cũng ko thể xóa đc. Cả dùng bằng lệnh, cả dùng bằng tay, cả Ctrl + G... cứ mỗi lần thao tác xong thì xoay mãi xoay mãi (ko biết đến lúc nào), dùng đoạn code trên vẫn treo :(. Các bác có cách nào khác ngoài cut sang một file khác không. Thanks. Link file đây ah.

http://www.mediafire.com/?z70c4bll70gy5yp

Hình như nó có tới gần 4k các shapes thì phải.

File của bạn có trên 100,000 shape, nặng là phải rồi
Đã "dọn sạch" cho bạn rồi đấy!
Từ 20MB chỉ còn lại 56KB, khiếp thật!
 

File đính kèm

Hix cảm ơn bác. Bác có thể chỉ e cách làm đc không. Ở cty e có đến cả trăm file bị như vậy. Máy e cấu hình cũng khủng nhưng đụng vào là treo thôi.
 
Hix cảm ơn bác. Bác có thể chỉ e cách làm đc không. Ở cty e có đến cả trăm file bị như vậy. Máy e cấu hình cũng khủng nhưng đụng vào là treo thôi.

Dùng code xóa thôi, nhưng xóa 1 lần 10000 object thôi (xóa hết 1 lần nó treo)
Ví dụ
Mã:
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
Đứng tại 1 sheet nào đó, gọi code chạy... chờ 1 lúc sẽ xuất hiện thông báo. Nhìn thông báo, nếu thấy vẫn còn object thì chạy code tiếp đến khi nào thấy thông báo "Còn 0 objects" thì thôi
Chuyển sang sheet khác và chạy code tiếp... (Làm vậy với tất cả các sheet)
 
Dùng code xóa thôi, nhưng xóa 1 lần 10000 object thôi (xóa hết 1 lần nó treo)
Ví dụ
Mã:
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
Đứng tại 1 sheet nào đó, gọi code chạy... chờ 1 lúc sẽ xuất hiện thông báo. Nhìn thông báo, nếu thấy vẫn còn object thì chạy code tiếp đến khi nào thấy thông báo "Còn 0 objects" thì thôi
Chuyển sang sheet khác và chạy code tiếp... (Làm vậy với tất cả các sheet)

OK OK..Em làm đc rồi... :)) Thanks bác ndu96081631 nhiều nhé.
 

Bài viết mới nhất

Back
Top Bottom