请问为啥这个vba循环在第二次报错

for b(1)=1to a(1) step 1
sheet2.range(cells(b(1)*1000-988,2),cells(b(1)*1000+1,21)).copy
sheets.add
activesheet.paste cells(2,2)
next

第二次循环在copy处报错,方法作用worksheet失败

问题在“range(cells(b(1)*1000-988,2),cells(b(1)*1000+1,21))”这一句里。因为这里的cells前面没有限定工作表。如果没有指定工作表,cells默认的工作表是激活的工作表。第一次运行的时候你应该是在sheet2,这时sheet2里是有你的数据的。后面你新建的工作表,激活的工作表(activesheet)已经不是sheet2了,而是你新建的工作表,再从激活的工作表里取值都是空的,所以第二次运行的时候cells(b(1)*1000-988的结果应该是一个负数,所以就报错了。
正确的代码:

For b(1)=1to a(1) Step 1
      Sheet2.Range(Sheet2.Cells(b(1)*1000-988,2),Sheet2.Cells(b(1)*1000+1,21)).Copy
      Sheets.add
      Activesheet.Paste Cells(2,2)
Next

或者

With Sheet2
    For b(1)=1to a(1) Step 1
        .Range(.Cells(b(1)*1000-988,2),.Cells(b(1)*1000+1,21)).Copy
        Sheets.add
        Activesheet.Paste Cells(2,2)
    Next
End With