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

eigene Funktion

eigene Funktion
09.01.2003 16:10:20
Chris
Hallo
Ich hoffe jemand weiss antwort
Folgendes will ich machen : mit einer funktion auf einem eigenen sheet den Wert einer Zelle von anderem sheet anzeigen
Mein Problem: die eigene Funktion macht irgendwie kein automatisches update, d.h. wenn ich den inhalt auf tab1 ändere, wird das auf der tab2 nicht übernommen!
Was ist der auslöser für diese "aktualisierung"?
die funktion sieht so aus und wird ohne parameter einer zelle auf beliebigem sheet zugewiesen:

Public Function PersName()
Dim i, s As Integer
i = ActiveCell.Row - 2
s = Worksheets("Auswerter").Cells(i, 16) - 1
PersName = Worksheets("Auswerter").Cells(4, s)
End Function

Danke im Vorraus
P.S. sollte das am (fehlenden) parameter liegen, bitte ersatzlösung.

Danke im Vorraus


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: eigene Funktion
09.01.2003 16:16:01
Hajo_Zi
Hallo Chris

ich muß schreiben solche Funktion habe ich noch nicht gesehen ohne Atratparameter, aber wenn Sie geht.


Option Explicit

Public Function PersName()
Dim i As Long, s As Integer
Application.Volatile
i = ActiveCell.Row - 2
s = Worksheets("Auswerter").Cells(i, 16) - 1
PersName = Worksheets("Auswerter").Cells(4, s)
End Function

Code eingefügt mit: Excel Code Jeanie

Code Jeanie
Frage
Das Umsetzen nach Html klappt perfekt, auch die Ansicht in den Foren ist gegeben. Bei manchen Foren kann man aber anscheinend nicht den dargestellten Code nach VBA rückkopieren. Warum?
Antwort
Dies liegt nicht an der Code Jeanie !!! Manche Foren interpretieren anscheinend < pre > < /pre > Tags nicht richtig und erzeugen am Zeilenende einen weichen Zeilenumbruch anstatt eines harten Zeilenumbruches. Dies führt dazu, dass im VBA-Editor die Zeilen hintereinander geschrieben werden. Zum Rückkopieren in solchen Fällen: Fügen Sie den kopierten Code aus dem Forum nach Word ein, kopieren Sie ihn dort wieder und fügen Sie ihn dann im VBA - Editor ein

Gruß Hajo

Anzeige
Re: eigene Funktion
09.01.2003 16:16:14
L.Vira
Application.Volatile an Anfang
wie junge götter
09.01.2003 16:20:24
Chris
meine Damen und Herren :
sie programmieren wie junge Götter!!

dankeschön

Re: eigene Funktion
10.01.2003 06:34:04
Hans W. Herber
Hallo Chris, Hajo,

dieser Thread gibt mir Gelegenheit zu ein paar grundsätzlichen Anmerkungen zu VBA-Funktionen.

Hans Werner Hoffmann schrieb mal hier im Forum, dass Funktionen, die den Application.Volatile-Aufruf zur Neuberechnung benötigen, grundsätzlich zu misstrauen ist. Dem schließe ich mich an.

Funktionen, denen keine Parameter mitgegeben werden, bringen in der Regel Probleme. Die vorliegende Aufgabe - möchte man sie über eine benutzerdefinierte Funktion lösen - kommt an einem Application.Volatile nicht herum.

Application.Volatile löst eine Neuberechnung aus, wenn in irgendeinem Blatt irgendeiner Arbeitsmappe irgendein Wert eingegeben wird. Hat man jetzt eine ganze Reihe von diesen Formeln - im aktuellen Fall ist das zu vermuten - wird die benutzerdefinierte Funktion für jede Formel einmal durchlaufen. Irgendwann wirkt sich das zumindest störend aus.

Nebenbei: Auf keinen Fall benutzerdefinierte Funktionen mit Application.Volatile in die Personl.xls einfügen, sie werden bei jeder Zellberechnung aufgerufen.

Application.Volatile führt aber auch noch zu anderen Problemen, die auf einen Bug in Excel 97 und früher zurückzuführen sind. Dort erscheint beim Öffnen der Arbeitsmappe mit einer solchen benutzerdefinierten Funktion eine Fehlermeldung oder das Gleiche bei einem Blattwechsel.

Dann noch eine Application.Volatile-Falle, in die Hajo bei seiner Umsetzung getappt ist:
Ohne Application.Volatile erfolgt die Neuberechnung einer paramterlosen benutzerdefinierten Funktion beim Editieren der Zelle mit der Formel. Hier sind also Application.Caller (aufrufende Zelle) und ActiveCell identisch. Mit Application.Volatile wird die Funktion aber bei jeder Zelleingabe in irgendeinem Arbeitsblatt irgendeiner Arbeitsmappe aufgerufen und hier ist die Identität nicht mehr gegeben. Im aktuellen Fall wird also bei Zelleingaben ein falscher Zeilenwert übergeben.

Ach ja: Die beste Möglichkeit, Application.Volatiles zu umgehen ist der Rückgriff auf die altmodischen Excel-Funktionen, hier also:
=INDIREKT("auswerter!"&ADRESSE(4;INDIREKT("auswerter!"&ADRESSE(ZEILE()-2;16))-1))

Entschuldigt meine Langatmigkeit ;-)

hans

Anzeige
Re: eigene Funktion
10.01.2003 09:10:47
Hans W. Hofmann
Als anerkannter und staatlich geprüfter .Volatile-Gegner sage mal Danke an hans für den ausführlichen Vortrag.
Zwei Dinge hätte ich noch zu ergänzen.
Diese parameterlosen Funktionen, flüchtigen Funktionen, finden sich auch in der Standardausstattung von XL, z.B. Zufallszahl(), heute() uä. für sie gilt die Ausführung von hans latürnich auch.
Jede, aber auch wirklich jede Eingabe löst eine Neuberechnung des GESAMTEN Formelapparates einer laufenden XL-Instanz aus!

Was vielleicht nochmal zu unterstreichen ist:
Kontraproduktiv ist im vorliegenden Fall die Abhängigkeit der Funktion von ActiveCell, d.h. die Funktion ist eine verkappte Zufallsfunktion, da sie bei jeder Neuberechnung andere Ergebnisse (je nach ActiveCell eben) liefert. Das kann doch nicht der Sinn der Sache sein, oder?


Gruß HW


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige