Xóa Name rác.

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

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 Sub

Code 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 Sub

Cá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).Row

For i = eRow To 1 Step -1
If Range("C" & i).Value = 0 Then Rows(i).Delete Shift:=xlUp
Next

End 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 Sub

Chạ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 Sub

Nế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ụ
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 👤 4 ▥ 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