我是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
。也许我根本不能这样做,但我想知道背后的原因是什么。
非常感谢!
答案 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