Excel VBA Bestimmten Zellenbereich per Schleife auf mehrere Tabellenblätter kopieren

Nico_B

Lt. Junior Grade
Registriert
Sep. 2010
Beiträge
345
Hallo zusammen.

Ich habe eine Excel-Arbeitsmappe in der definieren ich auf einem Tabellenblatten in einem bestimmten Bereich Tabellenblätter (Tabellenblattbezeichnung) die feste Zellenbereich von dem Ausgangstabellenblatt auf alle aufgelisteten Tabellenblätter kopieren soll. Die Schleife klappt nur nicht ganz. Vielleicht kann mir jemand helfen.

Code:
Sub MAkopieren()

Dim i As Long, j As Long
Dim EM As Long, LM As Long

EM = Worksheets("Optionen").Range(A74)
LM = Worksheets("Optionen").Range(A85)

With Worksheets("Optionen")
For i = EM To LM
Worksheets(i).Range("B42:b55").Value = Worksheets("Optionen").Range("B13:B27").Value
            j = j + 1
    Next i
End With

End Sub
 
Quell- und Zielrange sind unterschiedlich lang.

Geht es dann?
 
Code:
Dim i As Long, j As Long
Dim EM As Long, LM As Long
warum long und nicht Integer? 32-Bit sollten doch reichen?

Code:
EM = Worksheets("Optionen").Range(A74)
LM = Worksheets("Optionen").Range(A85)
Hier weist du der Long Variable ein Range Objekt zu, mich wundert das das überhaupt kompiliert.
Falls du den darin enthaltenen Text haben möchtest (und dieser eine Zahl ist) solltest du mit der .value methode arbeiten

Code:
With Worksheets("Optionen")
Damit sparst du dir jedesmal With Worksheets("Optionen").Range(xx) o.ä zu schreiben. Nutzt aber die Referenz auf das Worksheet trotzdem noch. Kannst du eigentlich weglassen wenn du jedesmal wieder worksheet.... schreibst

die Variable j erhöhst du bei jedem Durchlauf nutzt sie aber garnicht, ist das Absicht?

achso und eine Range kannst du so nicht kopieren:
sondern so:
Code:
Worksheets("XXX").Range("XX:YY").Copy destination:=Worksheets("YYYY").Range("XX")
 
Zuletzt bearbeitet:
Warum soll man so eine Range nicht kopieren können? Nur das 1. Value stört:
Code:
Sub yyRangeKopieren()
Worksheets("Blatt4").Range(Worksheets("Blatt4").Cells(1, 12), _
Worksheets("Blatt4").Cells(21, 12)) = _
Worksheets("Blatt5").Range(Worksheets("Blatt5").Cells(1, 4), _
Worksheets("Blatt5").Cells(21, 4)).Value
End Sub
Alles eine Frage des Referenzierens und vor allem ohne dieses lästige Copy!

Code:
Sub Makopieren()
Dim i As Long
 With Worksheets("Optionen")
  For i = .Range("A74") To .Range("A85")
   Worksheets(i).Range("B42:B55") = .Range("B13:B26").Value
  Next i
 End With
End Sub
Sollte eine kondensierte Version sein die nun tut. j habe ich rausgeworfen weil es keine Rolle Spielte. A74 z.B. muss in "" außer es wäre eine irgendwo definierte String-Variable mit dem Inhalt "A74"…

Persönlich bevorzuge ich:
Code:
Sub Makopieren2()
Dim i As Long
Dim B As Range
 With Worksheets("Optionen")
  Set B = .Range(.Cells(13, 2), .Cells(26, 2))
  For i = .Cells(74, 1) To .Cells(85, 1)
   Worksheets(i).Range("B42:B55") = B.Value
  Next i
 End With
End Sub
…weil mir zählbare Zahken lieber sind als Adresstexte.

CN8
 
Zurück
Oben