Spezifische Zellen kopieren

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Spezifische Zellen kopieren

    Moin Leute, folgendes Problem:
    Ich möchte von einem Worksheet in ein anderes Worksheet spezielle Zellen kopieren. Jedoch nur, wenn die Einträge in Spalte A gleich sind. Jedoch sagt er in der Copy Funktion in der 2. Schleife, dass ein Objekt erforderlich ist (Rot markiert). Dafür habe ich jetzt folgenden Code erstellt:

    Visual Basic-Quellcode

    1. Sub copyComments(ByVal clSource As String, ByVal clDest As String, ByVal bereichEnde As Integer)
    2. ' Funktion zum Kopieren der Kommentare
    3. Dim sourceRange As Range ' Bereich im Quellblatt
    4. Dim destRange As Range ' Bereich im Zielblatt
    5. Dim zeile As Integer ' Zaehlvariable fuer die aktuelle Zeile
    6. Dim zeileSource As Long, zeileDest As Long, lastRowSource As Long, lastRowDest As Long
    7. Dim ValueOfPoint As String
    8. If clSource <> "No" Then
    9. lastRowSource = Worksheets(clSource).Cells(Rows.Count, 1).End(xlUp).Row
    10. For zeileSource = 2 To lastRowSource
    11. ValueOfPoint = Worksheets(clSource).Cells(zeileSource, "A")
    12. Worksheets(clDest).Activate
    13. lastRowDest = Worksheets(clSource).Cells(Rows.Count, 1).End(xlUp).Row
    14. For zeileDest = 2 To lastRowDest
    15. If Worksheets(clDest).Cells(zeileDest, "A").Value = ValueOfPoint Then
    16. Worksheets(clSource).Activate
    17. Worksheets(clSource).Range(Cells(zeileSource, "J"), Cells(zeileSource, "K")).Copy
    18. Worksheets(clDest).Activate
    19. Worksheets(clDest).Range(Cells(zeileDest, "J"), Cells(zeileDest, "K")).Select
    20. ActiveWorksheet.Paste ' hier war die rote Markierung
    21. ' Kommentare kopieren und Schriftfarbe aendern
    22. ' Worksheets(clSource).Range(Worksheets(clSource).Cells(zeileSource, "J"), Worksheets(clSource).Cells(zeileSource, "K")).Copy Destination:=Worksheets(clDest).Range(Worksheets(clDest).Cells(zeileDest, "J"), Worksheets(clDest).Cells(zeileDest, "K"))
    23. ' Worksheets(clDest).Range(Worksheets(clSource).Cells(zeileSource, "J"), Worksheets(clSource).Cells(zeileSource, "K")).Font.ColorIndex = 16
    24. End If
    25. Next zeileDest
    26. Application.CutCopyMode = False
    27. Next zeileSource
    28. Worksheets(clSource).Activate
    29. Worksheets(clSource).Range("A1").Select
    30. End If
    31. End Sub


    Vielleicht könnt ihr mir weiter helfen.

    *Topic verschoben, VB-Tag eingefügt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich sehe hier kein VB.Net.
    Das ist Excel-VBA.
    Und zwar direkt aus dem Macro-Recorder.
    Und ohne VB-Tags präsentiert, deshalb kaum lesbar.

    Manu94 schrieb:

    Worksheets(clSource).Activate
    Worksheets(clSource).Range(Cells(zeileSource, "J"), Cells(zeileSource, "K")).Copy
    Worksheets(clDest).Activate
    Worksheets(clDest).Range(Cells(zeileDest, "J"), Cells(zeileDest, "K")).Select
    ActiveWorksheet.Paste

    Das sieht furchtbar aus und kann wesentlich einfacher geschrieben werden.

    Visual Basic-Quellcode

    1. ​Worksheets(clSource).Range(Cells(zeileSource, "J"), Cells(zeileSource, "K")).Copy Destination:=Worksheets(clDest).Range(Cells(zeileDest, "J"), Cells(zeileDest, "K"))

    und wahrscheinlich ist tatsächlich gemeint:

    Visual Basic-Quellcode

    1. ​Worksheets(clDest).Range("J" & zeileDest & ":K" & zeileDest).Value = Worksheets(clSource).Range("J" & zeileSource & ":K" & zeileSource).Value

    Und selbst das ist noch umständlich ausgedrückt.

    Grundregel:
    Methoden wie .Activate, .Select, .Copy, .Paste sind GUI-Elemente und haben in einem Programm üblicherweise nichts verloren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --