消息框返回任务在宏结束时完成?

时间:2016-07-18 15:57:42

标签: excel vba macros

我有一个宏可以从电子表格数据标签中删除特定的不需要的数据。 我是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

提前非常感谢你!

1 个答案:

答案 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更改为变量可能会有点挑战,因此它可以从您运行代码的任何工作表中起作用