PDA

Vollständige Version anzeigen : Makro: Einträge in anderes Tabellenblatt kopieren


SuperSonic22
22.07.2014, 10:13
Hallo,

ich habe folgendes Problem. Ich habe eine Excel Liste mit Teilen und dazugehörigen Daten wie Preis, Lieferzeit etc.. Nun ändern sich beispielsweise die Preise, was in der Liste dann geändert wird. Allerdings gibt es zu jedem Teil ein Tabellenblatt, welches zur Dokumentation der Änderungen dient. Ich möchte nun ein Makro welches via Button oder wie auch immer die Preise automatisch in das zugehörige Tabellenblatt kopiert. Bisher habe ich folgenden Code:

Private Sub CommandButton1_Click()
Worksheets("Tabelle2").Rows("3:3").Insert Shift:=xlUp
Range("A2,B2,C2").Copy
Worksheets("Tabelle2").Range("A3").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
End Sub

Allerdings schiebt es beim Einfügen der neuen Zeile im Tabellenblatt die alten Preise nach unten, ich hätte aber gern das der aktuelle Preis unten steht. Im Moment steht er immer in der obersten Zeile.

Vielen Dank schonmal im Voraus.:)

Beverly
22.07.2014, 10:34
Hi,

Dim lngErste As Long
With Worksheets("Tabelle2")
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Range("A2,B2,C2").Copy
.Cells(lngErste, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
End With


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

SuperSonic22
24.07.2014, 15:03
Danke das funktioniert jetzt so wie ich das wollte. Ich habe allerdings ein neues Problem entdeckt.

Ich möchte auch noch das in dem Tabellenblatt welches die jeweiligen Änderungen enthält (Beispielsweise das für Preisänderungen) auch noch getracked wird für welchen Zeitraum die Daten gegolten haben (2 Zellen, eine mit Start und eine mit Ende). Also der Tag an dem ich den Preis ändere ist automatisch der Tag bis zu dem der alte Preis gegolten hat und ab dem der neue Preis gilt. Ich bin relativer Anfänger un mir fällt keine funktionierende Lösung ein.

Beverly
24.07.2014, 18:38
Also mir fällt da auch keine Lösung ein, da ich weder deine Arbeitsmappe kenne, noch genau verstehe, was du machen willst.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

SuperSonic22
25.07.2014, 07:24
Ok, anbei mal ein Beispiel wie meine Arbeitsmappe aussehen könnte. In Tabelle 2 ist das Tracking für eines der Teile aus Tabelle 1. Eingaben sollen nur im ersten Blatt erfolgen. Ich hoffe dadurch ist es ein wenig besser nachvollziehbarer :) 76676

Beverly
25.07.2014, 20:52
Unter der Bedingung, dass deine beiden Tabellen tasächlich so wie in der hochgeladenen Mappe aufgebaut sind, kannst du es mit folgendem Code lösen:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZelle As Range
Dim lngZeile As Long
If Target.Column = 2 And Target.Row > 2 Then
If Target.Offset(0, -1) <> "" Then
With Worksheets("Tabelle2")
Set rngZelle = .UsedRange.Find(Target.Offset(0, -1), lookat:=xlWhole, LookIn:=xlValues)
If Not rngZelle Is Nothing Then
lngZeile = .Cells(rngZelle.Row, rngZelle.Column).End(xlDown).Row
.Cells(lngZeile, rngZelle.Offset(0, 1).Column) = Date
.Cells(lngZeile, rngZelle.Offset(0, 2).Column) = Target
.Cells(lngZeile + 1, rngZelle.Column) = Date + 1
Else
MsgBox Target.Offset(0, -1) & " nicht gefunden"
End If
Set rngZelle = Nothing
End With
End If
End If
End Sub


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>