マクロを書こうとしているのですが、次の段落に進んで最初の文字が大文字になっているかテストする必要があります。何時間もかけて調べましたが、単純なはずのドキュメントが不正確だったりわかりにくいものしか見つかりませんでした。どんな指示でもいただければ幸いです。これまでのところ、次のことがわかりました。
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
答え1
いくつかの問題があります:
- 右に行って()選択された文字列ではなく、成功を示すブール値を返します。
CapsTest
はブール値ではなく文字列なので、ループ条件として使用することはできません。- コードが機能していないことをどうやって知ったのですか?おそらく、ビューカーソルこれにより、表示されているカーソルが移動します。(ただし、テキスト カーソルの方が適している可能性があります)。
- コードは常に最初の段落を無視します。これは意図的なものかもしれませんが、奇妙に思えます。
- 未使用の変数が多く、大文字と小文字の使い方が一貫していません。
動作するコードは次のとおりです:
' 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
したがって、ドキュメントに次の内容が含まれている場合:
a
b
C
d
次にマクロは を出力しますFound result: "C"
。
ぜひチェックしてくださいAndrew Pitonyak のマクロドキュメント優れた例文が多数掲載されています。