简体   繁体   English

将具有多个非相邻单元格的区域复制到同一单元格上的另一张纸上

[英]Copy a range with multiple non-adjacent cells to another sheet on the same cells

I wrote the code below which works fine except that it takes forever and looks as if Excel is having an epileptic seizure. 我写了下面的代码,除了可以永久使用,而且看起来好像Excel发生癫痫发作外,它的工作原理还不错。

Any help with something less prehistoric would be much appreciated. 任何对史前事物的帮助将不胜感激。

Sub Data()
Sheets("2").Unprotect "Joe"
Worksheets("3").Range("a").Copy
Worksheets("2").Range("D10").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("b").Copy
Worksheets("2").Range("L10").PasteSpecial Paste:=xlPasteValues
Worksheets("2").Range("L18").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("c").Copy
Worksheets("2").Range("D11").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("d").Copy
Worksheets("2").Range("L11").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("e").Copy
Worksheets("2").Range("D17").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("f").Copy
Worksheets("2").Range("L17").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("g").Copy
Worksheets("2").Range("D18").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("h").Copy
Worksheets("2").Range("D19").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("i").Copy
Worksheets("2").Range("L19").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("j").Copy
Worksheets("2").Range("D20").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("k").Copy
Worksheets("2").Range("E22").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("l").Copy
Worksheets("2").Range("E23").PasteSpecial Paste:=xlPasteValues
Worksheets("3").Range("m").Copy
Worksheets("2").Range("E24").PasteSpecial Paste:=xlPasteValues
End Sub
Sub Data()

Dim rng As Range

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With


Sheets("2").Unprotect "Joe"

With Worksheets("2")
    Set rng = Range("a")
    .Range("D10").Resize(rng.Rows.Count, rng.Columns.Count).Value2 = rng.Value2

    Set rng = Range("b")
    .Range("L10").Resize(rng.Rows.Count, rng.Columns.Count).Value2 = rng.Value2

'...and so on

End With


With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With

End Sub

Note that because you're using range names for a, b, c then there is no need to qualify them with a sheetname unless they are locally scoped. 请注意,由于您使用的是a,b,c的范围名称,因此除非它们在本地范围内,否则无需使用工作表名称对其进行限定。

Instead of copy-pasting, you could also set the value of your destination cell equal to the value of your original cell. 除了复制粘贴外,还可以将目标单元格的值设置为等于原始单元格的值。 For example: 例如:

Worksheets("2").Range("D10").Value = Worksheets("3").Range("a").Value

To prevent the seizure like behavior in the application window of Excel, do as Excelosaurus suggested and turn off screen updating at the start of your macro. 为防止在Excel的应用程序窗口中出现类似癫痫的行为,请按照Excelosaurus的建议进行操作,并在宏的开头关闭屏幕更新。 (And make sure to turn it back on at the end). (并确保最后将其重新打开)。

在子Application.ScreenUpdating = False的开头放置Application.ScreenUpdating = False ,在结尾放置Application.ScreenUpdating = True

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM