Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Formeln zwischenspeichern

Formeln zwischenspeichern
Jörg-HH
Hallo Zusammen
wenn in Tabelle1 was geändert wird, sollen die dort befindlichen Formeln in Tabelle2 zwischengespeichert werden, damit man die Tabelle1 später wiederherstellen kann.
https://www.herber.de/bbs/user/65478.xls
Der auskommentierte Teil des Codes ergibt immer nur die Zahl aus A1 überall, der andere Teil bringt einen Fehler.
Kann mir jemand erklären, warum das so ist und wie es richtig heißen muß?
Danke und Gute Nacht - Jörg

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Formeln zwischenspeichern
31.10.2009 01:31:46
Adelhorst
Hallo Jörg.
Zitat:
For Each c In Tabelle2.Range("a1:c20")
c.Formula = Tabelle1.Range("a1:c20").Formula
Next
Antwort:
In der Zeile mit "=" steht auf der linken Seite eine einzelne Zelle und auf der rechten eine Zellen-Matrix aus mehreren Zellen. Demnach wird der linken Seite die erste Zelle der rechten Matrix übergeben, und dies ist nun mal immer die Zelle "A1".
Richtig könnte es hier lauten:
c.Formula = Tabelle1.Cells(c.Row,c.Column).Formula
Zitat:
With Tabelle2.Range("a1:c20")
For zeile = 1 To 20
For spalte = 1 To 3
c.Formula = Tabelle1.Range(zeile, spalte).Formula
Next
Next
End With
Antwort:
For zeile = 1 To 20
For spalte = 1 To 3
Tabelle2.Cells(zeile,spalte).Formula = Tabelle1.Cells(zeile, spalte).Formula
Next spalte
Next zeile
ODER:
With Tabelle2
For zeile = 1 To 20
For spalte = 1 To 3
.Cells(zeile,spalte).Formula = Tabelle1.Cells(zeile, spalte).Formula
Next spalte
Next zeile
End With
Gruß Adelhorst
Anzeige
ach so...
31.10.2009 09:49:59
Jörg-HH
Moin Adelhorst,
danke für die klare Darstellung! Wieder was gelernt...
Schönes WE!
Jörg
oh - doch noch ein Mißverständnis...
31.10.2009 10:05:52
Jörg-HH
...betrifft aber nicht die Erklärung an sich, sondern meine Problemstellung:
Es handelt sich im Original um eine Tabelle, in der normalerweise nichts geschrieben wird, sondern nur abgelesen. Um Verschiedenes austesten zu können, soll aber die Möglichkeit bestehen, einige Zahlen zu verändern.
Um danach den Urzustand wieder herstellen zu können, sollen bei einer Änderung die vorhandenen Formeln in der anderen Tabelle zwischengespeichert werden...
aber genauer: eigentlich nicht "bei", sondern "vor"
Wenn ich in der jetzigen Version im benutzten Bereich was überschreibe, wird dies mit in Tabelle2 übernommen. Sinn ist aber, daß die Formel, die vor dem Löschen dort stand, gebunkert wird!
Ich hatte gedacht, Excel sein "schneller" als der User :-) oder so ähnlich und hatte das deswegen im Worksheet_Change angesiedelt. Aber offenbar ist dies das falsche Ereignis, um sowas zu machen? Ins Worksheet_Activate wiederum wollte ich das auch nicht schreiben, weil dann jedes Mal, wenn man sich die Werte angucken will, der Rechenvorgang ausgelöst wird - das wäre ja unnötig.
Wo muß das denn hin, damit die Reihenfolge so läuft wie beabsichtigt?
Grüße - Jörg
Anzeige
AW: oh - doch noch ein Mißverständnis...
31.10.2009 12:37:51
Gerd
Hallo Jörg,
verwende doch einfach "zum Ausprobieren" ein zweite kopierte Tabelle.
Gruß Gerd
AW: oh - doch noch ein Mißverständnis...
31.10.2009 13:46:03
Adelhorst
Hallo Jörg.
Warum lässt du nicht deine Haupttabelle "Tabelle1" so wie sie ist, und machst deine Tests auf einem anderen Tabellenblatt.
Dazu baue dies in das Modul von "Tabelle3" ein:
Private Sub Worksheet_Activate()
Tabelle3.Range("A1:C20").Formula = Tabelle1.Range("A1:C20").Formula
End Sub
Damit wird jedesmal beim Anwählen des Tabellenblattes "Tabelle3" eine Kopie von Tabelle1 nach Tabelle3 gemacht. Du kannst diese Art von Kopie ja auch über einen CommandButton auf "Tabelle3" auslösen lassen, falls dir das "Worksheet_Activate"-Ereignis nicht zusagt.
Gruß Adelhorst
Anzeige
ist etwas komplizierter...
31.10.2009 23:27:21
Jörg-HH
Hallo Gerd, hallo Adelhorst
im richtigen Leben ist die Sache noch etwas größer: Meine Tabelle1 ist bereits eine Kopie. Die Musik spielt in einer anderen - sagen wir Tabelle10. Tabelle1 gibt es seit langem, diverse Berechnungen ziehen sich von dort Daten, sie wurde ursprünglich von Hand gefüllt und diente zu Probierzwecken als was-wäre-wenn für die nachgelagerten Berechnungen.
Dann fiel meinem Chef nach zweieinhalb Jahren ein "ach, wir bräuchten noch dies und das". Daraufhin entstand Tabelle10 - darin wird allerdings nicht herumprobiert. Nach einem weiteren halben Jahr fiel ihm ein "ach, eigentlich können wir ja die Daten, die in Tabelle10 entstehen, komplett in Tabelle1 verwenden. - Aber darin herumspielen muß man trotzdem können" - womit rein formal Tabelle10 die Rolle von Tabelle1 übernahm.
Weil das nun historisch so gewachsen war, habe ich Tabelle1 einfach so umgeschrieben, daß sie sich die Daten aus Tabelle10 holt. Das war einfacher, als alle nachgelagerten Berechnungen und VBA direkt auf Tabelle10 umzupolen. - Und deswegen kann ich auch nicht das Probieren in einer anderen Tabelle3 machen: Weil keine der hundert oder tausende Folgeformeln und diversen VBA-Prozeduren darauf zugreift und ich nicht alles umschreiben will... ist mir zu viel Arbeit und zu fehlerträchtig. Funktionierende Dinge sollte man in Ruhe lassen :-)
Im Nachhinein merkte ich dann, daß das doch gar nicht so redundant war, wie es aussieht, denn Tabelle10 darf wirklich nicht angetastet werden, die Kopie Tabelle1 aber durchaus. Wenn man nun darin probiert (=Formeln überschrieben) hat, möchte man evtl. gern (oder auch nicht) den Ursprungszustand wieder herstellen. Das soll per Reset-Button geschehen, und dafür muß man die Ursprungsformeln vorher gebunkert haben. So kam ich auf Tabelle2 unseres Beispiels.
Die Idee mit dem cmd finde ich gut. Ich werde das Change mit einer MsgBox belegen, die dem Chef auf die Finger klopft, wenn er was ändern will, ohne den Kopieren-cmd geklickt zu haben ;-))
Danke für eure Ideen und Gute Nacht
Jörg
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige