2016-05-16 9 views
1

Ich habe die verschiedenen in diesem Forum genannten Methoden verwendet und keine scheinen zu funktionieren, also werde ich versuchen, genauer zu sein.Excel 2013: Verwenden Sie Makro, um Daten von einem Blatt zu einem anderen innerhalb derselben Arbeitsmappe zu kopieren und anschließend hinzuzufügen

Ich habe eine Arbeitsmappe namens LIBRARY.xlsm.

Dieses Arbeitsbuch enthält zwei Arbeitsblätter: CALCULATOR und CUTS.

Das Arbeitsblatt CALCULATOR enthält zwei Tabellen: INPUT und OUTPUT.

Ich gebe Daten in INPUT ein, Werte werden berechnet und automatisch in OUTPUT eingegeben.

Ich erstellen eine Schaltfläche unter OUTPUT mit Makro, um Daten in OUTPUT zu Arbeitsblatt CUTS zu kopieren.

Ich gebe neue Daten in INPUT ein, die dann OUTPUT aktualisiert.

Jetzt möchte ich diese neuen Daten in CUTS kopieren, ohne vorherige Daten zu überschreiben oder zu löschen.

Da dieses Projekt in 5 Abschnitte unterteilt ist, sollte ich fünf Tabellen im Arbeitsblatt CUTS haben, die ich dann ausdrucken kann.

Die INPUT-Tabelle umfasst Zellen A1: M31, was egal ist (ich kopiere das nicht).

Die OUTPUT-Tabelle belegt die Zellen O6: S26. Dies sind die Daten, die kopiert werden müssen.

Platzierung in Arbeitsblatt CUTS kann bei Zelle A1 beginnen (was bedeutet, dass die Tabelle den Bereich A1: E20 hat). Ich möchte eine Spalte überspringen und dann den nächsten Datensatz platzieren. Daher sollte der nächste Datensatz bei G1 (G1: K20), dann bei M1: Q20 usw. beginnen. Vielleicht gehen Sie nur drei Tabellen über und dann beginnen die nächsten drei unten (getrennt durch Reihe).

Hier ist der Code versucht zu verwenden. Problem ist, dass es die Werte nicht behält und die vorherigen Daten überschreibt.

Sub Create_CUTS() 

Dim sourceSheet As Worksheet 
Dim sourceRange As Range 
Dim sourceRows As Integer 

Set sourceSheet = Worksheets("CALCULATOR") 
sourceRows = WorksheetFunction.CountA(sourceSheet.Range("A:A")) 
Set sourceRange = sourceSheet.Range("O6:S26" & sourceRows) 

Dim targetSheet As Worksheet 
Dim targetRange As Range 
Dim targetRows As Integer 

Set targetSheet = Worksheets("CUTS") 
targetRows = WorksheetFunction.CountA(targetSheet.Range("A:A")) 
Set targetRange = targetSheet.Range("A" & targetRows + 1 & ":A" & targetRows + 1 + sourceRows) 
sourceRange.Copy Destination:=targetRange 

End Sub 

Vielen Dank, jeder -Grumps

Antwort

0

ein paar Möglichkeiten gibt es, dies zu tun. Am einfachsten ist es wahrscheinlich, nur auf den verwendeten Bereich des Zielblattes zu verweisen, um zu wissen, wo Sie mit dem letzten Einfügen aufgehört haben.

lastUsedRow = targetSheet.UsedRange.Rows.Count 
lastColumnUsed = targetSheet.UsedRange.Columns.Count 

Dann fügen Sie einfach eine Spalte oder Zeile und die Tabelle in der neuen Position einfügen. Wenn die Anzahl der Spalten 22 oder größer ist, fügen Sie eine Zeile und fügen Sie bei "A" und der lastUsedRow + 2. Es gibt ein gewisses Potenzial dafür, dass es falsch ist, wenn die Blätter mit Zellen gespeichert werden, die leer sind, aber Excel liest sie als "gebraucht" (irgendwie schaffen Leute, mit denen ich arbeite, die ganze Zeit, ich weiß nicht einmal, wie sie das tun TU es). Es hört sich so an, als würden diese Benutzer nicht manipuliert, also würde ich nicht denken, dass dies ein Problem wäre, aber wenn es ein mögliches Problem für Sie ist, können Sie eine Schleife verwenden, um die nächste leere Zelle zu finden die eingebaute "usedrange" Kollektion.