excel 使用.Range(Cells(R,C),Cells(R,C))[duplicate]将单元格区域从一个工作表复制到另一个工作表

bzzcjhmw  于 2023-04-22  发布在  其他
关注(0)|答案(2)|浏览(83)

此问题已在此处有答案

Why does Range work, but not Cells?(1个答案)
4天前关闭。
我已经编辑了我原来的问题,因为我的源单元格包含超链接,我需要复制到目标单元格,所以我刚刚意识到,使用.value和.resize的解决方案对我不起作用。
使用VBA,我需要使用Cells(R,C)方法(而不是Range("A1:A10")方法)将一系列单元格从一个工作表复制到同一工作簿中的另一个工作表,因为我的行/列是我正在使用代码检测的变量。因此,我不能硬编码行号,因为最后一行会发生变化。
最初我追求使用.value属性而不是.value属性,但那是在我意识到我的超链接不会被复制之前。
我从这里的回复中了解到,Cells(r,c)引用假设工作表是ActiveSheet(而Range()不是),并且由于Source Sheet和Target Sheet不能同时都是ActiveSheet,这就产生了一个问题。
这段代码是对我最初问题的回应,但不幸的是,这导致了一个400运行时错误。

Sub CopyCells()
  Const TargetSheet = "Sheet1"
  Const SourceSheet = "Sheet2"
  'Goal is to copy the cells Sheets("Sheet2").Range("B10:B19") to Sheets("Sheet1").Range("F1:F10")
  'Below line of code gives 400 error
  Sheets(SourceSheet).Range(Cells(10, 2), Cells(19, 2)).Copy (Sheets(TargetSheet).Cells(1, 6))
End Sub

有人能告诉我我做错了什么吗?

rryofs0p

rryofs0p1#

计算行数并使用.Resize

Option Explicit

Sub CopyValues()

      Const TargetSheet = "Sheet1"
      Const SourceSheet = "Sheet2"
      
      Dim wsSource As Worksheet, wsTarget As Worksheet
      With ThisWorkbook
         Set wsTarget = .Sheets(TargetSheet)
         Set wsSource = .Sheets(SourceSheet)
      End With
    
      Dim r1 As Long, r2 As Long, n As Long
      r1 = 10
      r2 = 20
      n = r2 - r1 + 1
      wsSource.Cells(r1, 1).Resize(n).Copy wsTarget.Cells(1, 1)
  
 End Sub
zour9fqk

zour9fqk2#

可以使用Range.Copy方法而不是=

Worksheets(Sheet1Name).Range(Cells(100, 1), Cells(110, 1)).Value = Worksheets(Sheet2Name).Range(Cells(2, 1), Cells(12, 1)).Value

可以成为

Sheets(sheet1Name).Range(Cells(100, 1), Cells(110, 1)).Copy (Sheets(sheet2Name).Cells(2, 1)

不幸的是,我是一个使用VBA的新手,所以我不确定使用=符号时的语法…
希望我的回答能满足你的需求:)

相关问题