Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
592to596
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
592to596
592to596
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

eigene Funktionen automatisch neu berechnen

eigene Funktionen automatisch neu berechnen
07.04.2005 16:50:09
background
Hi
Kann man Excel dazu bringen, auch selbstgeschriebene VBA-Funktionen automatisch neu zu berechen? Bisher muss ich immer Strg-Alt-F9 drücken...
Danke.

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

Betreff
Datum
Anwender
Anzeige
an die Stimme aus dem Background
07.04.2005 20:40:06
Luc
Hi Hintergründler,
wenn du richtig programmiert hast, xl auf Automatik gestellt und nicht automatisch wieder verstellt wird, läuft das immer auch ohne F9. Im Gegenteil, es können Situationen eintreten, wo das gar nicht mehr wünschenswert ist - in Abhängigkeit von Anzahl, Umfang und Vernetzung deiner UDF und natürlich ihres Grades an Optimalität. Ich muss die Automatik in mancher Tabelle regelmäßig ausschalten, sonst könnte ich nichts mehr in akzeptabler Zeit eingeben! Vielleicht tragen deine "Funktionen" ja deutsche Formeln in zelle.Formula ein (hier schon des Öfteren behandelt). Das würde das Phänomen erklären.
Gruß Luc :-?
Anzeige
AW: an die Stimme aus dem Background
08.04.2005 14:08:36
Thomas
Hallo Luc
Hmm, nach weiteren Experimenten stellt sich mein Problem nun anders dar.
Anscheinend berechnet XL die Funktion(sergebnisse) tatsächlich neu, wenn sich an den Ausgangsdaten im Tabellenblatt was ändert.
Aber es bleibt ein anderes Problem: Ich verwende die Funktion (die ich in eine XLA gepackt habe) in mehreren Blättern einer Datei. Wenn nun neu berechnet wird (wodurch auch immer), ändern sich die Ergebnisse in allen Blättern, d.h. die Ergebnisse in allen sind nur passend zum aktiven Blatt. Die Blätter sind alle identisch aufgebaut, nur die Ausgangsdaten sind unterschiedlich.
Hier mal die Funktion:

Function Rangfolge(Kriterium As Range, Daten As Range, Optional Aufsteigend As Boolean = False)
Dim Feld() As Variant, k As Integer, w As Variant, r As String, op As String
'Bereiche müssen gleiche Größe haben
If Kriterium.Count <> Daten.Count Then
Rangfolge = "#WERT"
Exit Function
End If
ReDim Feld(1 To Kriterium.Count, 0 To 1)
k = 1
For Each w In Kriterium
Feld(k, 0) = w
k = k + 1
Next
k = 1
For Each w In Daten
Feld(k, 1) = w
k = k + 1
Next
QuickSort Feld, 1, Kriterium.Count, 0, Aufsteigend
If Aufsteigend Then op = "<" Else op = ">"
For k = 1 To Kriterium.Count
If k > 1 Then r = r & op
r = r & Feld(k, 1)
Next
Rangfolge = r
End Function

Danke für jeden Tip
Thomas (der Hintergündige)
Anzeige
AW: zuerst mal dieses Problem!
08.04.2005 21:18:35
Luc
Hallo Thomas,
obwohl sich mir die Ermittlung von r als Basis des Rangfolge-Rückgabewertes nicht recht erschließen will, denke ich, dass du eher ein Referenzproblem hast, der Hund also in der Übergabe der Argumente an die Funktion begraben liegt. Standardmäßig stellt xl zu Argumenten ByRef ein, wahrscheinlich ist hier aber ByVal sinnvoller. Das müsstest du aber explizit im Funktionskopf angeben. Ich mache das fast immer so und hatte noch nie ein derartiges Problem!
Vielleicht klappt dann auch das Andere!
Mal sehen! Bis dann
Luc :-?
AW: zuerst mal dieses Problem!
11.04.2005 14:00:47
Thomas
Hallo Luc
ByVal hab ich schon mal ausprobiert, hat aber nichts geändert.
Möglicherweise liegt es ja nicht an der Funktion selbst, sondern an der Art des Aufrufs, es funktioniert nämlich mit einfacheren Funktionen auch nicht. Ich rufe sie im Blatt in folgender Form auf:
=Rangfolge((A4;A10;A16;A28);(B1;B7;B13;B25))
Wenn ich dies neu einfüge oder mit Return in der Bearbeitungszeile bestätige, aktualisiert Excel korrekt nur das aktive Blatt. Wenn ich aber Strg-Alt-F9 benutze oder das Sheet neu öffne, werden alle Blätter geändert und es stehen in allen Blättern die selben Ergebnisse des einen Blattes.
Thomas
P.S.: Falls dich die Funktion interessiert: Sie gibt die Texte aus "Daten" in der Sortierung aus, die durch "Kriterium" bestimmt wird. Beispiel: die Tabelle enthält folgende Daten:
| A | B
----------
1| 3 | ein
2| 1 | Dies
3| 4 | Test
4| 2 | ist
Dann liefert Rangfolge(A1:A4,B1:B4) den String "DiesisteinTest"
Anzeige
AW: Aha! Das ist natürlich was anderes,...
11.04.2005 15:50:10
Luc
Thomas,
aber diese Art der Bereichsangabe kann auch zu Problemen führen. Viele Xl-Standardfunktionen kommen damit zurecht, deine offensichtlich nicht. Vielleicht würde sie funktionieren, wenn die Zellen in Form einer Union vorliegen würden. Das müsstest du in deiner Funktion mal zu berücksichtigen versuchen.
Gruß Luc :-?
AW: Aha! Das ist natürlich was anderes,...
11.04.2005 15:50:10
Luc
Thomas,
aber diese Art der Bereichsangabe kann auch zu Problemen führen. Viele Xl-Standardfunktionen kommen damit zurecht, deine offensichtlich nicht. Vielleicht würde sie funktionieren, wenn die Zellen in Form einer Union vorliegen würden. Das müsstest du in deiner Funktion mal zu berücksichtigen versuchen.
Gruß Luc :-?
Anzeige
mal Kriterium.Count anzeigen lassen! - owT
11.04.2005 15:55:21
Luc
AW: mal Kriterium.Count anzeigen lassen! - owT
11.04.2005 17:06:34
Thomas
Hi Luc
solches Debugging hab ich alles schon hinter mir, Count und die Daten stimmen, wenn ich die Funktion schrittweise ausführe. Ich bin inzwischen sicher, dass es nicht am Inneren der Funktion liegt, denn selbst folgende Funktion

