Ich versuche, ein Makro zu schreiben, und muss zum nächsten Absatz springen, wo ich den ersten Buchstaben auf Großschreibung testen werde. Ich habe Stunden damit verbracht und nur ungenaue oder schwer verständliche Dokumentation für etwas gefunden, das meiner Meinung nach einfach sein sollte. Jede Anleitung wäre willkommen. Bisher habe ich:
SUB FIND_PARAGRAPHS
Dim vDescriptor
dim Doc as object
dim Replace as object
dim oCursor
dim Proceed as Boolean
dim CapTest as String
vDescriptor = ThisComponent.createSearchDescriptor()
doc = ThisComponent
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
' test para begin; if capital test previous end
oCursor = Doc.Text.createTextCursor()
Do
oCursor.gotoNextParagraph(false) 'NW
CapTest = oCursor.goRight(1, true) 'NW
if CapTest = ucase(CapTest) Then goto TestPreviousEnd
Loop While CapTest
TestPreviousEnd:
END SUB
Antwort1
Es gibt mehrere Probleme:
- Geh rechts()Gibt einen Booleschen Wert zurück, um den Erfolg anzuzeigen, nicht die ausgewählte Zeichenfolge.
CapsTest
ist ein String und kein Boolescher Wert und kann daher nicht als Schleifenbedingung verwendet werden.- Woher wussten Sie, dass der Code nicht funktionierte? Vielleicht wollten Sie denCursor anzeigen, wodurch sich der sichtbare Cursor bewegen würde. (Ein Textcursor ist jedoch wahrscheinlich besser).
- Der Code ignoriert immer den ersten Absatz, was möglicherweise beabsichtigt ist, aber seltsam erscheint.
- Es gibt viele ungenutzte Variablen und die Groß- und Kleinschreibung ist inkonsistent.
Hier ist der funktionierende Code:
' Find the first paragraph in the document that begins with a capital letter.
Sub Find_Capitalized_Paragraph
Dim oDoc As Object
Dim oCursor As Object
Dim Proceed As Boolean
Dim CapTest As String
oDoc = ThisComponent
oCursor = oDoc.Text.createTextCursor()
oCursor.gotoStart(False)
Do
oCursor.goRight(1, True)
CapTest = oCursor.getString()
If CapTest <> "" And CapTest = UCase(CapTest) Then Goto TestPreviousEnd
oCursor.gotoNextParagraph(False)
Loop While CapTest <> ""
MsgBox("No results.")
Exit Sub
TestPreviousEnd:
MsgBox("Found result: """ & CapTest & """")
End Sub
Wenn das Dokument also enthält:
a
b
C
d
Anschließend druckt das Makro Found result: "C"
.
Schauen Sie sich unbedingt anAndrew Pitonyaks Makrodokument. Es enthält viele hervorragende Beispiele.