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

Fehlverhalten mit selbst gemachter VBA-Funktion

Fehlverhalten mit selbst gemachter VBA-Funktion
19.01.2007 09:19:32
Jürgen
Hallo Leute,
ich habe ein merkwürdiges Fehlverhalten bei der Verwendung einer selbst geschriebenen VBA-Funktion in 2 miteinander verbundenen Excel-Mappen:
im VBA-Editor sehe ich meine 3 Projekte:
1. ein .xla-Projekt mit meinen selbst geschriebenen VBA-Funktionen
2. .xls-Mappe1
3. .xls-Mappe2
die Mappen 1 und 2 sind gleichzeitig geöffnet.
verwende ich meine Funktion RND in Mappe1 funktioniert sie richtig.
verwende ich diese Funktion in Mappe2, deren Zellen mit Mappe1 verknüft sind (aber nicht umgekeht!) bekomme ich den Fehler: #WERT angezeigt.
öffne ich die Fehlerüberprüfung bekomme ich den Fehlertext:
"ein in der Formel verwendeter Wert ist vom falschen Datentyp." angzeigt;
diese Fehleranalyse ist falsch!
jetzt kommt das merkwürdige Fehlverhalten:
1.) ich kopiere die Zelle aus Mappe2 in irgendeine Zelle in Mappe1:
jetzt wird in Mappe1 das richtige Ergebnis angezeigt
und auch in Mappe2 wird jetzt das richtige Ergebnis angezeigt !!!
ich speichere beide Mappen ab, schliesse sie und öffne sie erneut.
2.) jetzt wird in beiden Mappen wieder der Fehler #WERT in beiden Zellen des gleichen Inhaltes angezeigt;
klicke ich auf die Zelle in Mappe1 werden danach die Zellinhalte in beiden Mappen wieder richtig angezeigt!
woran kann das liegen ?
Gruss an alle die dies lesen
Dank an alle die mir antworten
Jürgen

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

Betreff
Datum
Anwender
Anzeige
Ist bei bd Mappen Iteration eingestellt? Gruß owT
19.01.2007 17:20:54
Luc:-?
:-?
AW: Ist bei bd Mappen Iteration eingestellt? Gruß owT
19.01.2007 17:42:44
Jürgen
Hallo Luc:-?
weiss nicht.
wie kann ich das feststellen?
Gruss
Jürgen
AW: Ist bei bd Mappen Iteration eingestellt? Gruß owT
19.01.2007 17:54:42
Jürgen
Hallo Luc:-?
habe mittlerweile gefunden wo die Iterationen eingestellt werden.
wie waren ausgeschaltet.
ich habe sie eingeschaltet,
ändert aber nichts am Verhalten von Excel.
ich habe dabei aber nebenher bestgestelle, das unabhängig von der Aktivierung von Iterationen der Wert nach dem Sarten von Mappe1 dort richtig angezeigt wird,
öffne ich danach aber Mappe2 und aktualisiere sie
hat danach die Zelle in Mappe1 wieder den #WERT-Fehler.
Gruss
Jürgen
Kann ich leider nicht nachvollziehen! Wer hat...
19.01.2007 19:59:00
Luc:-?
...noch 'ne Idee?
Vielleicht solltest du auch dein Makro posten, Jürgen;
muss aber nicht unbedingt helfen.
Tut mir leid!
Gruß Luc :-?
Anzeige
AW: Kann ich leider nicht nachvollziehen! Wer hat...
19.01.2007 21:37:44
Jürgen
Hallo Luc:-?
ich glaube zwar nicht das es am Macro liegt, aber hier der Code:
Option Explicit
Public

Function RND3(RundungsArt As Byte, Ausdruck As String)
Application.Volatile
Dim Anzahl_Nachkommastellen As Byte
Anzahl_Nachkommastellen = 2
If IsNumeric(Ausdruck) Then
RND3 = CDbl(Ausdruck)
Else
RND3 = Evaluate(Ausdruck)
End If
If RundungsArt < 10 Then    ' wenn Globales Runden erlaubt ist
If [GlobalRunden] > 1 Then RundungsArt = [GlobalRunden]
Else: RundungsArt = RundungsArt - 10
End If
Select Case RundungsArt
Case 2: RND3 = WorksheetFunction.Round(RND, Anzahl_Nachkommastellen)
Case 3: RND3 = WorksheetFunction.RoundDown(RND, Anzahl_Nachkommastellen)
Case 4: RND3 = WorksheetFunction.RoundUp(RND, Anzahl_Nachkommastellen)
End Select
End Function

