PDA

Vollständige Version anzeigen : Zirkelbezug nur 1x durchlaufen


grasinger
10.03.2009, 12:14
Hallo an Alle,

ich habe vor eine Zelle (z. B.: A1) ständig zu aktualisieren. Allerdings soll der Wert in der Zelle nicht ersetzt, sondern, wie bei einer Warenbestandsverwaltung, erhöht oder verringert werden.

Formel in Zelle A1: =summe(a1+a2) "a2" ist ebenfalls nur eine Beispielzelle
Folgende Einstellungen unter Extras/Optionen/Registerkarte: Berechnung habe ich vorgenommen:
Haken bei Iteration gesetzt
max. Anzahl auf 1 gesetzt.

In Zelle A2 wird jetzt eine Zahl eingegeben um den Warenbestand zu verändern. Beim Verlassen der Zelle A2 wird dieses auch durchgeführt.
ABER die Berechnung in Zelle A1 wird IMMER durchgeführt, egal was ich mache (woanders eine Zahl eigeben, speichern oder ...). Dabei möchte ich doch nur einmal diese Berechnung haben, wenn ich nämlich in A2 eine Zahl eingebe und dann erst wieder wenn ich dort wieder eine Zahl eingebe.

Mir ist schon klar, dass es sich um eine Iteration handelt. Die muss sich doch aber auf bestimmte Bereiche der Tabelle begrenzen lassen, so das der Rest der Zellen keinen Einfluss hat.
Habt Ihr eine Idee?
Darf gern auch etwas ganz Anderes sein, als diese einfache SUMMENFORMEL. Hab schon über Hilfstabellen, Verweise, Vergleiche, Istfehler, Wenn u.s.w. nachgedacht, eine weitere Spalte mit "Neuen Bestand" eingefügt. Wenn ich dann den "Alten Bestand" aktualisiere und zu dem "Neuen Bestand" addiere bin ich wieder in der sch**** Iteration.

Vielen Dank schon mal und mit hoffenden Grüßen
André

EarlFred
10.03.2009, 12:27
Hallo André,

nach welchen Kriterien soll denn Excel die Berechnung ausführen bzw. unterlassen? Es gibt schon (VBA-)Methoden, wie man bestimmte Bereiche von der Neuberechnung ausschließt, doch ich fürchte, das wäre mit Kanonen auf Spatzen geschossen...

Es gibt ganz einfache Makros, die den gleichen Dienst verrichten können, wie es Deine Formel soll:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = [A2].Address Then
[A1] = [A1] + [A2]
End If
End Sub

Der Code muss auf Ebene des betreffeneden Tabellenblattes im VB-Editor eingefügt werden (Rechtsklick auf Tabulator und dann "Code anzeigen...")

Wäre das eine Alternative?

Grüße
EarlFred

grasinger
11.03.2009, 07:21
Hallo EarlFred,
erstmal Danke für deine Antwort. Ich hatte gestern noch privates zu erledigen, deshalb erst jetzt meine Antwort.

Ein Kollege sagt: "Es ist eine Lösung!"

Leider kenne ich mich in der VB-Programmierung nicht aus, ich bin reiner Excel-Fetischist. Was aber nicht heißt, dass ich vor VB die Augen verschließe.

Lange Rede kurzer Sinn, nochmals vielen Dank für die Antwort, ich werde es ausprobieren.

Allerdings ist die Zelle in der die Änderungen eingegeben werden nicht wie in meinem Beispiel in der gleichen Tabelle, sie wird vermutlich (das ist noch im Aufbau) sogar in einer anderen Arbeitsmappe sein. Wohl aber immerhin in einem Ordner abgespeichert.

Falls du nochmals die Zeit hast und dieses in den VBA-Code einbauen könntest, würde ich mich sehr freuen.

Tabellarische Grüße
André

EarlFred
11.03.2009, 10:44
Hallo André,

das könnte dann so gehen, wobei ich hoffe, Deine Wünsche, welche Zahl wohin geschrieben werden soll, richtig erahnt habe:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = [A2].Address Then
Dim wbQuelle As Workbook
Application.ScreenUpdating = False

Set wbQuelle = Workbooks.Open("c:\Temp\t\Mappe1.xls")
With wbQuelle.Sheets(1).[A1]
.Value = .Value + ThisWorkbook.Sheets(1).[A2]
End With
wbQuelle.Close saveChanges:=True
Set wbQuelle = Nothing

Application.ScreenUpdating = True
End If
End Sub

Wenn Du ja einen Kollegen hast, der sich damit auskennt, ist es ja ein leichtes, nicht nur die Pfade anzupassen, sondern ggf. auch die Bezüge.

Grüße
EarlFred

grasinger
11.03.2009, 12:10
Hallo EarlFred,
ich habe gar keine andere Wahl als es meinem Kollegen zu zeigen, da ich überhaupt nicht beurteilen kann ob es geht oder nicht.
Aber es sieht gut aus, da mein Kollege schon zu deinem ersten Beitrag meinte: Der Ansatz ist super darauf wäre er nicht so schnell gekommen.
Herzlichen Dank erstmal, ich lasse den Threat noch geöffnet und poste hier unser Ergebnis. Damit du, falls es dich interessiert, siehst was aus deiner Mühe geworden ist. Vielleicht gibt es ja auch noch weitere Fragen.
Gruß
André

grasinger
13.03.2009, 10:39
Hallo EarlFred,
ja Dank einer Antworten haben wir es hinbekommen.
Vielen Dank nochmal und Grüße
André