我无法将值从一个工作簿范围分配到当前工作簿中的范围。当我使用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
我知道这必须是一个简单的语法问题,但我无法弄明白。如何使用“单元格”工作来获取范围分配?
答案 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