VBA:End(xlToRight)不包括所有列?

时间:2015-03-03 21:44:05

标签: excel excel-vba vba

我正在使用的代码是:

Sub selectrange()

Dim rngSource As Range, rngDest As Range
Set rngSource = Range(Range("A1"), Range("A1").End(xlDown).End(xlToRight))
'Only used to check the data being copied
rngSource.Select
Set rngDest = Range("A1").End(xlToRight).Offset(0, 1)
rngSource.Copy
rngDest.PasteSpecial

End Sub

我们的想法是让代码选择包含数据的所有行/列,并将它们粘贴到另一个工作簿的下一个可用部分中。但是通过运行此代码,只复制和粘贴了一些列。

有问题的数据有12列(A到L),其中一些是空的,而不是标题。当我使用End(xlToRight).End(xlDown)时,Selection停止在任何行的第一个空单元格中,因此我在A列上包含日期的End(xlDown),然后End(xlToRight)包括所有可能的列如果他们有数据。

然而,当这样做时,选择在E列任意停止,尽管事实上列F已填充且没有空白单元格...

如果有人有任何想法,我将不胜感激!

由于

2 个答案:

答案 0 :(得分:1)

我个人更喜欢活动表的使用范围而不是范围的CurrentRegion:

这是我敲了一张纸的结果:

?activesheet.usedrange.address

$ A $ 1:$ H $ 9

?Activecell.currentregion.address

$ A $ 4:$ B $ 6

您可以看到使用范围远大于当前区域。

但是,为了进一步深入研究,您知道列数并且您知道列A始终有数据,您最好这样做:

Set rngSource = Range("A1:L" & Range("A" & Rows.count).end(xlup).row)

答案 1 :(得分:0)

正如Dan所提到的,您可以使用UsedRange属性执行此任务。如果你做了很多VBA,你会发现Range-Info是你一遍又一遍地做的事情。您可能(或可能不)认为这有用:https://stackoverflow.com/a/28502702/4487534