2016-10-17 5 views
1

Ich versuche, Spalte A beginnend in Zeile 2 auf "Sheet1" zu kopieren und in Spalte C auf Blatt "ABC" ab Zeile 5 einzufügen. Die Anzahl der Zeilen in Spalte A ist variabel, daher kann ich keinen festen Bereich verwenden.Dynamischen Bereich von einem Arbeitsblatt in ein anderes kopieren und einfügen

Der folgende Code tut, was ich brauche, aber ich versuche, mit .Select und .Activate Einstellung

LastRow = Range("A" & Rows.Count).End(xlUp).Row 
Sheets("Sheet1").Range("A2:A" & LastRow).Copy 
Sheets("ABC").Activate 
Sheets("ABC").Range("C5:C" & LastRow).Select 
Selection.PasteSpecial xlPasteValues 

Ich habe versucht, die Spalten eines anderen gleich eins zu vermeiden, mit diesem Code:

Sheets("ABC").Range("C5").End(xlDown).Value=Sheets("Sheet1").Range("A2:A" & LastRow).Value 

Dies läuft ohne Fehler, aber es „tut nichts“ - Keine Daten erscheinen auf Arbeitsblatt „ABC“

ich habe auch versucht zu folgenden:

Dim WS As Worksheet 
    Dim wsABC As worksheet 


    Set WS = Sheets("Sheet1") 
    Set wsABC = Sheets("ABC") 
    LastRow = Range("A" & Rows.Count).End(xlUp).Row 

    WS.Range("A2:A" & LastRow).Copy 
    wsABC.Range("C5").End(xlDown).Paste 

Dies erzeugt einen „Laufzeitfehler # 438 Objekt diese Eigenschaft oder diese Methode nicht unterstützt“ Fehler auf dieser Linie:

wsABC.Range("C5").End(xlDown).Paste 

Eine andere Methode, die ich versuchte, wurde wie folgt:

Dim WS As Worksheet 

    Set WS = Sheets("Sheet1") 
    Set wsABC = Sheets("ABC") 


    With WS 
    LastRow = Range("A" & Rows.Count).End(xlUp).Row 
    WS.Range("A2:A" & LastRow).value = wsABC.Range("C5:C & LastRow").Value 

End With 

Dies führt zu einem "Laufzeitfehler" 1004 'Anwendungsdefinierter oder objektdefinierter Fehler.

Ich bin offen für Korrekturen/Kommentare zu meinen Versuchen, ich möchte nur vermeiden mit .Select und .Activate.

Vielen Dank im Voraus für Ihre Zeit und Unterstützung!

Antwort

2

Codierungsstile können stark variieren. Hier ist eine Möglichkeit zu tun, was Sie suchen:

Sub tgr() 

    Dim wb As Workbook 
    Dim wsData As Worksheet 
    Dim wsDest As Worksheet 

    Set wb = ActiveWorkbook 
    Set wsData = wb.Sheets("Sheet1") 
    Set wsDest = wb.Sheets("ABC") 

    With wsData.Range("A2", wsData.Cells(wsData.Rows.Count, "A").End(xlUp)) 
     wsDest.Range("C5").Resize(.Rows.Count).Value = .Value 
    End With 

End Sub 
1
With Worksheets("Sheet 1") 
    With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) 
     Worksheets("ABC").Range("C5").Resize(.Rows.Count).Value = .Value 
    End With 
End With 
Verwandte Themen