Microsoft Excel

Herbers Excel/VBA-Archiv

Mid() ersetzt nicht richtig

Betrifft: Mid() ersetzt nicht richtig von: Pascal Rehfeldt
Geschrieben am: 13.08.2004 11:25:17

Hallo,

ich habe mir mit der Mid() Funktion eine eigene Funktion geschrieben, welche ein Suchwort in einem Text ersetzt. Aber es kommt immer nur Mist raus.

Hier erstmal die Funktion selber:


'StrReplace()
'------------------------------------------------------------------------
'String StrReplace ( String SuchText, String Suchwort, _
' String Replacement )
'
'Ersetzt ein Wort (Suchwort) durch ein anderes (Replacement)
'in einem Text (SuchText).
'------------------------------------------------------------------------

Function StrReplace(ByVal SuchText As String, _
                    ByVal SuchWort As String, _
                    ByVal Replacement As String)


    If SuchText <> "" Then

        If InStr(1, SuchText, SuchWort) <> 0 Then

            Mid(SuchText, InStr(1, SuchText, SuchWort), Len(SuchWort)) _
                = Replacement
            
        End If

    End If
    
    StrReplace = SuchText

End Function



Rufe ich die funktion nun so auf:
Debug.Print StrReplace("Bla Bla Blubber Bla Bla", "Blubber", "ABC")
sollte eigentlich das rauskommen: "Bla Bla ABC Bla Bla"
Aber es kommt das raus: "Bla Bla ABCbber Bla Bla"

Woran liegt das?
  


Betrifft: AW: Mid() ersetzt nicht richtig von: Andreas Walter
Geschrieben am: 13.08.2004 11:40:14

Tja

Habe nicht gewusst, dass man soetwas überhaupt schreiben kann
Mid(SuchText, InStr(1, SuchText, SuchWort), Len(SuchWort)) _
= Replacement

Aber offensichtlich werden nur die 3 Stellen von ABC eingefügt an der Stelle

Mach es klassich
Suchtext=left(suchtext, InStr(1, SuchText, SuchWort), Len(SuchWort))-1)
plus
replacement
plus
dann extrahier mal rechts von suchtext, ab
InStr(1, SuchText, SuchWort), Len(SuchWort)) + die Länge von Suchtext

Mit Deinen Kenntnissen ist es ein klaks.


  


Betrifft: Warum erfindest du das Rad denn neu? von: Boris
Geschrieben am: 13.08.2004 11:43:50

Hi Pascal,

das ist die Funktion WECHSELN - oder per VBA: WorksheetFunction.Substitute

Grüße Boris


  


Betrifft: AW: Warum erfindest du das Rad denn neu? von: Frank
Geschrieben am: 13.08.2004 11:50:26

oder in VBA direkt die Methode
replace
nutzen. Zumindestens ab Excel 2000. Für Excel 97 kann ich Dir folgende Routine empfehlen (http://www.dicks-blog.com/excel/2004/05/replace97.html), wenn Du nicht die worksheet
Function nutzen möchtest


Function Replace97(ByVal sExpression As String, _
    sFind As String, sReplace As String, _
    Optional lStart As Long = 1, _
    Optional lCount As Long = -1, _
    Optional cCompare As VbCompareMethod = vbBinaryCompare) As String
    
    Dim sTemp As String
    Dim lIntCnt As Long
    Dim i As Long
    Dim lFound As Long
    
    sTemp = Mid(sExpression, lStart, Len(sExpression) - lStart + 1)
    lIntCnt = lCount
    lFound = InStr(1, sTemp, sFind, cCompare)
    
    Do While CBool(lIntCnt) And (lFound > 0)
        sTemp = Left(sTemp, lFound - 1) & _
            sReplace & _
            Right(sTemp, Len(sTemp) - lFound + 1 - Len(sFind))
        lIntCnt = lIntCnt - 1
        lFound = InStr(lFound + Len(sReplace), sTemp, sFind, cCompare)
    Loop
    
    Replace97 = sTemp
    
End Function



  


Betrifft: AW: Warum erfindest du das Rad denn neu? von: Pascal Rehfeldt
Geschrieben am: 13.08.2004 12:06:39

Danke für die Hilfe.
Das ist genau das, was ich brauche. :)


  


Betrifft: AW: Warum erfindest du das Rad denn neu? von: Pascal Rehfeldt
Geschrieben am: 13.08.2004 12:07:27

Ich wusset garnicht, das man Worksheet Funktionen auch in VBA benutzen kann, aber gut zu wissen.
Danke für die Hilfe :)