运行时错误 – 438

我有以下代码,我试图将数据从一张表复制到另一个工作簿中。 当我运行代码时,运行时错误-438

Sub Copy() Sheets("Sheet1").Range("A1:D20").Copy Sheets("Sheet2").Activate Range("E1").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub 

尝试下面的代码。 你不应该依赖激活和select。

 Sub ZCopy() Sheets("Sheet1").Range("A1:D20").Copy Sheets("Sheet1").Paste Destination:=Worksheets("Sheet2").Range("E1") Application.CutCopyMode = False End Sub 

有趣的阅​​读

  1. MSDN
  2. 如何避免在Excel VBAmacros中使用select

你有特别的需要复制和粘贴? 这可能是缓慢而低效的。 如果您只是将数据从一个表格复制到另一个表格,则可以将一个范围的值设置为等于另一个范围的值,并避免整个事件。

 Sheets("Sheet2").Range("E1:H20").Value = Sheets("Sheet1").Range("A1:D20").Value 

这会将Sheet2上单元格E1:H20的范围设置为与Sheet1上范围A1:D20中相同的值,这实际上是复制和粘贴。 我应该补充一点,这只适用于价值本身。

如果有需要复制和粘贴的特定格式(或公式),则此方法将不起作用。