VBA#1004使用范围(单元格(,),单元格(,))

时间:2016-04-08 08:18:55

标签: vba copy range

运行以下代码时出现错误#1004:

Sub Test()
      Worksheets("Snapshot").Range(Cells(1, 1), Cells(10, 2)).Copy _
      Destination:=Worksheets("Snapshot2").Range(Cells(1, 1), Cells(10, 2))
End Sub

但是当我改变这个

Sub Test()
      Worksheets("Snapshot").Range("A1:B10").Copy _
      Destination:=Worksheets("Snapshot2").Range("A1:B10")
End Sub

它工作正常。

是否有使用单元格( , )运行此代码的解决方案?或者我是否必须构建一个显示(" : ")语句的字符串?

2 个答案:

答案 0 :(得分:0)

第一个对我来说很好,也许试试这个 -

Sub Test()
      Worksheets("Snapshot").Range(Worksheets("Snapshot").Cells(1, 1), _
            Worksheets("Snapshot").Cells(10, 2)).Copy _
      Destination:=Worksheets("Snapshot2").Range(Worksheets("Snapshot2").Cells(1, 1), _
            Worksheets("Snapshot2").Cells(10, 2))
End Sub

答案 1 :(得分:0)

如果不合格,Cells默认指的是当前活动工作表的单元格。您之所以收到该错误,是因为您正在查看表单"快照" (或" Snapshot2")用于不同工作表(当前活动工作表)中的单元格。

您可以完全限定Cells,最好使用变量:

Dim sht1 As Worksheet
Dim sht2 As Worksheet
Set sht1 = Worksheets("Snapshot")
Set sht2 = Worksheets("Snapshot2")
sht1.Range(sht1.Cells(1, 1), sht1.Cells(10, 2)).Copy _
    Destination:=sht2.Range(sht2.Cells(1, 1), sht2.Cells(10, 2))

或者,我更喜欢这个,请使用Resize

Dim rangeHeight As Long
Dim rangeWidth As Long
rangeHeight = 10
rangeWidth = 2
Worksheets("Snapshot").Cells(1, 1).Resize(rangeHeight, rangeWidth).Copy _
    Destination:=Worksheets("Snapshot2").Cells(1, 1).Resize(rangeHeight, rangeWidth)