Vba 复制到不带剪贴板的动态范围

Vba 复制到不带剪贴板的动态范围,vba,excel,Vba,Excel,我尝试将值粘贴到不同工作表上的动态范围,而不使用剪贴板。当代码到达Range=Range部分时,它会出错,并声明“应用程序定义的或对象定义的错误”。有什么想法吗 Sub Test2() Dim Start As Worksheet Dim ED As Worksheet Dim r As Integer, c As Integer, r1 As Integer, c1 As Integer Set Start = Sheets("Start") Set ED = Sheets("End")

我尝试将值粘贴到不同工作表上的动态范围,而不使用剪贴板。当代码到达Range=Range部分时,它会出错,并声明“应用程序定义的或对象定义的错误”。有什么想法吗

Sub Test2()
Dim Start As Worksheet
Dim ED As Worksheet
Dim r As Integer, c As Integer, r1 As Integer, c1 As Integer

Set Start = Sheets("Start")
Set ED = Sheets("End")

r = 1
c = ActiveSheet.UsedRange.Columns.Count



With Start
    Do Until .Cells(r, c).Value = ""
        r = r + 1

    Loop
    r = r - 1

End With
 r1 = 1
 c1 = ActiveSheet.UsedRange.Columns.Count

With ED

    Do Until .Cells(r1, c1).Value = ""
        r1 = r1 + 1

    Loop
    r1 = r1

 Range(Cells(r1, 1), Cells(r1 + r - 1, c1)) = Start.Range(Cells(r, c), Cells(1, 1))

 Start.Activate
  • 始终将每个父对象限定为每个范围对象。范围()内的
    单元格()
    需要指向同一父级:
  • Start.Range(Start.Cells(r,c),Start.Cells(1,1))

  • 我们不需要循环,但可以使用
    END()
    查找最后的列和行
  • 替换:

    Do Until .Cells(r, c).Value = ""
        r = r + 1
    
    Loop
    r = r - 1
    
    与:

  • 使用“调整大小”(Resize),它更短,更易于维护:
  • .Cells(r1+1,1).调整大小(r,c).Value=Start.Cells(1,1).调整大小(r,c).Value

    因此:

  • 始终将每个父对象限定为每个范围对象。范围()内的
    单元格()
    需要指向同一父级:
  • Start.Range(Start.Cells(r,c),Start.Cells(1,1))

  • 我们不需要循环,但可以使用
    END()
    查找最后的列和行
  • 替换:

    Do Until .Cells(r, c).Value = ""
        r = r + 1
    
    Loop
    r = r - 1
    
    与:

  • 使用“调整大小”(Resize),它更短,更易于维护:
  • .Cells(r1+1,1).调整大小(r,c).Value=Start.Cells(1,1).调整大小(r,c).Value

    因此:


    .Range(.Cells(r1,1),.Cells(r1+r-1,c1)).Value=Start.Range(Start.Cells(r,c),Start.Cells(1,1)).Value
    用父表限定每个范围对象。
    .Range(.Cells(r1,1),.Cells(r1+r-1,c1)).Value=Start.Range(Start.Cells(r,c),Start.Cells(1,1)).Value
    用其父表限定每个范围对象。成功!我知道这只是一个小细节。感谢您的帮助/反馈!成功!我知道这只是一个小细节。感谢您的帮助/反馈!
    Sub Test2()
    Dim Start As Worksheet
    Dim ED As Worksheet
    Dim r As Long, c As Long, r1 As Long, c1 As Long
    
    Set Start = Sheets("Start")
    Set ED = Sheets("End")
    
    With Start
        c = .Cells(1, .Columns.Count).End(xlToLeft).Column
        r = .Cells(.Rows.Count, c).End(xlUp).Row
    End With
    With ED
        c1 = .Cells(1, .Columns.Count).End(xlToLeft).Column
        r1 = .Cells(.Rows.Count, c1).End(xlUp).Row
        .Cells(r1+1, 1).Resize(r, c).Value = Start.Cells(1, 1).Resize(r, c).Value
    End With