1

Я пытаюсь написать макрос, и мне нужно перейти к следующему абзацу, где я проверю первую букву на заглавную. Я провел часы и нашел только неточную или трудную для следования документацию для чего-то, что я думаю, должно быть простым. Любое направление будет оценено. Пока что у меня есть:

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 ответ1

0

Есть несколько проблем:

  • goRight() возвращает логическое значение для обозначения успеха, а не выбранную строку.
  • 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" .

Обязательно ознакомьтесь с макро документом Андрея Питоняка. Он содержит много отличных примеров.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .