Microsoft Excel

Herbers Excel/VBA-Archiv

VBA: find und instr oder iserror kombinieren

Betrifft: VBA: find und instr oder iserror kombinieren von: tomcatoggo
Geschrieben am: 13.11.2014 15:26:30

Hallo!

da ich jetzt etliche Stunden an diesem Problem hänge und einfach gar nicht verstehe, warum so eine (so dachte ich das zumindest) super simple Sache sich nicht lösen lässt, frage ich jetzt mal hier nach:

Ich denke ich brauche hier nix extra hochladen... hier die Beschreibung:
A1 Fe2O3
A2 C
A3 Fe
A4 O
A5 H

Code:

Function AnzahlAtome(Substance As String, Element As String) As Variant

Dim LenElement As Integer
Dim DimFind As Double

LenElement = Len(Element)
If InStr(1, Substance, Element, vbTextCompare) = 0 Then
AnzahlAtome = 0
Else
AnzahlAtome = LenElement '(das ist nur zum Test hier)
End If

End Function

So wie die Funktion jetzt da steht, spuckt sie sauber 0,2,1,0 aus (von A2-A5) wenn ich als erste Variable die Zelle A1 und als zweite Variable A2,3,4,5) setze.

Füge ich zwischen "end if" und "End Function" dann noch folgende Zeile ein (sonst keinerlei Veränderung):
DimFind = WorksheetFunction.Find(Element, Substance, 1)
bekomme ich für A2 und A5 den "#Wert!"-Fehler. Das passiert auch, wenn ich die Zeile irgendwo sonst einfüge.

Die Frage daher: warum zum G.... zerschießt dieser Ausdruck teilweise die Funktion obwohl er (also die Variable) ja nirgends verwendet wird?

Danke im Voraus!

  

Betrifft: AW: VBA: find und instr oder iserror kombinieren von: Rudi Maintaire
Geschrieben am: 13.11.2014 15:50:42

Hallo,
WSFct.Find(...) erzeugt einen Fehler, falls nicht vorhanden.
Da du DimFind als Double deklariert hast, wird die ganze Function an der Stelle beendet. Deshalb #Wert.

Dim DimFind as Variant sollte helfen.

Gruß
Rudi


  

Betrifft: AW: VBA: find und instr oder iserror kombinieren von: tomcatoggo
Geschrieben am: 13.11.2014 16:33:08

Das hatte ich auch schon probiert. Leider bleibt es beim Fehler. Aber auch wenn das einen Fehler produziert (was ich ja gewissermaßen beabsichtige), warum nimmt er das dann als Ergebnis der Funktion, obwohl ich die Variable nirgends sonst verwende und danach (oder auch davor) dann ja die Funktion mit AnzahlAtome = ... "beantworte"


  

Betrifft: AW: VBA: find und instr oder iserror kombinieren von: tomcatoggo
Geschrieben am: 13.11.2014 16:33:38

Das hatte ich auch schon probiert. Leider bleibt es beim Fehler. Aber auch wenn das einen Fehler produziert (was ich ja gewissermaßen beabsichtige), warum nimmt er das dann als Ergebnis der Funktion, obwohl ich die Variable nirgends sonst verwende und danach (oder auch davor) dann ja die Funktion mit AnzahlAtome = ... "beantworte"


  

Betrifft: AW: VBA: find und instr oder iserror kombinieren von: tomcatoggo
Geschrieben am: 13.11.2014 16:34:56

.


  

Betrifft: AW: VBA: find und instr oder iserror kombinieren von: Rudi Maintaire
Geschrieben am: 13.11.2014 17:00:38

Hallo,
durch den Fehler wird die Function nicht komplett durchlaufen, d.h. End Function wird nicht erreicht. Somit liefert sie auch keinen Rückgabewert.
Kannst du einfach testen, indem du einen Haltepunkt setzt und den Code mit F8 durchgehst.

Gruß
Rudi


 

Beiträge aus den Excel-Beispielen zum Thema "VBA: find und instr oder iserror kombinieren"