使用vba进行偏移和调整大小

时间:2013-04-08 14:25:55

标签: excel vba excel-vba

我对我认为简单的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个单元格的默认范围,即参考单元格下的7个单元格(namedrange_d)。语法有什么问题?

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

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

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

......应该就是你需要的一切

答案 2 :(得分:1)

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

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

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