VBA Excel:将范围值分配给新范围

tee*_*pee 2 excel vba range excel-vba cells

我无法将值从一个工作簿范围分配到当前工作簿中的范围.当我使用Range("A1:C1")分配我的范围时,此代码可以正常工作,但是当使用Range(Cells(1,1),Cells(1,3))定义我的范围时,该函数将失败:

Sub CopyRange()
    Dim inputExcel As Excel.Application, BookA As Workbook
    Path_A = ThisWorkbook.Path & "\Book_A.xlsx"
    Set inputExcel = New Excel.Application
    Set BookA = inputExcel.Workbooks.Open(Path_A, ReadOnly:=True)

    'THIS WORKS:
    ThisWorkbook.Sheets(1).Range("A1:C1").Value = _
    BookA.Sheets(1).Range("A1:C1").Value

    'THIS DOESN'T WORK:
    ThisWorkbook.Sheets(1).Range(Cells(1, 1), Cells(1, 3)).Value = _
    BookA.Sheets(1).Range(Cells(1, 1), Cells(1, 3)).Value
End Sub
Run Code Online (Sandbox Code Playgroud)

我知道这必须是一个简单的语法问题,但我无法弄明白.如何使用"单元格"工作来获取范围分配?

Jos*_*ieP 6

您还必须使用工作表对象限定Cell调用:

ThisWorkbook.Sheets(1).Range(ThisWorkbook.Sheets(1).Cells(1, 1), ThisWorkbook.Sheets(1).Cells(1, 3)).Value = _
    BookA.Sheets(1).Range(BookA.Sheets(1).Cells(1, 1), BookA.Sheets(1).Cells(1, 3)).Value
Run Code Online (Sandbox Code Playgroud)

对于像这样的连续范围,你也可以使用Resize:

ThisWorkbook.Sheets(1).Cells(1, 1).Resize(, 3).Value = _
        BookA.Sheets(1).Cells(1, 1).Resize(, 3).Value
Run Code Online (Sandbox Code Playgroud)

  • 这不是我的方法 - 如果将Range对象传递给Range属性,则需要*两个*单元格:一个起始单元格和一个结束单元格.对于一个单元格使用范围和单元格没有多大意义;-) (2认同)