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

时间:2013-12-17 15:17:16

标签: excel vba excel-vba cells range

我无法将值从一个工作簿范围分配到当前工作簿中的范围。当我使用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

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

2 个答案:

答案 0 :(得分:5)

您还必须使用工作表对象限定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

对于连续范围,您也可以使用Resize:

ThisWorkbook.Sheets(1).Cells(1, 1).Resize(, 3).Value = _
        BookA.Sheets(1).Cells(1, 1).Resize(, 3).Value

答案 1 :(得分:1)

我认为最终你不是解决问题的最佳方法。您的代码中有object.object.object.object符号,这很麻烦,难以解释和修复。

如果您定义了更多变量,代码将更容易排除故障并解决您的问题:

Dim myAddr as String 'A string to represent the Address of the range
myAddr = Cells(1,1).Address & ":" & Cells(1,3).Address

ThisWorkbook.Sheets(1).Range(myAddr).Value = BookA.Sheets(1).Range(myAddr).Value