3

我对我认为是一个简单的 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 个单元格。语法有什么问题?

4

3 回答 3

9

零不是调整大小的有效参数。如果要保持范围的原始大小,只需省略参数即可。否则,您需要明确指定行数和列数。这是保留原始行数的方法

Worksheets("Sheet").Range("namedrange_d").Resize(, 4).Offset(6, 0).Copy _
  Worksheets("Sheet1").Range("namedrange").Resize(, 4).Offset(6, 0)
于 2013-04-08T15:05:24.643 回答
2

我会做以下事情(我非常明确 - 这往往会使代码更易于阅读和调试,对速度的影响最小。这不是“聪明”。):

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

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

于 2013-04-08T15:08:59.283 回答
1

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

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

...这应该就是你所需要的

于 2013-04-08T14:47:50.043 回答