Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1524to1528
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

Fehlerprüfung in eigendefinierter Funktion findet

Fehlerprüfung in eigendefinierter Funktion findet
29.11.2016 12:48:28
Brigitta
Hallo
wenn ich eine eigendefinierte Funktion von der Worksheet-Umgebung aus
über 'Funktion einfügen' aufrufe, wird eine programmierte Fehlerüberprüfung nicht
ausgeführt.
Beispiel:
Public Function TestFunction(vecA As range)
'  Prüfung, ob Mehrfachbereich ausgewählt
If vecA.Areas.Count > 1 Then
MsgBox "Fehler"
Exit Function
End If
TestFunction = vecA.Address
Set objVector = Nothing
End Function
Die Testfunktion schreibt lediglich #Wert in die Zelle, wenn ich sie vom
Excelblatt aus aufrufe. Sie erkennt aber offensichtlich das unerwünschte Ereignis,
nur die Messagebox erscheint nicht.
Wie kriege ich die Messagebox sichtbar, wenn ich die Testfunktion aus
der Worksheetumgebung aufrufe (ich will eine aussagekräftige Fehlermeldung,
nicht nur #Wert in der Zelle)?
Danke und Grüße
Brigitte

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlerprüfung in eigendefinierter Funktion findet
29.11.2016 12:59:42
Brigitta
Sorry,
die zweitletzte Zeile
Set objVector = Nothing
ist durchs kopieren übriggeblieben,
sie gehört raus.
Grüße
B.
Krückenlösung
29.11.2016 13:12:56
ChrisL
Hi Birgitte
Wenn ich richtig verstehe geht es dir darum nicht-zusammenhängende Bereiche zu erkennen.
z.B.
=TestFunction(A1;C1)
Hierbei besteht das Problem dass die Anzahl Argumente nicht mit der benutzerdefinierten Funktion übereinstimmen. Die Funktion wird darum gar nicht ausgeführt d.h. es hilft auch kein Fehlerhandling.
Eine (ziemlich unschöne) Krückenlösung könnte sein, weitere optionale Argumente (kannst auch noch ein paar mehr rein machen) einzufügen. Sobald das zweite Argument benutzt wird, handelt es sich offensichtlich um eine Mehrfachauswahl.
Public Function TestFunction(vecA As Range, Optional a As Range, Optional b As Range)
If a Is Nothing Then
TestFunction = vecA.Address
Else
TestFunction = "Fehler"
End If
End Function

cu
Chris
Anzeige
AW: Krückenlösung
29.11.2016 13:36:56
Brigitta
Das ist keine Krückenlösung.
Die Idee find ich gut.
Ich hab erst durch deinen Hinweis, dass die Anzahl Argumente nicht mit der benutzerdefinierten Funktion übereinstimmt, das Verhalten verstanden.
Danke und Grüße
B.
AW: Professionelle Lösung
29.11.2016 13:52:03
Daniel
Hi
wenn man mit einer unterschiedlichen Anzahl von Eingaben umgehen muss, dann bietest sich das ParamArray als Übergabeparameter an.
Damit kann die Funktion eine variable Anzahl an Parametern aufnehmen. (dh bis zu 30, ggf Versionsabhänig)
die Parameter werden in ein Array geschrieben, welches man entsprechend auswerten und verarbeiten kann.
Function TestFunction(ParamArray vecA() As Variant) As String
If UBound(vecA) > 0 Then
TestFunction = "Mehrfachauswahl"
Else
TestFunction = vecA(0).Address
End If
End Function
Gruß Daniel
Anzeige
AW: Professionelle Lösung
29.11.2016 13:56:01
Brigitta
Hi Daniel, Hi Chris,
das ist eine wirklich gute Lösung, die Ihr erarbeitet habt.
Dank an Euch beide ...
Grüße
B.
Diese Lösung ist kaum semiprofessionell zu ...
29.11.2016 15:46:22
Luc:-?
…nennen, Brigitte (& Daniel),
denn sie berücksichtigt nicht, dass UBound eines ParamArrays auch <0 sein kann, nämlich dann, wenn kein Argument angegeben wurde. Xl wehrt sich nicht dagg, weil ein solches Argument stets optional ist. Außerdem ist ein ParamArray auch immer vom DTyp Variant, ein anderer würde nicht akzeptiert wdn, weil es ganz unter­schiedliche Daten enthalten kann. Gibt nun ein Nutzer etwas ganz Anderes an, wird das auch akzeptiert, aber in beiden bisher genannten Fällen wird vecA.Address in einen Fehler laufen. Das alles müsste also auch noch geprüft wdn.
Im Übrigen ist deine ursprüngliche Idee einer MsgBox kontra­produktiv. Stell dir mal vor, du würdest die UDF mehrfach in ZellFmln einsetzen und alle naselang erscheint eine solche Anzeige! Adieu, Rechen­performance! Ein Text stattdessen ist schon mal besser, ist aber eben nur ein Text. Warum denn keine echten Fehlerwerte? Xl bietet 7 Möglichkeiten, die auch in XlStandardFktt genutzt wdn. Warum willst du die nicht nutzen? Sie wdn doch auch besonders hervorgehoben. Hier böte sich #BEZUG! an, in VBA … = CVErr(xlErrRef).
Übrigens können viele XlStandardFktt mit unzusammenhängenden Bereichen umgehen, wenn sie denn in der dafür vorgesehenen Form notiert wdn. Der FktsAssi zeigt dann allerdings nur #WERT! als Wert­Wiedergabe, denn das kann er nicht in eine für die Anzeige übliche Matrix­Konstante wandeln (hätte MS auch intelli­genter pgmmieren können!). Es ist außerdem mitunter durchaus ein Unter­schied, ob ein unzusammen­hängender oder mehrere zusammen­hängende Bereiche angegeben wdn dürfen bzw können. Bei INDEX darfs höchstens ein (un-)zusammenhängender (aus mehreren zusammen­hängenden) sein, bei SUMME sind's idR mehrere zusammen­hängende Bereiche, obwohl man die auch als einen (oder mehrere) unzusammen­hängenden Bereich schreiben könnte. Insofern ist die Verwendung von ParamArray hierfür durchaus legitim. Die Frage ist nur, warum darf es nur ein zusammen­hängender Bereich sein? IdR kann man nämlich durchaus auch mit mehreren (SUMME) oder einem unzusammen­hängenden (INDEX) arbeiten.
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Fehlerprüfung in eigendefinierter Funktion
29.11.2016 13:31:06
Daniel
Hi
wie verwendest du denn die Funktion im Tabellenblatt?
die Messagebox erscheint nur dann, wenn du der Funktion einen Parameter übergibst, welcher einen Zellbereich darstellt, der aus mehreren Blöcken zusammengesetzt ist.
dh um die Messagebox zu bekommen, musst du die Funktion Funktion so ins Tabellenblatt schreiben, dh mit Klammern um den Zellbereich, damit dieser zu einem Parameter wird:
=TestFunction((A1;A3))
schreibst du lediglich dieses, ohne die innere Klammer
=TestFunction(A1;A3)
dann bekommst du den Wert-Fehler, weil du deiner Funktion zwei Parameter übergibst, obwohl nur ein Parameter erwartet wird.
Weil das gleich am Anfang passiert, wird dann von deinem Code auch nichts ausgeführt.
Gruß Daniel
Anzeige
AW: Fehlerprüfung in eigendefinierter Funktion
29.11.2016 13:45:42
Brigitta
Hi Daniel,
vielen Dank auch Dir für die Antwort.
Ich will die Funktion so schreiben, dass ein unerfahrener Anwender die selbstdefinierte
Funktion über den "Funktionsassistenten" aufrufen kann (also diese fx) - dann erscheint ein Eingabe-Fenster, wo Du den Mehrfachbereich problemlos anwählen kannst.
Beim zweiten Aufruf des Funktionsassistenten siehst Du dann allerdings, dass der Mehrfachbereich tatsächlich wie von Euch beschrieben in zwei Parameter umgesetzt wird, was mit der Parameterliste der Funktion natürlich nicht mehr übereinstimmt.
Ich bin auch darauf hereingefallen.
Meine Problem ist: wie fange ich einen Eingabefehler eines unerfahrenen Users ab, wenn er den beschriebenen (komfortablen) Weg über den Funktionsassistenten nimmt?
Die Idee mit dem optionalen Paramter von Chris find ich ganz gut.
Gibt es andere Lösungen?
Danke und Grüße
B.
Anzeige

145 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige