在VBAmacros中复制一个variables范围

我有点困惑。 我创build了一个macros的button,从我的实际工作表s0另一个工作表中复制单元格的select( ss0都是stringvariables)

 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错误。 问题是什么? 我究竟做错了什么?

如果我计算单元格命令的总和,情况不会改变。 但是像

 Sheets(s).Cells(r, c) = x 

当我改变variables值为r和c的单个单元格的值。 (x,r和c总是整数)

先谢谢你

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

 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