对不起,但我不同意迈克尔的答案。
完(xlDown)是VBA等效点击Ctrl
+ Down
的。
尝试Ctrl
+ Down
与
- 空柱
- 与行1,2 2
- 值在第1行的值,而是在列1中没有其他
- 值和列,3,7,8,9,13,14和15
这会给你一个想法,所有不同的行,Ctrl
+ Down
可能带你到。
Set newRange = ws.Range("A1").End(xlDown).End(xlDown).End(xlUp).Offset(1, 0)
并不一定带你到最后使用的行号加1
我很惊讶Set newRange = ws.Range("A1").End(xlDown).Offset(1, 0)
与空柱的工作。 Range("A1").End(xlDown)
会将您带到工作表的最后一行,然后.Offset(1, 0)
会尝试将您从工作表中移出。
考虑:
Dim RowLast As Long
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
- 如果A列是空的,RowLast将被设置为1。
- 如果A1具有一个值,但没有其他的细胞具有的值,RowLast将被设置为1。
- 如果A列中的单元格数量具有值,则RowLast将设置为具有值的底部行。
- 如果您在最后一行有值,它将被忽略。
- 如果您在最后两行中有值,RowLast将被设置为Rows.Count - 1。
我假设你没有在borrom行中的值。如果你,如果第1行留空一个空栏,然后不在乎:
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
Set NewRange = ws.Cells(RowLast + 1, "A")
应该得到期望的结果,无论片WS的当前内容。
如果你在乎行1被留空,与Ctrl
+ Down
和Ctrl
+ Up
尝试会给你的价值观的不同组合的效果的理解。
+1很好地解释它。事实上,我从未赞成使用“ws.Range(”A1“)。End(xlDown)”来设置范围。原因在于,如果两者之间存在空白单元,则不会给出(可以理解)正确的范围。 :) – 2012-02-23 03:34:23
托尼,感谢您的帮助。它为我工作。关于第一部分,为什么我这样做,我是第18项http://support.microsoft.com/kb/291308。惊讶地看到没有简单的方法来做到这一点。感谢aga。 – bsr 2012-02-23 03:44:43
@SiddharthRout ..如果该行为空,则最后一个单元格变得更糟。查找更好,但仍需要测试以确保感兴趣的数据范围不是空白。 ['查找'可以更容易](http://stackoverflow.com/q/4872512/641067)取决于需要什么 – brettdj 2012-02-24 23:56:33