# Zellen mit Makro kopieren



## klaus131079 (5. März 2008)

Hallo!

Ich bin ziemlich neu in Sachen Programmieren von Excel Makros, aber ich stöbere schon mehrere Tage im Internet herum, um zu einer Lösung zu kommen.

Ich habe folgende Problemchen, die VBA - Profis wahrscheinlich aus dem Stehgreif beantworten können.

Ich möchte mit einem Macro den Wert der Zelle C40 aus Tabelle1 in die Zelle A1 in Tabelle2 kopieren, nur unter/mit folgenden Bedingungen:
a) nur beim Speichern des Excel Arbeitsblattes soll die Zelle C40 kopiert werden.
b) C40 beinhaltet eine Formel, und ist mit Blattschutz gesperrt. Beim Kopieren soll nur der Wert (Zahl) kopiert werden. Es soll NICHT die Formel kopiert werden, und auch nicht das Format.

Neben A1 in Tabelle2, soll automatisch das heutige Datum eingetragen werden (also in B1).

Wenn am darauf folgenden Tag, das Blatt wieder gespeichert wird, soll der Wert von C40 in die Zelle A2 kommen (also darunter), und das aktuelle Datum in B2 eingetragen. Am nächsten Tag in A3 und aktuelle Datum in B3 usw., daß am Ende eine schöne Liste entseht. 
Letzendlich möchte ich auf diese Weise den Wert u. Änderung der Zelle C40 protokollieren, um nachvollziehen zu können -> welchen Wert hat C40 an welchem Tag gehabt hat.

Jeglicher Input ist sehr sehr Willkommen. Ich freue mich auf jedes Feedback
danke im voraus
mfg
Klaus


----------



## Quaese (6. März 2008)

Hi,

um vor dem Speichern eine Routine aufzurufen, benutzt du das *BeforeSave*-Ereignis der Arbeitsmappe (*DieseArbeitsmappe* im VBA-Editor doppelklicken, im sich öffnenden Fenster im linken Dropdown *Workbook*, im rechten *BeforeSave* wählen).

Mit der *cells*-Methode lässt sich der Inhalt der gewünschten Zelle kopieren. Die zweite Spalte in Tabelle 2 ist als Datum formatiert. In einer while-Schleife werden die Zellen diese Spalte solange durchlaufen, bis das aktuelle Datum grösser-gleich ist oder kein Inhalt vorhanden ist.

Beispiel:

```
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim dateNow As Date
    Dim intI As Integer
    
    intI = 1
    dateNow = Date
    
    While (CDbl(Worksheets("Tabelle2").Cells(intI, 2)) < CDbl(dateNow)) And (CDbl(Worksheets("Tabelle2").Cells(intI, 2)) <> 0)
        intI = intI + 1
    Wend
    
    Worksheets("Tabelle2").Cells(intI, 1) = Worksheets("Tabelle1").Cells(40, 3)
    Worksheets("Tabelle2").Cells(intI, 2) = dateNow
End Sub
```
Die Routine benötigt ein Arbeitsblatt mit Name *Tabelle1*, das die Quellzelle enthält und ein Arbeitsblatt mit Name *Tabelle2*, das die Daten aufnimmt.

Vielleicht kannst du etwas damit anfangen

Ciao
Quaese


----------



## klaus131079 (6. März 2008)

Hi Quaese 
DANKE DANKE!
Ich verstehe zwar den Code nicht, aber das ist genau das was ich wollte und brauche... Den Code reinkopiert und hat sofort funktioniert. VIELEN VIELEN DANK.
Der Code fängt auch ab, wenn ich am gleichen Tag mehrere male speichere, daß die bestehende Zeile mit heutigem Datum überschrieben wird, und nicht drunter in eine neue geschrieben wird. Perfekt und Danke

mfg
Klaus


----------

