2017-02-23 127 views
0

我有3个子工作表在工作簿中激活某个工作表时运行。但是,它失败,我收到以下错误:Excel VBA - 对象'工作表'的方法'范围'失败

Run-time error '-2147417848 (80010108)': Method 'Range' of object'_Worksheet' failed

代码的错误是:

Sub MoveData() 
    Dim r As Long, lr2 As Long, lr As Long 
    lr2 = Worksheets("Status").UsedRange.Rows.Count 
    lr3 = Worksheets("Completed").UsedRange.Rows.Count 
     If lr3 = 1 Then lr3 = 0 
     For r = lr2 To 2 Step -1 
      If Worksheets("Status").Range("A" & r).Value <> "" And Worksheets("Status").Range("X" & r).Value = "Y" And Worksheets("Completed").Range("A2").Value = "" Then 
       Worksheets("Status").Cells(r, 1).Copy Destination:=Worksheets("Completed").Range("A" & lr3) 
       Worksheets("Status").Cells(r, 2).Copy Destination:=Worksheets("Completed").Range("B" & lr3) 
       Worksheets("Status").Cells(r, 3).Copy Destination:=Worksheets("Completed").Range("C" & lr3) 
       Worksheets("Status").Cells(r, 4).Copy Destination:=Worksheets("Completed").Range("D" & lr3) 
       Worksheets("Status").Cells(r, 5).Copy Destination:=Worksheets("Completed").Range("E" & lr3) 
       Worksheets("Status").Cells(r, 6).Copy Destination:=Worksheets("Completed").Range("F" & lr3) 
       Worksheets("Status").Cells(r, 7).Copy Destination:=Worksheets("Completed").Range("G" & lr3) 
       Worksheets("Status").Cells(r, 8).Copy Destination:=Worksheets("Completed").Range("H" & lr3) 
       Worksheets("Status").Cells(r, 9).Copy Destination:=Worksheets("Completed").Range("I" & lr3) 
       Worksheets("Status").Cells(r, 10).Copy Destination:=Worksheets("Completed").Range("J" & lr3) 
       Worksheets("Status").Cells(r, 11).Copy Destination:=Worksheets("Completed").Range("K" & lr3) 
       Worksheets("Status").Cells(r, 12).Copy Destination:=Worksheets("Completed").Range("L" & lr3) 
       Worksheets("Status").Cells(r, 13).Copy Destination:=Worksheets("Completed").Range("M" & lr3) 
       Worksheets("Status").Cells(r, 14).Copy Destination:=Worksheets("Completed").Range("N" & lr3) 
       Worksheets("Status").Cells(r, 15).Copy Destination:=Worksheets("Completed").Range("O" & lr3) 
       Worksheets("Status").Cells(r, 16).Copy Destination:=Worksheets("Completed").Range("P" & lr3) 
       Worksheets("Status").Cells(r, 17).Copy Destination:=Worksheets("Completed").Range("Q" & lr3) 
       Worksheets("Status").Cells(r, 18).Copy Destination:=Worksheets("Completed").Range("R" & lr3) 
       Worksheets("Status").Rows(r).Delete Shift:=xlUp 
       Else: 
      End If 
     Next r 
     For r = lr2 To 2 Step -1 
      If Worksheets("Status").Range("A" & r).Value <> "" And Worksheets("Status").Range("T" & r).Value = "Y" And Worksheets("Completed").Range("A2").Value <> "" Then 
       Worksheets("Status").Cells(r, 1).Copy Destination:=Worksheets("Completed").Range("A" & lr3 + 1) 
       Worksheets("Status").Cells(r, 2).Copy Destination:=Worksheets("Completed").Range("B" & lr3 + 1) 
       Worksheets("Status").Cells(r, 3).Copy Destination:=Worksheets("Completed").Range("C" & lr3 + 1) 
       Worksheets("Status").Cells(r, 4).Copy Destination:=Worksheets("Completed").Range("D" & lr3 + 1) 
       Worksheets("Status").Cells(r, 5).Copy Destination:=Worksheets("Completed").Range("E" & lr3 + 1) 
       Worksheets("Status").Cells(r, 6).Copy Destination:=Worksheets("Completed").Range("F" & lr3 + 1) 
       Worksheets("Status").Cells(r, 7).Copy Destination:=Worksheets("Completed").Range("G" & lr3 + 1) 
       Worksheets("Status").Cells(r, 8).Copy Destination:=Worksheets("Completed").Range("H" & lr3 + 1) 
       Worksheets("Status").Cells(r, 9).Copy Destination:=Worksheets("Completed").Range("I" & lr3 + 1) 
       Worksheets("Status").Cells(r, 10).Copy Destination:=Worksheets("Completed").Range("J" & lr3 + 1) 
       Worksheets("Status").Cells(r, 11).Copy Destination:=Worksheets("Completed").Range("K" & lr3 + 1) 
       Worksheets("Status").Cells(r, 12).Copy Destination:=Worksheets("Completed").Range("L" & lr3 + 1) 
       Worksheets("Status").Cells(r, 13).Copy Destination:=Worksheets("Completed").Range("M" & lr3 + 1) 
       Worksheets("Status").Cells(r, 14).Copy Destination:=Worksheets("Completed").Range("N" & lr3 + 1) 
       Worksheets("Status").Cells(r, 15).Copy Destination:=Worksheets("Completed").Range("O" & lr3 + 1) 
       Worksheets("Status").Cells(r, 16).Copy Destination:=Worksheets("Completed").Range("P" & lr3 + 1) 
       Worksheets("Status").Cells(r, 17).Copy Destination:=Worksheets("Completed").Range("Q" & lr3 + 1) 
       Worksheets("Status").Cells(r, 18).Copy Destination:=Worksheets("Completed").Range("R" & lr3 + 1) 
       Worksheets("Status").Rows(r).Delete Shift:=xlUp 
       lr3 = lr3 + 1 
      Else: 
      End If 
     Next r 
