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

我使用的代码是:

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 

这个想法是让代码select所有包含数据的行/列并将其粘贴到另一个工作簿的下一个可用部分。 但是通过运行这个代码,只有一些列被复制和粘贴。

有问题的数据有12列(A到L),其中一些空的标题。 当我使用End(xlToRight).End(xlDown)select停止在任何行的第一个空单元格,所以而不是我在包含date的列A上结束(xlDown),然后结束(xlToRight)包括所有可能的列,无论如果他们有数据或没有。

然而,当这样做,select任意停在列E,尽pipe事实列F填充和没有空白单元格…

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

谢谢

就个人而言,我更喜欢活动页面的使用范围,而不是范围的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) 

如丹暗示,您可以使用UsedRange属性来执行此任务。 如果你做了很多的VBA,你会发现获取Range-Info是你一遍又一遍的工作。 你可能(或不可能)发现这个有用的: https : //stackoverflow.com/a/28502702/4487534