宏以跳过已复制的行

时间:2018-04-20 18:00:55

标签: excel performance excel-vba microsoft-project-vba vba

我有一个宏,它通过我的源表“CleanData”运行,并将该表中的任何行复制到活动工作表,前提是活动工作表的名称在A列中。它会跳过不符合此条件的行。到现在为止还挺好。我遇到的问题是,当您再次运行宏时,它不会重新检查活动工作表以查看是否已记录相同的行。所以它给了我重复。

我正在使用假数据,因为实际数据是受保护的信息,但不用说Inspector标题下的列表非常长,这就是为什么我试图避免固定范围(如"A5:A32"等)和固定的标准(让宏说出像rngcel.value = "Harry"这样的东西会引起问题,因为如果添加一个新的检查员并且他的名字不是哈利怎么办?每次新检查员都必须进入并更改宏添加。相反,我使用像rngcel.value = Activesheet.name之类的东西,因为每个检查员都会得到他/她自己的表格。

这是流程

您从检查器工作表中运行宏,在此示例中,名为Harry的工作表。哈利进来并运行宏来看看他需要做什么新的工作:

Harry1

到目前为止一切顺利: Harry2

好吧,如果哈利有一天进来想知道伏地魔是否给了他新作品怎么办?他需要再次更新他的表格才能检查吗?

所以他再次运行宏,但是现在相同的工单被复制了,并且他不需要两次相同的信息:

Harry3

这是代码(从不同的表格中蹒跚而行,我做了更改):

Sub CopyColumns()

Dim wsSource As Worksheet
Dim wsDestin As Worksheet
Dim lngDestinRow As Long
Dim rngSource As Range
Dim rngCel As Range


Set wsSource = Sheets("CleanData")     'Edit "Sheet1" to your source sheet name
Set wsDestin = ActiveSheet


With wsSource
    'Following line assumes column headers in Source worksheet so starts at row2
    Set rngSource = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp))

End With

For Each rngCel In rngSource
    If rngCel.Value = ActiveSheet.name Then
        With wsDestin
            'Following line assumes column headers in Destination worksheet
            lngDestinRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
            rngCel.EntireRow.copy Destination:=wsDestin.Cells(lngDestinRow, "A")
        End With
    End If
Next rngCel

End Sub

我尝试使用以下方法过滤掉重复项:

And IsError(Application.Match(rngCel.Value, rowname, 0))

在这行代码中:

For Each rngCel In rngSource If rngCel.Value = ActiveSheet.name Then

我尝试将rowname定义为工作表中所有先前行的范围。它不起作用。

我最初在每个工作表的单元格中都有公式来收集所有这些数据,但它严重减慢了已经陷入困境的excel文件。

0 个答案:

没有答案