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

vba istfehler

vba istfehler
28.09.2012 09:51:26
Rümenapp
Hallo Excelperten,
da die Filter nur 2 Kriterien zu lassen, versuche ich eine Funktion zu schreiben, die diese Aufgabe übernimmt.
In A1:An stehen meine Suchkriterien, zb blau, grün, gelb, rot, ...
In B1 steht der zu prüfende Text zb "Das Wetter ist schön" oder "Der Himmel ist blau"
In C1 steht meine Formel =enthält(Matrix(A1:An),Text(B1))
Meine Funktion:
Function enthält(matrix, text)
Dim zelle As Range
wert = 0
For Each zelle In matrix
On Error GoTo weiter
If Application.WorksheetFunction.Search(zelle, text, 1) > 0 Then
wert = 1
Exit For
End If
weiter:
Next
enthält = wert
End Function
Problem: die Funktion läuft einmal durch, nach dem 2 Durchlauf bricht sie auf jeden Fall ab, entweder mit "1" oder "#WERT"
Ich hätte gerne "1" oder "0"!
iserror habe ich probiert - klappt nicht (nicht verstanden)
Ich verstehe auch nicht warum "on error" nur 1x funktioniert?
Wer kann helfen? Bitte mit Erklärung.
Vielen Dank
Marcus

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

Betreff
Datum
Anwender
Anzeige
AW: vba istfehler
28.09.2012 10:50:02
Eugen
Hallo Marcus
ich habe Deine Function etwas modifiziert, jetzt bringt sie eine 1 , wenn eines der Suchkriterien in b1 enthalten ist, ansonsten eine 0.
mfg
Eugen
https://www.herber.de/bbs/user/81929.xlsm

IstFehler benötigst du nicht, ...
28.09.2012 11:09:37
Luc:-?
…Marcus,
wenn du die TabBlattFkt Search so benutzt, denn die ergibt so ohnehin keinen auswertbaren Fehler. Falls du unbedingt einen Fehler auswerten willst, musst du Application.Search verwenden, aber das ist ja nicht notwendig, denn du willst ja gar keinen F-Wert ausgeben.
Function Enthält(Matrix, Text)
Dim zelle As Range
On Error Resume Next
For Each zelle In Matrix
Enthält = WorksheetFunction.Search(zelle, Text, 1)
If CBool(Enthält) Then Enthält = 1: Exit For
Next
Set zelle = Nothing
End Function
Natürlich ist auch das noch zu umständlich, denn es gibt ja die vbFkt Instr; also Enthält = Abs(CBool(Instr(Text, zelle))). Dabei kommt stets 0 bzw 1 heraus. Danach müsstest du dann nur noch nach 1 fragen: If Enthält = 1 Then Exit For [bzw If CBool(Enthält) … → fertig! Du könntest natürlich auch WAHR oder FALSCH (statt 1/0) ausgeben, denn im Grunde genommen schreibst du eine Logik-Fkt. Dann würden Abs() und = 1 entfallen können. Übrigens gäbe es hier für eine Anwendung als udFkt im TabBlatt noch weitere interessante Möglichkeiten.
Der Name der Fkt kann im Fktskörper wie eine einfache Variable benutzt wdn (bei Datenfeldern eher ungünstig, weil keine Einzelelemente per vbIndex ausgewählt wdn können). Durch CBool erhältst du einen direkt verarbeitbaren Wahrheitswert.
Dein Fehler: Eine Fehlerbehandlung kann nicht in einen Zyklus eingebaut wdn, der wird dann nämlich abgebrochen. Nur, wenn der Fehler wie hier generell ignoriert wird, kann die Schleife vollends durchlaufen wdn. Wenn der Zyklus vollendet wird, wird zelle automatisch freigegeben. Da das hier aber nicht immer der Fall sein wird (Exit For), sollte man das im Pgm tun (Nothing). Übrigens kann man so auch feststellen, ob ein Zyklus vollständig durchlaufen wurde, was hier nicht nötig ist, weil das nur beim Ergebnis 0 der Fall wäre, denn auch, wenn erst der letzte Suchbegriff gefunden wird, wird ja abgebrochen.
Gruß Luc :-?

Anzeige
AW: vba istfehler
28.09.2012 11:22:00
Rümenapp
Beide Lösungen funktionieren.
Vielen Dank an Eugen! Und specialthx to Luc:-? für die Erklärung!

Bitte sehr! SchöWE! ;-) owT
28.09.2012 11:26:21
Luc:-?
:-?

AW: vba istfehler
28.09.2012 13:04:54
Rümenapp
Beide Lösungen funktionieren.
Vielen Dank an Eugen! Und specialthx to Luc:-? für die Erklärung!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige