VBA - 使用带范围的单元格进行复制和粘贴

时间:2015-04-13 17:32:36

标签: excel vba excel-vba

我是VBA的初学者,我发现很难理解我的下面的陈述有什么问题。为了给出我想要做的事情的上下文,我有一个源表(oldViewsWbk),其单元格要复制到我的最终工作簿(finalViewsWbk),然后对这些复制的单元格做一些逻辑。

ActiveSheet.Range(Cells(2, 2), Cells(246, 2)).Value = oldViewsWbk.Sheets(1).Range(Cells(2, 2), Cells(246, 2)).Value

我的ActiveSheet是我的最终工作簿。现在我已经对行号和列号进行了硬编码,但是一旦我可以使用它们,它们将被变量替换。

我知道我可以使用Copy和PasteSpecial来完成这项工作,但我想知道为什么这个特定的语句不断抛出错误'1004': Object defined or Application defined error。也许我根本不能这样做,但我想知道背后的原因是什么。

非常感谢!

4 个答案:

答案 0 :(得分:0)

因为在调用Cells时没有引用工作表,所以隐含了活动表。它适用于等式的左侧,因为范围和单元格都在同一张纸上(ActiveSheet)

ActiveSheet.Range(Cells(2, 2), Cells(246, 2)).Value

但不在右侧,因为当单元格位于activeSheet上时,工作表是oldViewsWbk.Sheets(1)

oldViewsWbk.Sheets(1).Range(Cells(2, 2), Cells(246, 2)).Value

要解决这个问题,请使用

ActiveSheet.Range(ActiveSheet.Cells(2, 2), ActiveSheet.Cells(246, 2)).Value = oldViewsWbk.Sheets(1).Range(oldViewsWbk.Sheets(1).Cells(2, 2), oldViewsWbk.Sheets(1).Cells(246, 2)).Value

答案 1 :(得分:0)

Cells指的是活动表。 .Cells指的是您引用的表格。

dim rng as Range
With oldViewswbk.Sheets(1)
    Set rng = .Range(.Cells(2,2),.Cells(246,2))
Wend

ActiveSheet.Range(Cells(2,2),Cells(246,2)).Value = rng.Value

答案 2 :(得分:0)

为了避免这样的问题:

ActiveSheet.Range("B2:B246").Value = oldViewsWbk.Sheets(1).Range("B2:B246").Value

答案 3 :(得分:0)

关于如何启动代码的全部内容,例如,

Sub Button1_Click()
    Dim wb As Workbook
    Dim bk As Workbook
    Dim ws As Worksheet
    Dim sh As Worksheet
    Dim WSrng As Range
    Dim shRng As Range

    Set wb = Workbooks("Book3 1.xlsx")
    Set bk = Workbooks("Book3 2.xlsx")

    Set ws = wb.Sheets("Sheet1")
    Set sh = bk.Sheets("Sheet1")

    Set WSrng = ws.Range("A1:A10")
    Set shRng = sh.Range("A1:A10")

    WSrng.Value = shRng.Value


End Sub