在VBA中激活和切换表单

我正在尝试编写一个代码,可以在表单之间来回切换,从一张纸上取得input,然后粘贴到另一张纸上。 这是代码。

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读取下标超出范围。

我该怎么办?

看起来你正在循环使用for ,并在你的for循环中增加r 。 在使用之前,我也没有看到c

另外,BruceWayne已经指出,不是使用Active / Select ,而是明确定义你的表单和范围。

 Dim ws1 As Worksheet Set ws1 = ThisWorkbook.Sheets("Sheet 1") 

对于ws2ThisWorkbook.Sheets("Compiled Data")

最后,不要设置variables,为什么不直接放入数据呢?

 Dim leftCol as Integer leftCol = ws1.Cells.Find("*", SearchOrder:=xlByColumns, searchdirection:=xlNext).Column ws2.Cells(oRow, c).value = ws1.Cells(r, leftCol).value