Gruss
Jürgen
Anzeige
Da ist der Übeltäter!
19.01.2007 22:40:29
Luc:-?
Hallo Jürgen,
nehme an, du kennst dich mit der udF nicht so gut aus, denn hier liegt wohl der Hund begraben: RND3 = Evaluate(Ausdruck)
Die vbFkt Evaluate wertet nichtnumerischen Ausdruck aus, d.h., sie betrachtet ihn als Formel. Wenn er nur einfacher Text ist, sollte das unproblematisch sein, auch wenn da z.B. 1+5 steht. Wenn aber Standardfktt des TabBlattes enthalten sein können, wird's problematisch. Die müssen ebenso wie kompliziertere Formeln in US-Originalnotation, also englisch, vorliegen (gilt auch für Trennzeichen wie ,→. .→, ;→, außer zwischen echten { ; }). Das erklärt auch den Verzögerungs- bzw Umkopiereffekt, der auch auftritt, wenn der Range-Eigenschaft .Formula eine deutsche Formel zugewiesen wird. Excel muss das erst übersetzen, was durch Anklicken der Zelle bzw hier durch das Umkopieren angeschoben wird. Außerdem sollte bei Verwendung von Evaluate die Iteration aktiviert sein. Auf Fehlerwerte in Zellen reagiert Evaluate ebenfalls recht sauer. Die sollten abgefangen wdn. Ich hab da so meine Erfahrungen... ;-)
Außerdem kannst du die Arbeitsweise der udF kaum mit dem Formelassi überprüfen, weil sich Evaluate dem gern entzieht (läuft auf anderer Ebene).
Gruß Luc :-?
Anzeige
AW: Da ist der Übeltäter!
20.01.2007 10:06:18
Jürgen
Hallo Luc:-?
ich habe von VBA-Programmierung so gut wie keine Ahnung,
kann aber in anderen Programmiersprachen programmieren.
dein Verdacht ist wahrscheinlich nicht richtig.
ich habe mal die Zeilen mit "kritischen" Ausdrücken modifiziert:
Application Volatile ... in einen Kommentar verwandelt,
CDBl ... und
Evaluate ... durch eine Gleitkommazahl ersetzt.
Das ändert am fehlerhaften Programmverhalten nichts !!!
Die Ursache muss wonanders liegen, da es ja in Mappe1 funktioniert!
(nur nebenbei:
ich habe dabei bemerkt das sich noch 3 fehlerhafte Zeilen im Case-Statement befunden haben, statt RND hinter der Klammer muss es RND3 heissen;
merkwürdigerweise wird das vom VBA-Editor nicht angemosert;
wird wohl vom Interpreter erst bei der Ausführung bemerkt.
da ich testhalber zuletzt nur mit RundungsArt =1 probiert habe ist das case-statement nicht ausgeführt worden.)
der Fehler liegt irgendwo beim Zusammenspiel der Mappen 1 und 2.
nochmal zur Erinnerung:
das Fehlverhalten ist immer das Gleiche:
----------------------------------------
öffne ich nur Mappe1 funktioniert alles richtig,
(auch wenn ich die Funktion umbenenne oder inhaltlich ändere):
bei Programmstart steht in der Testzelle der richtige (unberechnete!) Wert
klicke ich die Zelle an wird der Wert richtig berechnet.
öffne ich danach Mappe2 und lasse die Verknüpfungen zu Mappe1 aktualisieren:
in den Testzellen beider Mappen steht nun der Fehlerwert #WERT !!!
klicke ich die Testzelle in Mappe1 an und ändere den Wert, zeigt Testzelle in Mappe1 das
... richtige Ergebniss an und Testzelle in Mappe2 auch ihren richtigen Inhalt an,
... es ist aber unklar ob er neu berechnet wurde oder nur den alte Inhalt angezeigt wird!?
klicke ich danach die Testzelle in Mappe2(!) an erhalten die Testzellen in beiden Mappen wieder den #WERT.
ich habe mittlerweile erfolglos Folgendes ausprobiert:
* einen neuen Modul in der Funktionen-Sammlung .xla erstellt und die Funktion mit anderem Namen versehen und in Mappe2 aufgerufen;
* die neue Funktion in der Funktions-Sammlung wieder gelöscht, dann als Modul in Mappe2 erstellt und in Mappe2 aufgerufen;
was kann ich noch versuchen?
Gruss
Jürgen
Anzeige
AW: Da ist der Übeltäter!
20.01.2007 10:41:46
Jürgen
Nachtrag:
es hat wahrscheinlich gar nichts mit der komkreten Funktion zu tun:
ich habe mich gerade erinnert das ich vor ein paar Wochen schon mal ein ähnliches Problem hatte und von Mappe2 nicht eine Funktion meiner Sammlung verwenden konnte:
vielleicht ist prinzipiell etwas an meiner Funbktionssammlung fehlerhaft!?
damals hatte ich die von Mappe1 verwendete Funktion lokal als Modul von Mappe1 eingefügt,
die neue in meiner Sammlung erstellte Funktion liess sich dann von Mappe2 aufrufen.
ich habe gerade das Gleiche mit der RND3-Funktion gemacht:
ich habe sie aus der Sammlung exportiert und gelöst ...
dann als neues lokales Modul in Mappe1 importiert:
dort funktioniert es jetzt immer noch.
danach habe ich ein neues Modul in meiner Sammlung erstellt, in einem Texteditor alle RND3 in RND4 geändert und über das Clipboard in das neue Modul eingefügt:
aber auch nachdem ich die Inhalt der Testzelle in Mappe2 in RND4 geändert habe und die Mappen mehrmals abgespeichert und neu geöffnet habe bleibt es bei dem Fehler.
bin ratlos ....
Gruss
Jürgen
Anzeige
AW: Da ist der Übeltäter!
20.01.2007 12:06:31
Jürgen
Hallo Luc:-?
ich glaube ich habe die Fehlerursache grfunden:
die Variable [GlobalRunden] ist in Excel Mappe1 definiert, nicht in VBA,
aber in Mappe2 unbekannt.
wie kann ich die Zelle/Variable GlobalRunden aus Mappe1 so "bekannt" machen das sie auch von VBA in Mappe2 als gleich angesehen wird?
Gruss
Jürgen
AW: Da ist der Übeltäter!
20.01.2007 12:25:12
Jürgen
Hallo Luc:-?
Problem gelöst:
ich musste nur der Zelle von [GlobalRunden] in Mappe2 in Excel den Namen
GlobalRunden geben;
jetzt funktioniert es wohl.
Gruss
Jürgen
AW: Na also! Glückwunsch! Gruß owT
20.01.2007 15:17:44
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige