Anzeige
Archiv - Navigation
540to544
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
540to544
540to544
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Kalkulierte Zelle herausfinden

Kalkulierte Zelle herausfinden
06.01.2005 11:40:37
Paul
Hallo,
ich habe ein Tabellenblatt mit ca. 500 Zeilen, jede davon enthält u.a. zwei Spalten, in denen Formeln stehen, also nur Ausgabezellen.
Nun will ich bei Änderung einer dieser Ausgabezellen ein ganz bestimmtest Makro auslösen, welches als Argument genau diese Zelle erwartet. Mit der Funktion Worksheet_Change scheint es gut zu klappen, da sie mir das Target mitliefert. Da ich aber wie gesagt keine Eingabezellen habe, sondern diese durch Formeln manipuliert werden, muss ich irgendwie anders ran. Meine Denke ist so:

Sub Worksheet_Calculate()
Dim calculatedRow As Integer
calculatedRow = ? ---> hier weiß ich nicht, worauf ich referenzieren kann, bzw. was mir Excel anbietet <---
Call myMacro(calculatedRow)
End Sub

Ist doch eigentlich ne einfach anmutende "Standardaufgabe" oder? Ich komm einfach nicht drauf, sonst krieg ich alles mit VBA hin...hier nich :-(
Danke im Voraus und Gruß, Paul

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kalkulierte Zelle herausfinden
06.01.2005 11:50:50
Matthias
Hallo Paul,
ich glaube, es bleibt dir nur die Möglichkeit, über Worksheet_Change diejenigen Zellen zu überwachen, die die Neuberechnung der Zeile auslösen...
Gruß Matthias
AW: Kalkulierte Zelle herausfinden
06.01.2005 12:04:16
Paul
Hi Matthias,
hmm, OK würde gehen, jedoch stehe ich zusätzlich vor der Aufgabe, dass einige Formeln auch Daten aus einer externen Anwendung holen, sprich hier erfolgt GAR KEINE Dateneingabe über den Benutzer in Excel...klingt blöd was?
Ansonsten hatte ich noch die unkomfortable Idee, mit der Calculate-Funktion in einer Schleife alle Zellen durchzugehen und für jede meine Berechnung durchzuführen (dann müsste ich natürlich noch einiges abfangen). Klingt aber hirnrissig, wenn es doch für Change so einfach geht, oder?
Andere Ideen?
Trotzdem Danke schon mal und Gruß, Paul
Anzeige
AW: Kalkulierte Zelle herausfinden
06.01.2005 12:32:18
Matthias
Hallo Paul,
hmmm, es kommt darauf an, was dein Makro macht...
Wenn es Änderungen von Zellinhalten verändert, geht es nicht.
Ansonsten könntest du eine Benutzerdefinierte Funktion schreiben, in etwa:
Function MeineFunktion(b As Range)
MsgBox "so, die Zelle " & b.Address(0, 0) & " wurde also neu berechnet!"
End Function
Die schreibst du dann in eine Hilfsspalte: =MeineFunktion(C2), wenn in Spalte C die zu überwachenden Formeln stehen.
Dann wird deine Funktion immer dann aufgefufen, wenn deine Zelle neu berechnet wird.
Das klappt auch mit externen Bezügen.
Gruß Matthias
Anzeige
AW: Kalkulierte Zelle herausfinden
06.01.2005 13:54:48
Paul
Hi Matthias,
also, die Idee klingt ja schon mal nicht so schlecht, kenne mich nur nicht so recht mit den "Do`s und Dont's" in benutzerdefinierten Funktionen aus. Dein Code funktioniert problemlos bei mir, wenn ich jedoch versuche, mein gewünschtes Makro daraus aufzurufen, passiert nichts - also auch kein Fehler oder so.

Function MeineFunktion(b As Range)
MsgBox "so, die Zelle " & b.Address(0, 0) & " wurde also neu berechnet!"
Call Sheets("Monitor").RowCalculate(b.Row)
End Function

Ich habe auch versucht, mein Makro mit ins Modul zu packen:

Function MeineFunktion(b As Range)
MsgBox "so, die Zelle " & b.Address(0, 0) & " wurde also neu berechnet!"
Call RowCalculate(b.Row)
End Function

...aber funzt irgendwie beides nicht.
Weißt Du warum?
Gruß, Paul
Anzeige
AW: Kalkulierte Zelle herausfinden
06.01.2005 14:01:03
Matthias
Hallo Paul,
was macht denn RowCalculate()?
Gruß Matthias
AW: Kalkulierte Zelle herausfinden
06.01.2005 14:26:23
Paul
RowCalculate ist ne nicht allzu komplexe, aber auch nicht kleine Funktion, im Groben beschrieben, passiert da folgendes:
- nimmt als Argument die Zeilenzahl
- setzt einige Variablen (liest Werte aus anliegenden Zellen der entsprechenden Zeile)
- prüft Zellen auf Leerzellen etc.
- ruft ein kleines Makro auf, um zwei Zellen der Zeile zu formatieren
- ruft ein weiteres Makro auf, um auf einem zweiten Worksheet eine Zeile einzufügen
- zeigt ein UserForm zur Information an
- ruft zu guter letzt noch ein Makro auf, welches ein paar Berechnungen auf Basis der Zellenwerte vornimmt und diese dann in die entsprechenden Zellen einträgt
Siehst Du da irgendwelche Probleme?
Gruß, Paul
Anzeige
AW: Kalkulierte Zelle herausfinden
06.01.2005 14:33:19
Matthias
Hallo Paul,
die sehe ich allerdings.
Wenn eine Funktion vom Tabellenblatt aus aufgerufen wird, dann kann es keine Werte in der Tabelle ändern, außer den der Zelle, die die Funktion aufruft (über den Rückgabewert).
Insofern ist mein Vorschlag nicht brauchbar...
Was du machen könntest:
Alle Werte statt über das Makro über selbstgeschriebene Formeln zu ändern.
Das wäre sowieso die "sauberere" Lösung.
Etwas anderes fällt mir leider nicht ein, Sorry!
Viel Erfolg,
Matthias
AW: Kalkulierte Zelle herausfinden
06.01.2005 14:52:50
Paul
Hi Matthias,
:-(
naja, dann habe ich jetzt wenigstens Gewissheit. Also müsste ich für jede Zelle in der Zeile, in der etwas passieren soll (Hintergrundfarbe ändern, Wert neu berechnen etc.) Funktionen schreiben, richtig? Zugriff auf alles - auch was im Modul etc. steht - habe ich ja trotzdem. Ich kann nur nicht irgendetwas außerhalb der aufrufenden Zelle verändern.
Sehe ich jetzt auf den ersten Blick nicht als unlösbar an, bis auf die Sache mit dem Einfügen der Zeile im zweiten Worksheet. Hast Du nen Ansatz, wie ich das machen könnte? Ich will die Wertveränderungen, die ich ausgelesen habe, einfach als Art "Historie" ins zweite Worksheet übertragen.
Danke und Viele Grüße, Paul
Anzeige
AW: neuer Ansatz...
06.01.2005 16:09:41
Matthias
Hallo Paul,
mit den Zellformatierungen geht das auch nur mittels bedingter Formatierung...
geschweige denn das mit der Historie...
hier nochmal ein neuer Ansatz, vielleicht ähnlich zu dem, den du ober schon angedacht hast...
kann aber sein, dass das bei 500 Zeilen etwas schleppend läuft:
und zwar ist in meinem Beispiel die Spalte 2 die zu überwachende, Spalte 1 ist eine Hilfsspalte, die die Ergebnisse der vorherigen Berechnung speichert.
Wenn die Zellen ungleich sind, weiß ich, dass die Zelle sich geändert hat.
Hier der Code:
Private Sub Worksheet_Calculate()
Dim i As Integer, lz As Integer
lz = Range("B65536").End(xlUp).Row
For i = 2 To lz
If Cells(i, 2) <> Cells(i, 1) Then
MsgBox "Zeile " & i & " wurde geändert!"
'hier dein Makroaufruf
Cells(i, 1) = Cells(i, 2) 'Wert gleichsetzen
End If
Next i
End Sub
Viel Erfolg,
Matthias
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige