我试图编写一个代码,它会在工作表之间来回切换,从一张纸上获取输入,然后将它们粘贴在另一张纸上。这是代码。
For r = 1 To ActiveCell.End(xlDown).Row
Cells(1, c).Select
Do Until IsEmpty(Selection)
name = ActiveCell.End(xlToLeft).Value
email = ActiveCell.End(xlToLeft).Offset(0, 1).Value
phoneNumber = ActiveCell.End(xlToLeft).Offset(0, 2).Value
generation = ActiveCell.End(xlToLeft).Offset(0, 3).Value
status = ActiveCell.End(xlToLeft).Offset(0, 13).Value
ActiveCell.Offset(1, 0).Select
Sheets("Compiled Data").Select
'paste data
Cells(oRow, c) = name
Cells(oRow, c + 1) = email
Cells(oRow, c + 2) = phoneNumber
Cells(oRow, c + 3) = generation
Cells(oRow, c + 4) = status
oRow = oRow + 1
r = r + 1
Sheets("Sheet 1").Activate
Loop
Next
问题是,当我到达.Activate部分时,Excel会读取下标超出范围。
我该怎么办?
答案 0 :(得分:1)
看起来您使用isinstance(obj, bytes)
循环r
,并在for
中递增r
。在使用之前我也没有看到for
。
此外,不要像BruceWayne已经指出的那样使用c
/ Active
,而是明确定义工作表和范围。
Select
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Sheet 1")
和ws2
相同。
最后,为什么不直接将数据放入?
,而不是设置变量ThisWorkbook.Sheets("Compiled Data")