基本上,我对进行任何类型的编码都是陌生的,我可以输入书面代码并弄清楚我需要更改的内容,但是我很愿意编写任何新内容。
我有一个Excel电子表格,我们跟踪程序接受和拒绝的情况。我需要在第二张纸上跟踪拒绝项,以便将它们全部放在一个区域中。
我找到了Excel的VBA代码,该代码成功地将基于值的所需信息从一张纸复制到第二张纸。因此,当我选择“拒绝”并运行代码时,它将所有数据复制到第二张纸上。需要注意的是,它非常有效,每次我运行代码时,它都会提取新数据和以前复制的数据。
我想添加到VBA代码中,以不复制先前复制的数据,或者查找自动删除重复项的代码。
因此,我确实环顾四周,看看是否可以找到一些重复的VBA代码,并尝试了一些,但是原始代码无法正常运行,并且出现了一些错误。我有一个看起来非常不错的显示器,但似乎无法与原始复制代码配合使用。
下面是当前代码,用于复制被拒绝的代码。
Private Sub CommandButton1_Click()
a = Worksheets("ARD2019").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To a
If Worksheets("ARD2019").Cells(i, 2).Value = "Rejected" Then
Worksheets("ARD2019").Rows(i).Copy
Worksheets("Rejected").Activate
b = Worksheets("Rejected").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Rejected").Cells(b + 1, 1).Select
ActiveSheet.Paste
Worksheets("ARD2019").Activate
End If
Next
Application.CutCopyMode = False
我在这里的希望是,我不必告诉使用该程序的人员仅手动运行Excel的重复数据删除功能,但是如果在上面的代码之上编写代码是不现实的,我不认为他们会抱怨,因为这仍然比他们以前手动处理行的方法要好。
答案 0 :(得分:0)
让我们假设列A在两个表中都有唯一的键。以下是入门的简单方法:
Option Explicit
Private Sub CommandButton1_Click()
Dim LastRowSour As Long, LastRowDest As Long, Row As Long
Dim wsSou As Worksheet, wsDes As Worksheet
'Set worksheets
With ThisWorkbook
Set wsSou = .Worksheets("ARD2019")
Set wsDes = .Worksheets("Rejected")
End With
'Find the last row of column A of wsSou
LastRowSour = wsSou.Cells(wsSou.Rows.Count, "A").End(xlUp).Row
'Loop start from row 2 to LastRowSour
For Row = 2 To LastRowSour
'Find the last row of column A of wsDes
LastRowDest = wsDes.Cells(wsDes.Rows.Count, "A").End(xlUp).Row
'Chek if .Cells(Row, 2).Value is reject & wsSou.Cells(Row, 1).Value is not appear in the first column of wsDes
If wsSou.Cells(Row, 2).Value = "Rejected" And Application.CountIf(wsDes.Range(wsDes.Cells(1, 1), wsDes.Cells(LastRowDest, 1)), wsSou.Cells(Row, 1).Value) = 0 Then
wsSou.Rows(Row).Copy
wsDes.Range("A" & LastRowDest + 1).PasteSpecial xlPasteValues
End If
Next
Application.CutCopyMode = False
End Sub