Object_Global的VBA运行时错误1004范围失败

我不确定我的代码有什么问题。 我以为我正确设置了范围,但也许没有。 我曾尝试设置多个范围。 错误发生在代码“Range(”CL_Paid“)的最后一行”Paste“

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 

你有意使用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 

因此,无论Cut是否发生,您都试图Paste

关于If...Then语句的不同版本的细节在这里

CLPaid已经是一个Range所以使用Cl_Paid.Paste 。 然而,粘贴适用于Worksheet ,而不是Range ,所以你可能会考虑粘贴PasteSpecial 。 或者,

 .EntireRow.Cut CL_Paid 

将剪切并粘贴(到目的地)一步,而不使用剪贴板。

还要注意的是

 Dim HR_Paid, HR_Unpaid, E_Paid, etc As Range 

不(在VBA中)定义所有这些都是范围引用。 他们都是Variant的,除了最后一个。 你将不得不使用:

 Dim HR_Paid As Range, HR_Unpaid As Range, E_Paid As Range, etc