VBA的Excel:指定范围内的值到一个新的范围(VBA Excel: Assigning rang

2019-10-19 02:47发布

我有麻烦分配从一个工作簿范围值在我当前工作簿中的范围。 当我分配使用范围我的范围(“A1:C1”)这个代码工作正常,但是当我的范围是使用范围(细胞(1,1),将细胞(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

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

Answer 1:

你总得有资格将细胞与工作表对象过于电话:

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

对于连续的范围一样,你也可以使用调整大小:

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


Answer 2:

我认为最终要在不解决问题的最佳途径去了解这一点。 你有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


文章来源: VBA Excel: Assigning range values to a new range