End Sub 

从调试的亮的行是:

If Worksheets("Status").Range("A" & r).Value <> "" And Worksheets("Status").Range("X" & r).Value = "Y" And Worksheets("Completed").Range("A2").Value = "" Then 

你能提供错误发生原因的解释,以及我能做些什么来解决它?

+1

*整个*代码可能不会出错,只是一个或两个特定的行,那么错误时突出显示的行是哪一行? –

+1

'如果lr3 = 1那么lr3 = 0' lr3不能为零 - 不解析为任何有效的行。你也永远不会增加lr3? –

+0

@cyboashu感谢您的链接。我会看看。 –

回答

0

我通过去除范围从如果固定的错误:

老VBA

If Worksheets("Status").Range("A" & r).Value <> "" And Worksheets("Status").Range("X" & r).Value = "Y" And Worksheets("Completed").Range("A2").Value = "" Then 

新的VBA

If Worksheets("Status").Cells(r, 1).Value <> "" And Worksheets("Status").Cells(r, 24).Value = "Y" And Worksheets("Completed").Cells(2, 1).Value = "" Then 
+2

我很难看出为什么这两条线在功能上不相同... –

+0

我很努力地找到一个链接,但是我所理解的是该范围不工作,因为工作表不活跃? –

0

有多少行,在工作表中(“状态”)

从这个错误我会想象它要么是0或1。必须是2或以上,你的循环

For r = lr2 To 2 Step -1 
+0

我正在测试的工作表中有4行。一旦完全填充,在任何特定时刻,它可能永远不会少于100个。 –

+1

'UsedRange.Rows.Count'将不会返回0,但即使它做到了(或者它返回1),也不会输入“For r = lr2 To 2 Step -1”循环,因此代码永远不会到达发生错误的线路。 – YowE3K

+0

好点YowE3K,我错过了。 –