我有一个宏可以从电子表格数据标签中删除特定的不需要的数据。 我是VBA的主要业余爱好者所以我确定我的宏可能会更好但是首先根据表格中的3个标准删除重复项,接下来它会过滤3列并根据所述过滤器删除每一行数据,清除所有过滤器,并在宏运行完毕后提示已完成的消息框。
是否有任何方法可以添加到消息框或创建一个用户表单,该表单将返回已完成的操作(删除的重复项数,#行已删除等)?
我知道当您只使用数据选项卡中的重复删除功能时,它会提醒您删除了多少行以及剩余行数。
这是我的新手剧本;
Sub Del_Dups_and_Remarks()
' Del_Dups
Application.ScreenUpdating = False
Range("DenialsTable1[[#Headers],[Payment Tx ID]]").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Range("DenialsTable1[#All]").RemoveDuplicates Columns:=Array(2, 6, _
14), Header:=xlYes
' Remark_Removal
ActiveSheet.ListObjects("DenialsTable1").Range.AutoFilter Field:=19, _
Criteria1:="=MEDICAID [239]", Operator:=xlOr
ActiveSheet.ListObjects("DenialsTable1").Range.AutoFilter Field:=22, _
Criteria1:="Y"
ActiveSheet.ListObjects("DenialsTable1").Range.AutoFilter Field:=9, _
Criteria1:="N598"
Application.DisplayAlerts = False
Range("DenialsTable1").Offset(1, 0).Select
Selection.Delete
Application.DisplayAlerts = True
'Clear_Filters
Range("A6").Select
ActiveSheet.ShowAllData
Range("A7").Select
Application.ScreenUpdating = True
MsgBox ("Completed")
End Sub
提前非常感谢你!
答案 0 :(得分:1)
就目前而言,其中SELECT
太多了,如果第一行中出现代码,代码将不会删除所需的条件
您也缺少Option Explicit
- 使用此功能可以缓解未来的许多麻烦
Option Explicit
Sub Del_Dups_and_Remarks()
' Del_Dups
Dim InitCount as long
Dim AfterDups as long
Dim AfterDel as long
Application.ScreenUpdating = False
InitCount=Range("DenialsTable1").rows.count
ActiveSheet.Range("DenialsTable1").RemoveDuplicates Columns:=Array(2, 6, _
14), Header:=xlYes
AfterDups=Range("DenialsTable1").rows.count
' Remark_Removal
ActiveSheet.ListObjects("DenialsTable1").Range.AutoFilter Field:=19, _
Criteria1:="=MEDICAID [239]", Operator:=xlOr
ActiveSheet.ListObjects("DenialsTable1").Range.AutoFilter Field:=22, _
Criteria1:="Y"
ActiveSheet.ListObjects("DenialsTable1").Range.AutoFilter Field:=9, _
Criteria1:="N598"
Application.DisplayAlerts = False
ActiveSheet.Range("DenialsTable1").SpecialCells _
(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
AfterDel=Range("DenialsTable1").rows.count
'Clear_Filters
ActiveSheet.ListObjects("DenialsTable1").autofilter.ShowAlldata
Application.ScreenUpdating = True
MsgBox "Completed" & vbCrLf & "Initial Rows:" & InitCount & vbcrlf _
& "Deduplicated " & InitCount - AfterDups & vbCrLf _
& "Deleted " & AfterDups - AfterDel & vbCrLf _
& "FinalCount " & AfterDel
End Sub
正如BruceWayne所指出的,将ActiveSheet
更改为变量可能会有点挑战,因此它可以从您运行代码的任何工作表中起作用