Xóa Name rác.
Mình đã cài Virus Macro Warming của TUAN VNUNI. Khi sử dụng cảnh báo tốt.
Nhưng có 1 số file Excel (Mẫu báo cáo BHXH tải từ Internet ) báo xóa Name rác và mình chọn xóa nhưng chương trình không xóa được hết. Mình vào define–Name để Delete nhưng không được.em tìm được đoạn code này để xoá name ẩn trong file nhưng khi tìm thấy name ẩn phải click "yes" để xác nhận xoá name, nhờ các anh chị sửa code giúp em để tự động xoá name ẩn mà không cần click "yes" để xác nhận xoá từng name không ạ. cảm ơn các anh chị nhiều.
Sub Remove_Hidden_Names() ' Dimension variables. Dim xName As Variant Dim Result As Variant Dim Vis As Variant ' Loop once for each name in the workbook. For Each xName In ActiveWorkbook.Names 'If a name is not visible (it is hidden)... If xName.Visible = True Then Vis = "Visible" Else Vis = "Hidden" End If ' ...ask whether or not to delete the name. Result = MsgBox(prompt:="Delete " & Vis & " Name " & _ Chr(10) & xName.Name & "?" & Chr(10) & _ "Which refers to: " & Chr(10) & xName.RefersTo, _ Buttons:=vbYesNo) ' If the result is true, then delete the name. If Result = vbYes Then xName.Delete ' Loop to the next name. Next xName End SubCode sưu tầm: Xóa các name lỗi trong excel
Sub RemoveBadNames() Dim N As Variant Dim rtn As Variant For Each N In ActiveWorkbook.Names If N.RefersTo Like "*[#]REF*" Then rtn = MsgBox("BAD NAME: Delete name '" & N.Name & "' refersto: '" & N.RefersTo, vbQuestion + vbYesNo) 'rtn = vbYes If rtn = vbYes Then N.Delete ElseIf N.RefersTo Like "*:*" Then rtn = MsgBox("EXTERNAL LINK: Delete name '" & N.Name & "' refersto: '" & N.RefersTo, vbQuestion + vbYesNo) If rtn = vbYes Then N.Delete End If Next End SubCác bạn chỉ mình cách nào xóa được Name dạng này với.
Xin cảm ơn.
Có 1 vài name rất cứng đầu… sau khi bạn chạy code lần 1 thì đã có 1 số name bị xóa, còn lại cho dù bạn xóa bằng tay nó vẩn trơ trơ!
Lúc ấy hãy tạm lưu và đóng file lại, mở ra lần nữa rồi chạy code!
Chú ý: Phải chạy trên từng sheet 1 vì có 1 số name thuộc loại cục bộ (name của sheet chứ không phải của Workbook), chỉ nhìn thấy khi chọn vào sheet tương ứng
Đóng và lưu file, rồi lại mở ra kiểm tra, làm chừng 3 lần sẽ xóa sạch các name
Code của tôi đơn giãn như sau:
Sub Test()
Application.SendKeys "^{F3}"
Application.SendKeys "{TAB}"
Application.SendKeys "{UP}"
For i = 1 To 500
Application.SendKeys "%d"
Application.SendKeys "{UP}"
Next
Application.SendKeys "{ESC}"
End Sub
Bạn chen ngang topic người khác rồi.
Code xóa dòng nếu C =0
Sub XoaRow()
Dim eRow As Long
Sheet1.Select
eRow = .End(xlUp).RowFor i = eRow To 1 Step -1
If Range("C" & i).Value = 0 Then Rows(i).Delete Shift:=xlUp
NextEnd Sub
Nhờ Mod dời bài hộ, cám ơn!
Thấy mọi người thảo luận name, mình tìm được một chương trình diệt virus name của Do Thanh Nhan ở Quảng Ngãi gửi lên để mọi người tham khảo, bảo đảm diệt sạch virus.
Em tìm thấy 1 đoạn code và thử thì thấy diệt name rác khá nhanh và hiệu quả, tuy nhiên chưa hiểu rõ được đoạn code diệt name rác trên căn cứ vào nguyên lý gì và đã diệt những cái gì nên mong các bác giải thích giùm?
Sub DeleteErrName() On Error Resume Next Dim NSh As Name, i As Integer Dim OldStatus As Boolean, ThongBao As String OldStatus = Application.DisplayStatusBar Sheets.Add.Name = "ShName" For Each NSh In ActiveWorkbook.Names If InStr(1, NSh.RefersToR1C1, "#") > 0 Or _ InStr(1, NSh.RefersToR1C1, "") > 0 Then i = i + 1 Application.StatusBar = "Deleted : " & Format(i, "#,##0") & _ " Deleting...: " & NSh.Name Sheets("ShName").Range("A" & i).Value = NSh.Name Sheets("ShName").Range("B" & i).Value = " " & NSh.RefersToR1C1 NSh.Delete End If Next If i > 0 Then _ ThongBao = ThongBao & Chr(13) & Chr(13) & " -" & Format(i, "#,##0") & " Names da xoa" MsgBox ThongBao, vbInformation, "GPE" Application.StatusBar = "" Application.DisplayStatusBar = OldStatus End Sub
Đoạn code trên không ăn thua gì bạn à. Nó chỉ xóa các name thông thường (không phải loại hiểm) và chỉ ở phạm vi workbook. Thực ra người ta tạo các virus macro và name hiểm ở các sheet (ở workbook không thấy), các dạng Dialog sheet, Chart Sheet, worksheet, macrosheet, các name tạo ra cố tình để các công cụ không xoá được. Các bạn lưu ý là name rác thường là hậu quả sau quá trình hoạt động của virus macro hoặc do chính người dùn tạo thừa và không dùng đến, có nghĩa là khi các bạn nhìn thấy nó thì virus đã làm cái gì trước đó rồi. Công cụ VirusMacroWarning là ngăn chặn từ khi nó bắt đầu hoạt động khi Excel bật và mở file, kiểm soát khi lưu dữ liệu. Sau khi chặn xong thì mới tiến hành tìm name rác cũ của file và thông báo diệt. Thủ thuật diệt name rác cứng đầu không phải chỉ bằng lệnh Delete thông thường của Excel đâu, còn cả kỹ thuật hook, API.
Các bạn cần công cụ ngăn chặn và diệt tự động virus macro và xóa name rác nên cập nhật các phiên bản mới của [URL='https://bluesofts.net/giai-phap-phan-mem/phan-mem-mien-phi/virus-macro-warning.html']VirusMacroWarning.
Những bạn làm phụ trách IT của một đơn vị, thay vì cứ thỉnh thoảng phải trả lời điện thoại rồi đến sửa máy vì virus macro thì tốt nhất bảo họ download và cài VirusMacroWarning là nhẹ người.
Nếu chỉ unhide sheet thì chưa thể thấy name, vì name cũng ẩn
Các sheet đó không có pass, xoá cái rẹt. Đó là các sheet do virus tạo ra, tên là 10000000, 00000000, …
Chạy đoạn code này sẽ làm hiện các sheet ẩn, làm hiện ra rồi xoá cái vèo.
Sub UnhideSh()
For Each sh In ActiveWorkbook.Sheets
sh.Visible = True
Next
End SubChạy đoạn code này sẽ hiện các name ẩn:
Sub delname()
For Each Nm In ActiveWorkbook.Names
On Error Resume Next
Nm.Visible = True
'…'
Next
End SubNếu cho dòng lệnh này vào chỗ chấm chấm, sẽ xoá luôn name:
Nm.Delete
Chào cả nhà, hôm trước mình có copy Macro xóa name rác RemoveBadnames về và chạy thử, nhưng nó có lỗi. Ai có thể sửa lại giúp được ko?
Sub RemoveBadNames() Dim N As Variant Dim rtn As Variant For Each N In ActiveWorkbook.Names If N.refersto Like "*[#]REF*" Then rtn = MsgBox("BAD NAME: Delete name '" & N.Name & "' refersto: '" & N.RefersTo, vbQuestion + vbYesNo) 'rtn = vbYes If rtn = vbYes Then N.Delete ElseIf N.refersto Like "*:*" Then rtn = MsgBox("EXTERNAL LINK: Delete name '" & N.Name & "' refersto: '" & N.RefersTo, vbQuestion + vbYesNo) If rtn = vbYes Then N.Delete End If Next End Sub
Hàm trên mà chạy với file bạn gửi có trên 700 name thì bấm MsgBox mỏi tay
Theo tôi thì tách thành 2 hàm, hàm xóa name lỗi không cần hiện MsgBox
Phần xóa EXTERNAL LINK như trên chỉ xóa trên máy local, không xóa trên máy mạng
Đây là 2 hàm tôi đang dùng. Các bạn sửa lại cho phù hợp với từng máy, bổ sung MsgBox nếu cần
Các hàm này nếu gặp name tiếng Việt bị lỗi nên phải xóa bằng thủ công do đó phải thêm dòng
On Error Resume Next
Sub DelErrName()
Dim na
On Error Resume Next
For Each na In ActiveWorkbook.Names
If InStr(na.RefersTo, "#REF") Or InStr(na.RefersTo, "#N/A") _
Or InStr(na.RefersTo, "#NAME") Then
na.Delete
End If
Next na
End Sub
Sub DelLinkName()
Dim na
On Error Resume Next
For Each na In ActiveWorkbook.Names
If InStr(na.RefersTo, ".xls") Then
na.Delete
End If
Next na
End Sub
Bạn mở file của bạn lên, rồi mở file này lên. Sau đó chạy lệnh xóa name rác. Trong file của bạn có name rác do virut tạo ra.
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
Bình luận