2017-02-03 6 views
0

Ich versuche, eine Copy-Paste-Schleife innerhalb eines Arbeitsblatts zu erstellen und diese Schleife dann auf alle anderen Arbeitsblätter innerhalb derselben Arbeitsmappe anzuwenden.VBA: Verschachtelung für Schleife in jeder Schleife

Das Problem besteht jedoch darin, dass der Code nicht zum nächsten Arbeitsblatt verschoben wird, nachdem die erste Copy-Paste-Schleife auf einem Arbeitsblatt ausgeführt wurde. Die Schleife wiederholt sich einfach im selben Arbeitsblatt.

For-Schleife: Einfache

Copy Paste-

foreach-Schleife: Schleife durch Arbeitsblätter

Dies ist der Code:

Sub Code() 

Dim sheet As Worksheet 
Dim nr As Integer 

For Each sheet In Worksheets 

    For nr = 14 To 309 

     Range("C" & nr).Copy 
     Range("C3").PasteSpecial xlPasteValues 

     Range("D" & nr).Copy 
     Range("C4").PasteSpecial xlPasteValues 

     ActiveSheet.Calculate 

     Range("F2").Copy 
     Range("E" & nr).PasteSpecial xlPasteValues 

     Range("I2").Copy 
     Range("F" & nr).PasteSpecial xlPasteValues 

    Next nr 

Next 

End Sub 

Vielen Dank für Ihre Hilfe!

+0

Bitte geben Sie Ihre Frage vor dem Kriechen, sollte groveling am Ende des Beitrags gehen nur. – awiebe

Antwort

0

Sie müssen nur Ihre Bereiche qualifizieren, um sie auf Arbeitsblatt zu verweisen, ist Frage.

Dim sh as Worksheet, nr as Long 
For Each sh In ThisWorkbook.Worksheets 
    For nr = 14 To 309 
     with sh 
      .Range("C" & nr).Copy 
      .Range("C3").PasteSpecial xlPasteValues 
      .Range("D" & nr).Copy 
      .Range("C4").PasteSpecial xlPasteValues 
      .Calculate 
      .Range("F2").Copy 
      .Range("E" & nr).PasteSpecial xlPasteValues 
      .Range("I2").Copy 
      .Range("F" & nr).PasteSpecial xlPasteValues 
     End with 
    Next nr 
Next sh 

Es ist eine gute Übung, um immer Ihre Bereiche qualifizieren. Ansonsten gehen sie zu dem Blatt, das gerade aktiv ist.

0

Um sowohl die Leistung zu verbessern und nicht die Zwischenablage Nutzung betonen Sie Copy & PasteSpecial Methoden vermeiden und wechseln Value Eigenschaftszuweisungen

Darüber hinaus können Sie lenken Bereiche mit der richtigen Syntax

kondensieren wie folgt:

Option Explicit 

Sub main() 
    Dim ws As Worksheet, nr As Integer 

    For Each ws In ThisWorkbook.Worksheets 
     For nr = 14 To 309 
      With ws 
       .Range("C3:C4").Value = .Range("C" & nr).Resize(2).Value 
       .Calculate 
       .Range("E" & nr).Resize(, 2).Value = Array(.Range("F2").Value, .Range("I2").Value) 
      End With 
     Next 
    Next 
End Sub