这个站点已经在一段时间内极大地帮助了我VBA,为此,谢谢!但是我似乎无法使此代码正常工作,并且我看了很多示例。发生的事情是,一旦当前日期比到期日期早4天,我就将数据存档到另一张纸上。一切都按预期进行,但是每次执行宏时,sheet2上的数据都会被擦除并复制。我需要我的代码来找到sheet2的最后一行并将数据从sheet1复制到sheet2,以便所有数据都在那里。谢谢!
Sub archive()
Dim LastRow As Long
Dim i As Long
LastRow = Range("M" & Rows.Count).End(xlUp).Row
For i = 3 To LastRow
If Worksheets("Sheet1").Range("M" & i) - Date <= -4 And Worksheets("Sheet1").Range("N" & i).Value = "DONE" Then
Sheet2.Select
Range("A" & i).EntireRow.Value = Sheet1.Range("M" & i).EntireRow.Value
Sheet1.Range("M" & i).EntireRow.Delete
End If
If Worksheets("Sheet1").Range("L" & i) = "" Then
Exit For
End If
Next i
End Sub
在这里,我采用了您的代码并将其更改为使用worksheet
对象。我没有在任何数据上进行过测试,因为您没有提供任何要使用的数据,但是它为您提供了实现方法的思路。
另外,在您的代码中,您没有找到的最后一行Sheet2
,而是将数据放入row i
,从3开始。
当您从sheet1删除数据行时,您还需要当心,因为这会将其余数据向上移动,因此循环的下一次迭代可能找不到下一行数据/跳过了一行数据。
Sub archive()
Dim LastRow As Long
Dim LastRowSht2 As Long
Dim i As Long
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim rowCount As Long
Set sht1 = Worksheets("Sheet1")
Set sht2 = Worksheets("Sheet2")
LastRow = sht1.Range("M" & Rows.Count).End(xlUp).Row
rowCount = 3
For i = 3 To LastRow
If sht1.Range("M" & rowCount) - Date <= -4 And sht1.Range("N" & rowCount).Value = "DONE" Then
LastRowSht2 = sht2.Range("A" & Rows.Count).End(xlUp).Row + 1 '+1 so it doesn't overwrite the last row
sht2.Range("A" & LastRowSht2).EntireRow.Value = sht1.Range("M" & rowCount).EntireRow.Value
sht1.Range("M" & rowCount).EntireRow.Delete
Else
rowCount = rowCount + 1
End If
If sht1.Range("L" & rowCount) = "" Then
Exit For
End If
Next i
' clean up
set sht1 = nothing
set sht2 = nothing
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句