我有一个宏,它通过我的源表“CleanData”运行,并将该表中的任何行复制到活动工作表,前提是活动工作表的名称在A列中。它会跳过不符合此条件的行。到现在为止还挺好。我遇到的问题是,当您再次运行宏时,它不会重新检查活动工作表以查看是否已记录相同的行。所以它给了我重复。
我正在使用假数据,因为实际数据是受保护的信息,但不用说Inspector标题下的列表非常长,这就是为什么我试图避免固定范围(如"A5:A32"
等)和固定的标准(让宏说出像rngcel.value = "Harry"
这样的东西会引起问题,因为如果添加一个新的检查员并且他的名字不是哈利怎么办?每次新检查员都必须进入并更改宏添加。相反,我使用像rngcel.value = Activesheet.name
之类的东西,因为每个检查员都会得到他/她自己的表格。
这是流程
您从检查器工作表中运行宏,在此示例中,名为Harry的工作表。哈利进来并运行宏来看看他需要做什么新的工作:
好吧,如果哈利有一天进来想知道伏地魔是否给了他新作品怎么办?他需要再次更新他的表格才能检查吗?
所以他再次运行宏,但是现在相同的工单被复制了,并且他不需要两次相同的信息:
这是代码(从不同的表格中蹒跚而行,我做了更改):
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文件。