运行时错误1004和424

时间:2015-03-15 12:51:18

标签: excel vba range

我有一个问题来抵消我的范围变量。

我有2张不同的纸张,一张带有原始纸张,另一张用于制作“打印版本”。

dim r as range

Set r = printSheet.Range("c100")

For loopcounter = 97 To 1 Step -1
    If r > 0 Or r.Offset(0, 1) > 0 Or _
         r.Offset(0, 2) > 0 Or _
        r.Offset(0, 3) > 0 Or _
        r.Offset(0, 4) > 0 Or _
        r.Offset(0, 6) > 0 Or _
        r.Offset(0, 7) > 0 Or _
        r.Offset(0, 8) > 0 Or _
        r.Offset(0, 9) > 0 Or _
        r.Offset(0, 10) > 0 Or _
        r.Offset(0, 11) > 0 Or _
        r.Offset(0, 12) > 0 Or _
        r.Offset(0, 13) > 0 Or _
        r.Offset(0, 14) > 0 Or _
        r.Offset(0, 15) > 0 Then

    Else: r.EntireRow.Delete

    End If
        'this code fails with runtime error 1004
    Set r = printSheet.Range(r).Offset(-1) 
        'this code fails with runtime error 424
    set r = r.offset(-1)

提前感谢。

3 个答案:

答案 0 :(得分:0)

如果你想向上移动1行,你应该给出两个参数:

Set r = r.offset(-1,0)

或者像那样写:

Set r = r.Offset(rowOffset:=-1)

编辑:

第二个问题是这一行:

r.EntireRow.Delete

删除r范围,因此r为空。为避免这种情况,您可以举例:

Dim r As Range
Dim DeleteRow As Boolean

Set r = Sheet14.Range("c100")

For loopcounter = 97 To 1 Step -1
  DeleteRow = Not (r > 0 Or r.Offset(0, 1) > 0 Or _
     r.Offset(0, 2) > 0 Or _
     r.Offset(0, 3) > 0 Or _
     r.Offset(0, 4) > 0 Or _
     r.Offset(0, 6) > 0 Or _
     r.Offset(0, 7) > 0 Or _
     r.Offset(0, 8) > 0 Or _
     r.Offset(0, 9) > 0 Or _
     r.Offset(0, 10) > 0 Or _
     r.Offset(0, 11) > 0 Or _
     r.Offset(0, 12) > 0 Or _
     r.Offset(0, 13) > 0 Or _
     r.Offset(0, 14) > 0 Or _
     r.Offset(0, 15) > 0)
  'first move up
  Set r = r.Offset(-1, 0)
  'delete row if needed
  If DeleteRow Then r.Offset(1, 0).Delete

答案 1 :(得分:0)

考虑:

Sub qwerty()
    Dim r As Range
    Set printSheet = ActiveSheet

    For loopcounter = 97 To 1 Step -1
        Set r = printSheet.Cells(loopcounter, "C")
        If r > 0 Or r.Offset(0, 1) > 0 Or _
            r.Offset(0, 2) > 0 Or _
            r.Offset(0, 3) > 0 Or _
            r.Offset(0, 4) > 0 Or _
            r.Offset(0, 6) > 0 Or _
            r.Offset(0, 7) > 0 Or _
            r.Offset(0, 8) > 0 Or _
            r.Offset(0, 9) > 0 Or _
            r.Offset(0, 10) > 0 Or _
            r.Offset(0, 11) > 0 Or _
            r.Offset(0, 12) > 0 Or _
            r.Offset(0, 13) > 0 Or _
            r.Offset(0, 14) > 0 Or _
            r.Offset(0, 15) > 0 Then
        Else
                r.EntireRow.Delete
        End If
    Next loopcounter
End Sub

您的代码存在的问题是它会破坏范围变量!!

答案 2 :(得分:0)

您可以查看“ loopcounter ”变量的值是什么,以及出现错误时“ r ”范围的地址是什么。

我认为没有细胞可以去。