2016-07-29 56 views
-3

Ich führe also ein Makro aus, das eine Tabelle vernichtet, nachdem es eine Suche durchgeführt hat. Es gibt die Ergebnisse aus, löscht sie und führt dann die Suche mit einem anderen aus.Kopieren von Blatt 1 nach Blatt 2, wenn der Wert geändert wird

Ich versuche, einen Teil des Textes zu kopieren, der auf einem anderen Blatt ausgegeben wird. ohne irgendwelche Daten zu verlieren.

Mein aktueller Code "recopies" jede Spalte jedes Mal, wenn ein neuer Zeileneintrag eingegeben wird. Ich möchte nur, dass es in die Zellen kopiert wird, die eine Grenze haben.

enter image description here

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Columns("D:P")) Is Nothing Then Exit Sub 
    Range("D" & Target.Row).Copy Sheets("Sheet3").Range("A" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("E" & Target.Row).Copy Sheets("Sheet3").Range("B" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("F" & Target.Row).Copy Sheets("Sheet3").Range("C" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("G" & Target.Row).Copy Sheets("Sheet3").Range("D" & Rows.COUNT).End(xlUp).Offset(1, 0) ' 
    Range("H" & Target.Row).Copy Sheets("Sheet3").Range("E" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("I" & Target.Row).Copy Sheets("Sheet3").Range("F" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("J" & Target.Row).Copy Sheets("Sheet3").Range("G" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("K" & Target.Row).Copy Sheets("Sheet3").Range("H" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("L" & Target.Row).Copy Sheets("Sheet3").Range("I" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("M" & Target.Row).Copy Sheets("Sheet3").Range("J" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("N" & Target.Row).Copy Sheets("Sheet3").Range("K" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("O" & Target.Row).Copy Sheets("Sheet3").Range("L" & Rows.COUNT).End(xlUp).Offset(1, 0) 
    Range("P" & Target.Row).Copy Sheets("Sheet3").Range("M" & Rows.COUNT).End(xlUp).Offset(1, 0) 
End Sub 
+0

Entschuldigung, ich habe nicht bemerkt, dass ich die Spaltenbeschriftungen nicht drin hatte. Aber danke! Ich wusste nichts über die Größenanpassung. Und ich hatte Probleme mit der Syntax der Schnittpunktfunktion. Du hast mein Problem gelöst, danke! – andrew

Antwort

1

es ist unmöglich zu wissen, wo die „Zellen, die eine gemeinsame Grenze haben“ Beginn/Ende von Ihrem Screenshot, da wir nicht die Zeilen/Spalten-Etiketten sehen. Aber es klingt wie Sie Ihre Intersect Anweisung revidieren müssen, um den spezifischen Bereich zu berücksichtigen.

Moment Intersect(Target, Columns("D:P")) Mittel jede Target Zelle, die in den Spalten D sind durch P, und zwar unabhängig von Reihen.

Was Sie brauchen, ist so etwas wie:

Intersect(Target, Range("D10:P1000")) 

Welche wäre die Feinabstimmung, so dass das _Change Ereignis nur Zellen verarbeitet, die innerhalb der angegebenen Range("D10:P1000") ändern.

Sie können auch eine einzelne.Copy Anweisung mit der .Resize Methode verwenden:

Private Sub Worksheet_Change(ByVal Target As Range) 
    ''## Modify the RANGE argument as needed 
    If Intersect(Target, Range("D10:P1000")) Is Nothing Then Exit Sub 

    Range("D" & Target.Row).Resize(1,13).Copy Sheets("Sheet3").Range("A" & Rows.COUNT).End(xlUp).Offset(1, 0) 
End Sub 

Hier ist die .Resize Methode sagt * nehmen Sie den Bereich Range("D" & Target.Row) und 13 Spalten breit machen, die Spalten D bis P enthält in Target.Row.

+0

Gute Arbeit. Was denkst du, ein 'Schnittpunkt (Ziel, Bereich (" D "& Rows.Count) .End (xlUp) .CurrentRegion)'? –

+0

Das könnte es tun !! –