VBA 只有激活 sheet 才能复制和粘贴
VBA copy and paste only work if I activate the sheet
我正在复制 sheet 之间的一些范围,我不知道为什么只有在我复制或粘贴它们之前激活 sheet 时它才有效。这有效:
s.Activate
s.Range(Cells(2, 8), Cells(lrow, 8)).Copy
d.Activate
d.Range(Cells(2, 3), Cells(lrow, 3)).PasteSpecial xlPasteValues
这不是:
s.Range(Cells(2, 8), Cells(lrow, 8)).Copy
d.Range(Cells(2, 3), Cells(lrow, 3)).PasteSpecial xlPasteValues
为什么 VBA 需要激活 sheet,如果我已经用变量 "s" 和 "d" 指定了它们?谢谢
那是因为当Range(...)
和Cells(...)
方法没有限定时,他们操作在Active Worksheet.
s.Activate
s.Range(Cells(2, 8), Cells(lrow, 8)).Copy
如果 s
不是活动的 sheet,您将从 s
请求一系列不属于它但属于另一个的单元格,活跃工作sheet。因为
Cells(2, 8) <==> ActiveSheet.Cells(2, 8)
Cells(lrow, 8) <==> ActiveSheet.Cells(lrow, 8)
为避免此麻烦,始终限定您的范围和单元格:
s.Range(s.Cells(2, 8), s.Cells(lrow, 8)).Copy
这是正确的做法;每当您发现自己使用 Activate
和 Select
之类的东西时,请理解您很可能做错了什么。在良好的实践中,您几乎永远不需要使用这些东西。
我正在复制 sheet 之间的一些范围,我不知道为什么只有在我复制或粘贴它们之前激活 sheet 时它才有效。这有效:
s.Activate
s.Range(Cells(2, 8), Cells(lrow, 8)).Copy
d.Activate
d.Range(Cells(2, 3), Cells(lrow, 3)).PasteSpecial xlPasteValues
这不是:
s.Range(Cells(2, 8), Cells(lrow, 8)).Copy
d.Range(Cells(2, 3), Cells(lrow, 3)).PasteSpecial xlPasteValues
为什么 VBA 需要激活 sheet,如果我已经用变量 "s" 和 "d" 指定了它们?谢谢
那是因为当Range(...)
和Cells(...)
方法没有限定时,他们操作在Active Worksheet.
s.Activate
s.Range(Cells(2, 8), Cells(lrow, 8)).Copy
如果 s
不是活动的 sheet,您将从 s
请求一系列不属于它但属于另一个的单元格,活跃工作sheet。因为
Cells(2, 8) <==> ActiveSheet.Cells(2, 8)
Cells(lrow, 8) <==> ActiveSheet.Cells(lrow, 8)
为避免此麻烦,始终限定您的范围和单元格:
s.Range(s.Cells(2, 8), s.Cells(lrow, 8)).Copy
这是正确的做法;每当您发现自己使用 Activate
和 Select
之类的东西时,请理解您很可能做错了什么。在良好的实践中,您几乎永远不需要使用这些东西。