Function TrivialSumme(ByVal Werte As Range)
Dim s As Double, w As Variant
For Each w In Werte
s = s + w
Next
TrivialSumme = s
End Function

liefert bei Aufruf mit
=TrivialSumme((A2;A8;A14;A26))
das korrekte Ergebnis bei einzelnem Aufruf, nicht aber, wenn ich Strg-Alt-F9 benutze.
Tatsächlich bekomme ich mit Aufrufen ala =TrivialSumme(A1:A3) immer richtige Ergebnisse.
Es sieht also so aus, als ob Excel bei Strg-Alt-F9 den Ausdruck (A2;A8;A14;A26) nur einmal für das aktuelle Blatt auswertet und dann bei jedem Aufruf auch aus anderen Blättern einsetzt. Wenn ich mit Msgbox die übergebenen Daten ausgeben lasse, werden bei drei Aufrufen aus drei Blättern dreimal dieselben Daten aus dem aktiven Blatt ausgegeben.
Wie geht das mit Union?
Thomas
Anzeige
AW: Union() in Editorhilfe, aber du könntest...
11.04.2005 19:55:43
Luc
...schon recht haben, Thomas.
1. Es könnte sein, dass Xl alle Blätter auswählt, ohne dass das an den Fußreitern zu sehen ist - habe auch so einen Effekt, allerdings bei sehr vielen udFkt + Ereignisprozeduren auf einem Einzelblatt - auf zusätzlichen Blättern passiert stets das Gleiche, warum...? oder wahrscheinlicher...
2. es tritt ein Effekt ein, der von vergebenen Namen für Bereiche bekannt ist. Wenn kein Tabellenname mit angegeben wird, hat der Name auf allen Blättern den gleichen Bereich auf dem zuerst ausgewählten Blatt zum Inhalt.
Wenn du vielleicht mal die Blattreihenfolge ändern würdest, könntest du feststellen, ob immer das 1.Blatt als Bezug dient. Dann wäre es sicher hilfreich, die Zelladressen mit dem Namen der jeweiligen Tabelle zu ergänzen. Evtl. kommt dann deine Fkt damit nicht klar, aber erst mal sehen. Notationsform: 'Tab 1'!A1:Z9 wenn im Tabnamen störende Zeichen enthalten sind - sonst können die Apostrophs auch fehlen.
Schönen Abend Luc :-?
Anzeige
AW: Union() in Editorhilfe, aber du könntest...
12.04.2005 17:33:05
Thomas
Hallo Luc
Union() auf VBA-Seite ist mir klar, aber was hilft mir das im Tabellenblatt?
Weitere Experimente:
- Umstellen der Tabellen bringt keine Änderung,
- genausowenig das Voranstellen des Tabellennamens,
- oder das Benennen der Bereiche, z.B. =Rangfolge(Zahlen,Namen).
- Quelle der Werte bei Strg-Alt-F9 ist nicht die erste Tabelle, sondern die bei Drücken aktive Tabelle. Die kann sogar in einer anderen Datei sein und rein gar nichts mit der Funktion zu tun haben.
- steht die Zelle mit dem Funktionsaufruf in einem anderen Blatt als die Werte, geht alles
Ich würde ja statt der gruppierten Parameter ParamArrays verwenden, leider geht aber nur eines pro Function.
Außerdem könnte ich auf Strg-Alt-F9 verzichten, leider macht aber die Aktualisierung beim Öffnen der Datei genau dasselbe.
Weiter könnte ich mir als Workaround vorstellen, die Verweise als Strings zu übergeben und innerhalb der Funktion aufzulösen.
Ich hätte aber gerne verstanden, warum es nicht geht.
Gruß
Thomas
Anzeige
AW: an die Stimme aus dem Background
08.04.2005 14:40:56
Thomas
Noch ein Nachtrag:
Die Funktion wird tatsächlich nur neu berechnet, wenn ich eine der Quell-Zellen direkt ändere, nicht, wenn sie mit einer anderen Tabelle verknüpft ist und die Verknüpfung aktualisiert wird.

122 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige