将具有多个不相邻单元格的范围复制到相同单元格上的另一个工作表

时间:2017-11-07 21:40:08

标签: excel vba excel-vba loops

我在下面编写了代码,该代码工作正常,但它需要永远,看起来好像Excel有癫痫发作。

对于史前较少的东西的任何帮助都会非常感激。

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

3 个答案:

答案 0 :(得分:2)

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

请注意,因为您正在使用a,b,c的范围名称,所以除非它们是本地范围的,否则不需要使用工作表名称限定它们。

答案 1 :(得分:1)

您还可以将目标单元格的值设置为等于原始单元格的值,而不是复制粘贴。例如:

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

要防止在Excel的应用程序窗口中出现类似行为,请按照Excelosaurus的建议进行操作,并在宏的开头关闭屏幕更新。 (并确保在最后重新开启)。

答案 2 :(得分:0)

Application.ScreenUpdating = False放在子标题的开头,将Application.ScreenUpdating = True放在最后。