Как вы фиксируете количество строк в абзаце в текстовом документе с помощью макроса? - PullRequest
0 голосов
/ 24 июня 2019

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

Я использовал количество агентов для изменения интервала, но проблема в том, что информация некоторых агентов занимает больше места, чем другие, и поэтому в абзаце переменной длины может быть различное количество строк, даже если число агенты то же самое. Это приводит к тому, что макрос иногда генерирует пустую страницу, чего я не хочу. Переменная HIPAANumber - это та, которая хранит количество агентов в форме. Я посмотрел на варианты, когда я пишу выбор. и Выбор. Параграф. но ни один из вариантов, кажется, не захватывает нужную мне информацию.

With Selection
     If HIPAANumber > 2 And HIPAANumber < 5 Then
            .InsertBreak Type:=wdPageBreak
     End If

 Call ClientNameandDate(ClientName) 'The Sub inputs the Date and Client's Name fields. These fields always take up the same amount of space.
 .TypeParagraph
 If HIPAANumber <= 2 Then
      .InsertBreak Type:=wdPageBreak
 Else
      .TypeParagraph
 End If
End With


Private Sub ClientNameandDate(ClientName)

    Selection.TypeParagraph

    With Selection
        .ParagraphFormat.Alignment = wdAlignParagraphLeft
        .TypeText Text:="_______________________________" 'This code inputs the Date field
        .TypeText Text:=Chr(11)
        .TypeText Text:="Date"
        .TypeParagraph
        .Font.Size = 4
        .TypeText Text:=Chr(11)
        .Font.Size = 12
        .TypeText Text:=vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "__________________________________________"
        .TypeText Text:=Chr(11)
        .TypeText Text:=vbTab & vbTab & vbTab & vbTab & vbTab & vbTab
        .Font.Bold = True
        .TypeText Text:=UCase(ClientName)

    End With
End Sub

'' '

Я действительно не знаю, как использовать объекты в VBA, поэтому, если бы кто-то мог объяснить, как использовать объекты для этого, я был бы очень признателен. Я думаю, что самый простой способ сделать это - зафиксировать количество строк текста в абзаце с переменной длиной, а затем использовать это в операторе If позже, но я не знаю, как зафиксировать количество строк текста. абзаца.

1 Ответ

0 голосов
/ 25 июня 2019

Свойство Information может возвращать номер строки, как показано в следующем коде.

Sub CountLinesInTheSelectedParagraph()
    Dim rngFirst As Range, rngLast As Range

    Set rngFirst = Selection.Range
    rngFirst.Expand Unit:=wdParagraph
    rngFirst.Collapse Direction:=wdCollapseStart

    Set rngLast = Selection.Range
    rngLast.Expand Unit:=wdParagraph
    rngLast.Collapse Direction:=wdCollapseEnd

    Debug.Print _
        rngLast.Information(Type:=wdFirstCharacterLineNumber) _
        - rngFirst.Information(Type:=wdFirstCharacterLineNumber) _
        & " lines in the selected paragraph"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...