我不确定我的代码有什么问题。我以为我正确设置了范围,但可能没有。我确实尝试设置多个范围。错误发生在代码“Range(”CL_Paid“)的最后一个主行上。粘贴”
Sub test()
Dim HR_Paid, HR_Unpaid, E_Paid, E_Unpaid, SE_Paid, SE_Unpaid, CL_Paid, CL_Unpaid As Range
Set HR_Paid = Sheets("Data").Range("A1:L49")
Set HR_Unpaid = Sheets("Data").Range("A50:L99")
Set E_Paid = Sheets("Data").Range("A100:L149")
Set E_Unpaid = Sheets("Data").Range("A150:L199")
Set SE_Paid = Sheets("Data").Range("A200:L249")
Set SE_Unpaid = Sheets("Data").Range("A250:L299")
Set CL_Paid = Sheets("Data").Range("A300:L349")
Set CL_Unpaid = Sheets("Data").Range("A350:L399")
With Sheets("Data")
.Select
ViewMode = ActiveWindow.View
ActiveWindow.View = xlNormalView
.DisplayPageBreaks = False
Firstrow = .UsedRange.Cells(1).Row
Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
For Lrow = Lastrow To Firstrow Step -1
With .Cells(Lrow, "D")
If Not IsError(.Value) Then
If .Value = ("CL") Then .EntireRow.Cut
Range("CL_Paid").Paste
End If
End With
Next Lrow
End With
End Sub
答案 0 :(得分:2)
您是否故意使用If...Then
声明的单行版本?
If
下面一行的缩进看起来好像你认为它在某种程度上与If
有关。你有这个:
If .Value = ("CL") Then .EntireRow.Cut
Range("CL_Paid").Paste
与此具有相同的效果:
If .Value = ("CL") Then
.EntireRow.Cut
End If
Range("CL_Paid").Paste
当我怀疑你真的想要这个时:
If .Value = ("CL") Then
.EntireRow.Cut
CL_Paid.Paste
End If
因此,无论Paste
是否曾经发生过,您都会尝试Cut
。
有关If...Then
语句的不同版本的详细信息为here
答案 1 :(得分:1)
CLPaid已经是Range
所以请使用Cl_Paid.Paste
。但是,粘贴应用于Worksheet
,而不是Range
,因此您可能会考虑使用PasteSpecial
。可替代地,
.EntireRow.Cut CL_Paid
将在一步中剪切并粘贴(到目的地),而不使用剪贴板。
另请注意
Dim HR_Paid, HR_Unpaid, E_Paid, etc As Range
没有(在VBA中)定义所有这些是Range引用。它们都是 Variant ,除了最后一个。你必须使用:
Dim HR_Paid As Range, HR_Unpaid As Range, E_Paid As Range, etc