PDA

Vollständige Version anzeigen : Zelle dynamisch füllen


Lars M
29.02.2008, 08:17
Hallo,

wäre es möglich eine Zelle, die eine Formel enthält so zu gestalten, dass man sie mit einem Wert manuell überschreiben kann, die Formel aber bei Löschung dieses Wertes wieder hergestellt wird?

Gruß

Lars

EarlFred
29.02.2008, 08:50
Hallo Lars,
mir fällt da nur die Möglichkeit ein, ein separates Blatt in der Tabelle anzulegen (im Baispiel "Archiv"), in dem die Formeln abgelegt werden und bei bedarf wieder hergestellt werden können.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then Target.Formula = Sheets("Archiv").Range(Target.Address).Formula
If Target.HasFormula Then Sheets("Archiv").Range(Target.Address).Formula = Target.Formula
End Sub

Vor der Verwendung müssen natürlich erstmal alle Formeln ins Archiv übertragen werden. Das geht entweder von Hand oder mit diesem Makro:
Sub archivieren_erstes_Mal()
Set rng = Cells.SpecialCells(xlCellTypeFormulas)
For Each Formel In rng
Sheets("Archiv").Range(Formel.Address).Formula = Formel.Formula
Next
End Sub

Hoffe, es hilft Dir weiter.

Grüße
EarlFred

Lars M
29.02.2008, 10:54
Dann kann ich aber nur alle Formeln des Tabellenblattes wieder herstellen. Super wäre, wenn man das auf bestimmte Zellen einschränken könnte.

Wo muss ich denn:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then Target.Formula = Sheets("Archiv").Range(Target.Address).Formula
If Target.HasFormula Then Sheets("Archiv").Range(Target.Address).Formula = Target.Formula
End Sub

einfügen.

Der Code zum Archivieren ist kein Problem.

Danke!

Lars

EarlFred
29.02.2008, 11:12
Hi Lars,

folgende Ergänzung prüft, ob die Änderung in einem bestimmten Bereich liegt (im Beispiel A1:A100). Wenn nicht, wird der Block übersprungen.

Private Sub Worksheet_Change(ByVal Target As Range)
Set ber = Range("A1:A100")
If Not Intersect(Target, ber) Is Nothing Then
Application.EnableEvents = False
If....
If....
Application.EnableEvents = True
End If
End Sub

Ich habe nochmal Application.EnableEvents = False / True hinzugefügt, dann ruft sich das Änderungsereignis nicht selbst auf.

Grüße
EarlFred

Lars M
03.03.2008, 05:09
Hi,

wie wird der Code eingebunden?

Danke

Lars

EarlFred
03.03.2008, 07:26
Hallo Lars,

der Code mit "Private Sub Worksheet_Change(ByVal Target As Range)" gehört auf Ebene des betreffenden Arbeitsblattes.

Grüße
EarlFred