das hier in ein allgemeines modul, und das makro klickmich dem Button zuweisen
Option Explicit
Function getnextuser(ByVal strMember As String, ByVal strTroopsof As String) As String
' sucht nach einem wort und sucht ab dieser stelle nach dem zweiten suchwort.
' gibt dann das word nach dem zweiten suchwort zurück
Dim objCBData As DataObject
Dim pointer As Long, i As Integer, posmember As Long
Dim strPN As String
Set objCBData = New DataObject
objCBData.GetFromClipboard
strPN = objCBData.getText
If strPN = "" Then getnextuser = "": Exit Function
' feststellen ob user in text
posmember = pos_in_text(strPN, strMember)
'wenn in text etwas gefunden wurde
If posmember > 0 Then
'pointer ist die stelle im test wo das suchwort steht
' ab posmember wird im text gesucht
pointer = pos_in_text(strPN, strTroopsof, posmember)
If pointer > 0 Then
'wenn zweiter text vorhanden,dann wird das wort dannach zurückgegeben
'oder ein leeres wort ""
getnextuser = getText(Right(strPN, Len(strPN) - posmember), strTroopsof)
Exit Function
End If
End If
getnextuser = ""
End Function
Function getText(osel As String, strSuch As String) As String
'sucht ein wort in einem text und gibt das nächste wort zurück.
Dim nextLeer As Long, pos As Long
'position des suchwortes im text
pos = pos_in_text(osel, strSuch)
If pos > 0 Then
' wenn an fundstelle ein leerzeichen steht
If InStr(pos, osel, " ") = pos Then
'wird ab dem nächsten zeichen nach einem leerzeichen gesucht
nextLeer = InStr(pos + 1, osel, " ")
Else
'sonst ab diese r position suchen
nextLeer = InStr(pos, osel, " ")
End If
'gibt den text zwischen den positionen im text zurück
getText = Mid(osel, pos, nextLeer - pos)
Else
getText = ""
End If
End Function
Function pos_in_text(suchtext As String, suchzeichen As String, Optional start As Long) As Long
'gibt die stelle im text zurück an der das gesuchte wort endet, sonst 0
If IsMissing(start) Or start = 0 Then
If InStr(suchtext, suchzeichen) = 0 Then
pos_in_text = 0
Exit Function
Else
pos_in_text = InStr(suchtext, suchzeichen) + Len(suchzeichen)
End If
Else
If InStr(start, suchtext, suchzeichen) = 0 Then
pos_in_text = 0
Exit Function
Else
pos_in_text = InStr(start, suchtext, suchzeichen) + Len(suchzeichen)
End If
End If
End Function
Sub klickmich()
Dim stext As String
Dim stmp As Variant, stxt, sresult As String
Dim i&
stext = "Body-name:;chairman-name:;members-all:"
stmp = Split(stext, ";")
For i = 0 To UBound(stmp)
stxt = Split(stmp(i), "-")
sresult = getnextuser(stxt(0), stxt(1))
If InStr(1, sresult, """") > 0 Then
Range("B3").Offset(, i) = Split(getnextuser(stxt(0), stxt(1)), """")(1)
End If
Next
End Sub
|