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.
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.
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 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 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!
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!
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
--------------------------------------
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ì 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
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!
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
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
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ừ
----------------------------------------------
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!
'***************
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!
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?
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.
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.
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)