我正在尝试编写一个代码,该代码将在床单之间来回切换,从一个纸上取出输入,然后将其粘贴在另一张纸上。这是代码。
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
问题是当我到达。激活部分时,Excel读到下标不超出范围。
我该怎么办?
看起来您都使用for
循环通过r
,然后在for
中递增r
。在使用之前,我也不会在任何地方看到c
。
此外,当Brucewayne已经指出的那样,而不是使用Active
/Select
,而是明确定义您的床单和范围。
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Sheet 1")
对于ws2
和ThisWorkbook.Sheets("Compiled Data")
。
最后,而不是设置变量,为什么不直接将数据放入?
中Dim leftCol as Integer
leftCol = ws1.Cells.Find("*", SearchOrder:=xlByColumns, searchdirection:=xlNext).Column
ws2.Cells(oRow, c).value = ws1.Cells(r, leftCol).value