Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1160to1164
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

Makro aus Excel durch "Wenn" aufrufen

Makro aus Excel durch "Wenn" aufrufen
MaMi
https://www.herber.de/bbs/user/70095.xls
Hallo,
um das Problem eines Zirkelbezugs zu vermeiden, habe ich ein kleines Makro ("Iteration") geschrieben, dass einen aus einer Formel generierten Wert (Zelle E2) durch "copy-paste special values only" in Zelle F2 kopiert und so einen Zirkelbezug in der Formel in Zelle G2 vermeidet.
Wenn ich Zelle F2 lösche und das Makro starte, läuft das Makro solange durch bis E2=F2 und klappt hervorragend.
Wenn ich dann aber in Zelle B2 anstelle der 10 z.B. eine 11 erfasse, soll die Iteration erneut durchgeführt werden. Diese erneute Iteration möchte ich aber nicht manuell anstoßen sondern automatisch.
Mein Gedanke war, durch eine Formel (Zelle I2) die Iteration immer automatisch durchzuführen, wenn E2F2 ungleich ist.
Wenn ich die Formel in I2 "aktiviere" (ein "=" am Anfang einfügen), läuft das Makro aber unendlich weiter, weil das "copy-paste special values only" von E2 nach F2 nicht funktioniert.
Kann mir jemand sagen warum?
Danke im voraus
MaMi

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Kontrollierte Iteration
16.06.2010 15:59:18
{Boris}
Hi,
...dafür bedarfs einer Steuerzelle, die die Iteration wieder auf Null setzt.
Aber gib mal Deine Beispieldatei (in einfachster Form) anhand.
Grüße Boris
AW: Kontrollierte Iteration
16.06.2010 16:11:29
MaMi
Hallo Boris,
danke für´s schnelle Feeback.
Link zur Datei war in meinem 1. Beitrag beigefügt.
Kannst Du die Datei öffnen?
MaMi
AW: Kontrollierte Iteration
16.06.2010 16:48:04
MaMi
Hallo Boris,
danke für´s schnelle Feeback.
Link zur Datei war in meinem 1. Beitrag beigefügt.
Kannst Du die Datei öffnen?
MaMi
so funzt eine UDF nicht
16.06.2010 21:12:34
Erich
Hi, (Mami hab ich früher nicht mal meine Mutter genannt...)
so kannst du ein benutzerdefinierte Funktion (UDF) nicht in Excel einsetzen.
Ein UDF ist dazu da, an den Aufrufer (eine Formel) einen Wert zurückzugeben. Wie SUMME(C1:E2).
Ein paar Fragen/Bemerkungen:
1.
Was ist eigentlich der Funktionswert deiner Fkt. IterationAufrufen(), also das Ergebnis von "=IterationAufrufen()"?
Da fehlt in der Fkt. IterationAufrufen() eine Zeile
IterationAufrufen = 0
oder was auch immer zurückgegeben werden soll.
2.
In einer VBA-Funktion, die als UDF in einer Tabelle aufgerufen wird, darf es keinen Select-Aufruf geben.
(Stell dir vor, du hast in C1:C200 eine Formel, in der eine UDF vorkommt, die Zellen selektiert.
Was passiert, wenn die Formeln neu berechnet werden? Wildes Selektieren, durcheinander?)
3.
Eine VBA-Funktion, die als UDF in einer Tabelle aufgerufen wird, kann keine Zellwerte ändern.
Und das ist gut so!
Stell dir vor, in A1 steht die Formel =WENN(A2=A3;3*myFkt(B1)+47;11-myFkt(B2))
Darin wird die Fkt. myFkt aufgerufen. Soll es möglich sein, dass dies Fkt. irgendwelche Zellwerte ändert,
dass plötzlich z. B. D3 einen anderen Wert bekommt?
In deinem Beispiel wird in I2 eine Formel berechnet, dabei eine UDF aufgerufen, die den Wert von F2 ändern soll. Kann dat?
Mag sein, dass der Wert der UDF sich auf den Wert der Zelle, in der die Formel steht, auswirkt,
aber das macht dann die Formel, keinesfalls aber die UDF im Code.
Schau mal z. B. hier:
http://de.wikibooks.org/wiki/VBA_in_Excel_-_Grundlagen:_Funktionen
Luc (auführlich: Luc:-?) hat auch hier im Forum schon dargestellt, wie man UDF und VBA-Routinen so entkoppeln kann,
dass man durch die Hintertür, indirekt, doch per Funktionsaufruf fremde Zellwerte ändern kann.
Das geht wohl u. a. mittels "On Time". Eine Fundstelle dafür habe ich jetzt leider nicht.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Fundstelle
16.06.2010 21:18:12
Erich
Hi,
hier ein Archivthread, in dem Nepumuk eine Möglichkeit vorstellt.
Vielleicht kannst du das einsetzen, um dein Ziel zu erreichen:
https://www.herber.de/forum/archiv/828to832/t831946.htm
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: so funzt eine UDF nicht
17.06.2010 11:30:40
Marcel
Hallo Erich,
vielen Dank für Deine beiden Nachrichten.
ad 1) Die Funktion "IterationAufrufen()" hat nur einen Zweck: das Makro "Iteration()" aufrufen. Und dieses Makro hat nur ein Ziel: den Zirkelbezug zwischen E2 und G2 zu umgehen, indem der Wert aus E2 solange in F2 kopiert wird bis E2=F2.
Wenn Du hier eine Alternative kennst, küsse ich Dir virtuell die Füße.
ad 2 und 3) Das ist neu für mich. Danke
Dein Archivthread von Nepomuk erscheint mir mit Kanonen auf Spatzen geschossen (vielleicht weil es meine VBA Kenntnisse bei weitem übersteigt).
Ich denke/hoffe, dass es für mein Problem eine einfachere Lösung gibt. Daher will ich die Frage noch mal umformulieren:
Mein Ziel ist es, dass IMMER E2 = F2. Ändert sich E2, weil die Input Parameter sich geändert haben, soll erneut automatisch eine Iteration durchgeführt werden.
Wie kann ich automatisch das Makro "Iteration" aufrufen, wenn ich in Zelle C2 z.B. eine "12" eintrage?
Marcel
Anzeige
Lösung mit API-Timer
17.06.2010 20:20:53
Erich
Hi Marcel,
auf meine 1. Frage hast du nicht wirklich geantwortet. Ich hatte ja nicht nach dem Zweck der Fkt,
sondern nach dem Funktionswert gefragt. Sinn und Zweck der Geschichte hatte ich schon verstanden.
Eine Fkt., also auch eine UDF, gibt immer einen Wert zurück. Das ist eben ihre Aufgabe...
Aber nun weg von Funktion und UDF. Hier ist eine Mappe, bei der eine Ereignisprozedur Worksheet_Change()
auf Eingaben im Bereich A2:C2 reagiert:
https://www.herber.de/bbs/user/70126.xls
Klappt es damit?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Lösung ohne API-Timer, einfacher
18.06.2010 19:29:43
Erich
Hi Marcel,
hier eine Lösung ohne unnötige Verrenkungen. Den Code findest du bei Tabelle1.
Worksheet_Change() reagiert wie gehabt auf Eingaben im Bereich A2:C2:
https://www.herber.de/bbs/user/70148.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Lösung ohne API-Timer, einfacher
21.06.2010 20:01:45
Marcel
Hallo Erich,
vielen Dank für den Tipp.
Ich habe am Ende "Worksheet_Calculate" genommen, da die sich ändernden Input Daten aus einer externen Quelle kommen und meines Wissens "Worksheet_Change" nur auf Eingaben aber nicht auf eine neue Berechnung unveränderten Formel reagiert.
Klappt hervorragend!
DANKE!
Marcel
Anzeige
AW: anbei ein beispiel aus dem forum... Gruß
17.06.2010 17:01:27
Marcel
Hallo Robert,
coole Idee.
Danke!
Marcel

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige