2017-11-07 1 views
0

Ich schrieb den folgenden Code, der gut funktioniert, außer dass es ewig dauert und sieht aus, als ob Excel einen epileptischen Anfall hat.Kopieren Sie einen Bereich mit mehreren nicht benachbarten Zellen auf ein anderes Blatt auf den gleichen Zellen

Jede Hilfe mit etwas weniger prähistorischen würde sehr geschätzt werden.

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 
+0

Bitte akzeptieren Sie eine der folgenden Antworten, wenn es Ihr Problem gelöst hat. – jeffreyweir

Antwort

0

Setzen Sie am Anfang Ihres Unter Application.ScreenUpdating = False und Application.ScreenUpdating = True am Ende.

+0

Kein Erfolg damit. Ich habe gerade die erste Zeile direkt nach dem Sub-Namen() und die zweite Zeile direkt vor dem End-Sub hinzugefügt, aber es startet den Debugger direkt in der ersten Zeile. Mache ich etwas falsch? – Haellion

1

Anstelle des Kopierens können Sie den Wert Ihrer Zielzelle auch auf den Wert Ihrer ursprünglichen Zelle setzen. Zum Beispiel:

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

Um die Beschlagnahme Verhalten im Anwendungsfenster von Excel zu verhindern, gehen Sie wie Excelosaurus vorgeschlagen und schalten Sie die Bildschirmaktualisierung zu Beginn des Makros aus. (Und stellen Sie sicher, es am Ende wieder zu aktivieren).

+1

Hätte darüber nachgedacht, aber nichts garantiert, dass die genannten Bereiche wie "a" nur eine Zelle enthalten. – Excelosaurus

+0

Stimmt das. Ich habe die Annahme gemacht, dass es 1: 1 war. Wie Jeffrey Weir angemerkt hat, würden Sie "Range.Resize" verwenden, wenn die benannten Bereiche keine einzelne Zelle sind. –

+0

Tausend Dank für Ihre Antworten. Ich habe den obigen Ausdruck für jede Instanz des Codes verwendet und es funktioniert vollkommen reibungslos. Zum Glück für diese Anwendung waren alle Bereiche einzellig, aber ich simulierte einen mit mehreren Zellen und die Range.Resize funktionierte auch gut. – Haellion

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 

Beachten Sie, dass, weil Sie Bereichsnamen verwenden für a, b, c dann gibt es keine Notwendigkeit, sie mit einem Blattnamen zu qualifizieren ist, wenn sie nicht lokal scoped sind.

+0

Vielen Dank für Ihre schnelle Antwort. Es funktioniert perfekt, obwohl ich immer noch nicht vollständig verstehe, da dies für mich sehr fortgeschritten ist. Aber ich bin dort angekommen, nachdem ich den Kopf ein bisschen rumgelegt habe. – Haellion

+0

Kühl. Bitte markieren Sie es als beantwortet, wenn es Ihr Problem gelöst hat. – jeffreyweir

Verwandte Themen