Hallo allerseits,
ich möchte verschiedene Formatierungen (RichtextStyles) eines Richtext-Feldes auslesen und habe im ersten Schritt einfach mal ein Beispiel der Designer-Hilfe (hier aus notesRichTextRange.TextRun) ausprobieren wollen. Es scheint in einer Endlosschleife zu kreisen.
Im Detail:
In meiner Testdatenbank gespeichert habe ich ein Dokument mit einem Feld „Body“, welches folgenden Text enthält:
"Erste Schrift zweite Schrift
dritte Schrift"
In diesem Text sind die Teilstrings "Erste Schrift", "zweite Schrift" und "dritte Schrift" jeweils in verschiedenen Schriftarten geschrieben. Vor "dritte Schrift" ist ein Absatz.
Das o.g. Beispielscript habe ich nur um den NotesUIWorkspace und das uidoc ergänzt und doc über uidoc.Document gesetzt. dieses wird über einen Aktionsbutton in der Maske ausgeführt.
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim rtnavBody As NotesRichTextNavigator
Dim rtnavPara As NotesRichTextNavigator
Dim rtrangePara As NotesRichTextRange
Dim rtrangeRun As NotesRichTextRange
Dim paraCount As Integer
Dim runCount As Integer
Set uidoc = ws.CurrentDocument
Set db = session.CurrentDatabase
Set doc = uidoc.Document
Set body = doc.GetFirstItem("Body")
REM Get first paragraph in Body item
REM Set range and navigator for it
Set rtnavBody = body.CreateNavigator
If Not rtnavBody.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH) Then
Messagebox "Body item does not contain text,",, _
"Error"
Exit Sub
End If
Set rtrangePara = body.CreateRange
Set rtrangeRun = body.CreateRange
Do
paraCount = paraCount + 1
runCount = 0
Call rtrangePara.SetBegin(rtnavBody)
Call rtrangePara.SetEnd(rtnavBody)
Set rtnavPara = rtrangePara.Navigator
REM Get each run in paragraph
REM Display it
Call rtnavPara.FindFirstElement(RTELEM_TYPE_TEXTRUN)
Do
runCount = runCount + 1
Call rtrangeRun.SetBegin(rtnavPara)
Messagebox rtrangeRun.TextRun,, _
"Paragraph " & paraCount & ", Run " & runCount
Loop While rtnavPara.FindNextElement(RTELEM_TYPE_TEXTRUN)
Loop While rtnavBody.FindNextElement(RTELEM_TYPE_TEXTPARAGRAPH)
Während der Text "erste Schrift" korrekt in der Msgbox angezeigt wird, bleibt das Script beim folgenden Space in der Endlosschleife hängen und gibt in der Msgbox nur noch und immer wieder " " aus. Erwartet hätte ich im dritten Durchlauf des inneren Loops eigentlich "zweite Schrift".
Ich kann mir nicht erklären, warum. Weiß jemand Rat?
Vielen Dank & viele Grüße
Thorsten