用vba抵消和resize

我认为是一个简单的vba命令有一些问题:

Worksheets("Sheet").Range("namedrange_d").Resize(0, 4).Offset(6, 0).Copy _ Destination:=Worksheets("Sheet1").Range("namedrange").Resize(0, 4).Offset(6, 0) 

我想复制默认范围5个单元格宽度,即在参考单元格( namedrange_d )下面的7个单元格。 语法有什么问题?

零不是resize的有效参数。 如果要保持范围的原始大小,只需省略参数即可。 否则,您需要明确指定行数和列数。 这是你将如何保持原来的行数

 Worksheets("Sheet").Range("namedrange_d").Resize(, 4).Offset(6, 0).Copy _ Worksheets("Sheet1").Range("namedrange").Resize(, 4).Offset(6, 0) 

先偏移,然后使用Range("A1:E1")引用5列宽度区域:

 Worksheets("Sheet").Range("namedrange_d").Offset(7,0).Range("A1:E1").Copy Destination:=Worksheets("Sheet1").Range("namedrange") 

…应该是你需要的一切

我会做下面的事情(我是非常明确的 – 这往往会使代码更容易阅读和debugging,速度影响最小,而不是“聪明”):

 Dim dataSource As Range Dim firstCellSource, firstCellDest As Range Set firstCellSource = Worksheets("Sheet1").Range("namedrange_d").Offset(6, 0) Set firstCellDest = Worksheets("Sheet1").Range("namedrange").Offset(6, 0) Set dataSource = Range(firstCellSource, firstCellSource.Offset(0, 4)) dataSource.Copy Destination:=firstCellDest 

像这样,代码基本上是“自我logging”,很容易看到你在做什么。 请注意,您只需要提供目的地的第一个单元格。