Microsoft Excel

Herbers Excel/VBA-Archiv

VBA "Find" in UDF

Betrifft: VBA "Find" in UDF von: Frank
Geschrieben am: 27.08.2004 09:06:37

Ich bitte um Eure Hilfe!

Problem:
Ich habe eine benutzerdefinerte Funktion geschrieben, die den FIND-Befehl benutzt.
Aus Codenummern in mehreren Zellen sollen die Klartexte zu den Codenummern mehrzeilig in einer Zelle ausgegeben werden.

Anfangs funktionierte diese UDF, danach lieferte der FIND-Befehl immer "nothing" als Resultat.
Als "Sub" geschrieben mit Wertevorgaben innerhalb der "Sub" funktionierts.
Mit dem Debugger sehe ich die gleichen Startwerte für den FIND-Befehl, egal ob als "Sub" oder als "Function" getestet.

Andere Anwender benutzen diese Excel-Datei auch. Kein Schreibschutz.

Spielt die Formatierung der Codenummern eine Rolle?
Welche VBA-Verweise sind erforderlich?
- Microsoft Office 8.0 Objekt Library ist aktiviert.
Wo finde ich Hinweise zu notwendigen Verweisen?

Vielen Dank all denen, die sich für mein Problem Zeit nehmen
von Frank

Aufruf im Tabellenblatt:
=FehlerText(ZS21:ZS25;"Fehlercode")

Hier der Code der Funktion:

Function FehlerText(BereichCodeNr As Range, CodeListe As String) As String
'-- liefert mehrzeiligen Klartext zu Codenummern aus einem mehrzelligen Bereich
'   CodeListe ist der Tabellenname mit dem Fehlercode (Spalte 1) und dem Fehlertext (Spalte 2)
'   BereichCodeNr ist der Bereich, der die auszuwertenden Zellen mit Codenummern enthält
Dim varTemp As Variant, strMessage As String
Dim c As Variant, varCell As Variant
Dim blnFirstValue As Boolean
Dim strOut As String

  blnFirstValue = True
    
  For Each c In BereichCodeNr
    varTemp = Trim(c.Value)
    If Len(varTemp) > 0 Then                                	' leere Zellen möglich
      If Not blnFirstValue Then strOut = strOut & Chr(10)   	' nicht vor dem erstem Wert
      
      With ThisWorkbook.Worksheets(CodeListe).Cells(1, 1).EntireColumn
        Set varCell = .Find(What:=varTemp, LookIn:=xlValues, _
                          LookAt:=xlWhole, SearchOrder:=xlByRows)

        If Not varCell Is Nothing Then
          strMessage = .Cells(varCell.Row, 2).Value
          blnFirstValue = False
        End If
      End With

      strOut = strOut & strMessage
    End If
  Next c
  
  FehlerText = strOut
  
End Function

  


Betrifft: AW: VBA "Find" in UDF von: Udo
Geschrieben am: 27.08.2004 09:11:41

Find in UDF hat in Excel 97 nie zuverlässig funktioniert, wahrscheinlich ein bug.
Nutze stattdessen eine Sub, auch kein Problem.

Udo


  


Betrifft: AW: VBA "Find" in UDF von: Frank
Geschrieben am: 27.08.2004 10:06:34

Das Makro wurde zuerst in Office 2000 geschrieben und genutzt.
Excel97 könnte also die Ursache sein. Danke

"Sub" nutzen aber wie?
Wie bekomme ich das Ergebnis in die aufrufende Zelle
ohne die Formel zu überschreiben?

Frank