我正在尝试编写一个宏,我需要跳到下一段,在那里我将测试首字母是否大写。我花了几个小时才找到不准确或难以理解的文档,而我认为这些文档应该很简单。任何指导都将不胜感激。到目前为止,我有:
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 的宏文档. 其中包含了很多优秀的例子。