我可以使用belwo代码将CopyFrom.xlsx中的范围复制到CopyTo.xlsx中:
Workbooks("CopyTo.xlsx").Worksheets("Sheet1").Range("B3:B14").Clear
Workbooks("CopyFrom.xlsx").Worksheets("Sheet1").Range("A1:A10").Copy
Workbooks("CopyTo.xlsx").Worksheets("Sheet1").Range("B3:B14").PasteSpecial Paste:=xlPasteValues
但是,当我将Clear语句放在第二位时,会出现1004错误
Workbooks("CopyFrom.xlsx").Worksheets("Sheet1").Range("A1:A10").Copy
Workbooks("CopyTo.xlsx").Worksheets("Sheet1").Range("B3:B14").Clear
Workbooks("CopyTo.xlsx").Worksheets("Sheet1").Range("B3:B14").PasteSpecial Paste:=xlPasteValues
为什么会这样?
答案 0 :(得分:5)
因为.Clear
退出剪切/复制模式并设置Application.CutCopyMode = False
。如果您尝试.Paste
,则.Clear
之后没有要复制的内容,这会导致您得到错误。
只需避免使用.Copy
和.Paste
之间的任何代码来避免任何迭代。
答案 1 :(得分:4)
如果手动执行此操作,则在复制范围然后清除另一个范围时,副本将丢失。
因此,您要在复制和粘贴之后或之前清除。另一种方法可能是Range.Value = Range.Value
,这是一个一步的过程,所以无论您做什么都无所谓。
答案 2 :(得分:0)
首先清除范围:
Workbooks("CopyTo.xlsx").Worksheets("Sheet1").Range("B3:B14").Clear
然后复制>>粘贴
Workbooks("CopyFrom.xlsx").Worksheets("Sheet1").Range("A1:A10").Copy
Workbooks("CopyTo.xlsx").Worksheets("Sheet1").Range("B3:B14").PasteSpecial Paste:=xlPasteValues
或者,您可以直接使用:
Workbooks("CopyTo.xlsx").Worksheets("Sheet1").Range("B3:B14").Value = Workbooks("CopyFrom.xlsx").Worksheets("Sheet1").Range("A1:A10"). Value
代码运行速度更快