VBA Excel:将范围值分配到一个新的范围

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

我知道这一定是一个简单的语法问题,但我一直无法弄清楚。 我怎样才能使用“单元格”的范围分配工作?

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

 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 

我认为最终你不是在解决问题的最好方法。 你的代码中有object.object.object.object标记,这很麻烦,很难解释和修复。

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

 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