【问题标题】:VBA #1004 using Range(Cells(,),Cells(,))VBA #1004 使用 Range(Cells(,),Cells(,))
【发布时间】:2016-04-08 18:18:06
【问题描述】:

运行以下代码时出现错误 #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

效果很好。

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

【问题讨论】:

    标签: vba copy range


    【解决方案1】:

    当不合格时,Cells 默认引用当前活动工作表的单元格。您收到该错误是因为您在工作表“Snapshot”(或“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)    
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 2020-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-29
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多