当有超过65536行时,查找最后一行
ws1.Cells(1, i).Copy ws2.Range("a65536").End(xlUp).Offset(1, 0)
我正在循环表单,所以我是循环的一部分。 行数超过65536,那我该如何调整呢? 提前致谢。
您应该使用行数而不是硬编码值。
With ws2 ws1.Cells(1, i).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0) End With
最简单的方法是wks.usedrange.rows.count
。 合理确保与保存工作簿时使用的范围更新相关的错误在post-excel中得到了修复。
所有简明的解决scheme都有失败的情况。 被接受的答案会在列完全空白的情况下产生错误的结果。
只要在数据之上或之间没有空白,这是一种不同的方式:
ws1.Cells(, i).Copy ws2.[INDEX(A:A,COUNTA(A:A)+1)]
请记住,您始终可以在Excel工作表上获取上次使用的范围,如下所示:
Dim lastRange as Range Dim lastColumn as Long Dim lastRow as Long Set lastRange = Worksheets(?).UsedRange.SpecialCells(xlCellTypeLastCell) lastColumn = lastRange.Column 'return the last column index lastRow = lastRange.Row 'return the last row index
所以要回答你的问题,你可以使用我以前的例子:
ws1.Cells(1, i).Copy ws2.Range("A" & lastRow).Offset(1, 0) 'or ws1.Cells(1, i).Copy ws2.Cells(lastRow, 1).Offset(1, 0)
两个陈述都会为你做这个工作。 只要注意你必须重新定义循环中的lastRange对象和lastRowvariables,否则lastRangevariables将保存其初始化值。
祝你好运!
安德列斯·亚历杭德罗·加西亚·赫尔塔多。