VBA复制和粘贴仅在激活工作表时才起作用

时间:2016-12-29 16:58:08

标签: vba copy-paste

我正在复制纸张之间的某些范围,我不知道为什么只有在我复制或粘贴纸张之前激活纸张时它才有效。这有效:

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

如果我已经使用变量" s"和" d"?感谢

1 个答案:

答案 0 :(得分:1)

这是因为当Range(...)Cells(...)方法不合格时,它们会在 Active Worksheet 上运行。

  

s.Activate

     

s.Range(细胞(2,8),细胞(lrow,8))。复制

如果s不是活动工作表,您将从s请求一系列不属于它的单元格,而是另一个活动工作表。因为

       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

这是正确的方法;每当您发现自己使用ActivateSelect等内容时,请了解您最有可能做错事。在良好的实践中,你几乎不需要使用这些东西。