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