使用VBA宏复制excel中的变量范围

时间:2017-03-16 07:24:18

标签: excel vba excel-vba

我有点困惑。我创建了一个带宏的按钮,用于复制实际工作表s中的另一个工作表s0中的一组单元格(ss0都是字符串变量)

Sheets(s0).Range("D56:K80").Value = Sheets(s).Range("L2:S26").Value

所有的作品。但是如果我尝试写一些更灵活的东西,比如可以改变起始行的范围

x = Cells(2, 4).Value 'x is a number defined by user
Sheets(s0).Range(Cells(56, 4), Cells(80, 11)).Value = Sheets(s).Range(Cells(2 + x, 2), Cells(26 + x, 9)).Value

无效,1004错误出现。问题是什么? 我做错了什么?

如果我计算出Cells命令的总和,情况就不会改变。 但是像

这样的东西
Sheets(s).Cells(r, c) = x
当我使用变量值r和c更改单个单元格的值时,

有效。 (x,r和c总是整数)

提前谢谢

1 个答案:

答案 0 :(得分:1)

您必须将所有范围引用限定为工作表对象:

Sheets(s0).Range(Sheets(s0).Cells(56, 4), Sheets(s0).Cells(80, 11)).Value = Sheets(s).Range(Sheets(s).Cells(2 + x, 2), Sheets(s).Cells(26 + x, 9)).Value

使用With-End With语法可以减轻打字负担

With Sheets(s)
    Sheets(s0).Range(Sheets(s0).Cells(56, 4), Sheets(s0).Cells(80, 11)).Value = .Range(.Cells(2 + x, 2), .Cells(26 + x, 9)).Value
End With

如果您确定知道 那么" s0"是活动表(即所有非限定工作表引用默认值的表),当宏运行时,您可以省略其限定条件:

With Sheets(s)
    Range(Cells(56, 4), Cells(80, 11)).Value = .Range(.Cells(2 + x, 2), .Cells(26 + x, 9)).Value
End With