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

时间:2013-07-01 21:27:52

标签: excel vba excel-vba runtime-error

我不确定我的代码有什么问题。我以为我正确设置了范围,但可能没有。我确实尝试设置多个范围。错误发生在代码“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

2 个答案:

答案 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