Ich möchte Dich ungern verwirren, aber ich würde da etwas anders herangehen. Sollte in dem Text eine Klammer als Text stehen, fällst Du auf die Nase. Beispiel:
Dies ist ein Text mit > und <Wert>
Instr (text, ">") liefert Dir, wenn ich mich nicht verzählt habe, 23
Instr (text, "<") liefert 29
Mid$ (strGiven, intFirstDelimiterStart + 1, intFirstDelimiterEnd - intFirstDelimiterStart - 1) ergibt dann
Mid$ (text, 29+1, 23-29-1) -> Mid $ (text, 30,
-7)
Einfacher ist es m.E., den Text über die öffnende Klammer in ein Array zu verwandeln. Dazu gibt es die Function Split
Beispieltext: Dies ist ein Text mit > und <Wert1> und < und <Wert2> bla bla
Diesen Text zerlegst Du nun in ein Array, indem Du ihn über die öffnende Klammer splittest (Function Split).
Das Array durchläufts Du dann Element für Element und ersetzt den Inhalt durch den Teil , der links von der schließenden Klammer steht. Gibt es keine schließende Klammer, wird das Element dadurch leer.
Abschließend killst Du mit Fulltrim die leeren Elemente des Arrays. Zur Ausgabe (Msgbox) wandelst Du das Array wieder in einen Text um, das muss aber nicht zwingend in Deiner Routine sein, denn dort wirst Du mit dem Array weiterarbeiten.
Jetzt gibt es noch eine Kleinigkeit zu beachten. Es könnten falsche Klammern im Text vor dem ersten und/oder hinter dem letzten korrekten Wert eingetragen sein. Um das auszuschließen, würde ich vor und nach den Text eine Markierung anbringen, die normalerweise nicht in dem Text vorkommt, und nach dem Aufteilen des Strings und Ermitteln der Elemente das erste Element entfernen, wenn der Inhalt mit der Markierung beginnt. Ebenfalls löschst Du das letzte Element, wenn es mit der Markierung endet.
Anbei der funktionierende Code
Sub Initialize
'Const teststring = "Dies ist ein Text mit > und <Wert1> und < und <Wert2> bla bla"
Const teststring = "> und <<Wert1>> und << und <<Wert2<x>"
Const markierung = "###"
Dim meintext As String
meintext = markierung & teststring & markierung
Dim tmparray As Variant
tmparray = Split (meintext, "<")
ForAll ta In tmparray
ta = StrLeft (ta, ">")
End ForAll
If Left (tmparray (0), Len (markierung)) = markierung Then
tmparray (0) = ""
End If
If Right (tmparray (UBound (tmparray)), Len (markierung)) = markierung Then
tmparray (UBound (tmparray)) = ""
End If
tmparray = FullTrim (tmparray)
MsgBox Join (tmparray, Chr (10))
End Sub