Vba word номер абзаца

Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

1

Определить номер текущего абзаца (параграфа), где стоит курсор

14.10.2017, 15:11. Показов 6220. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

здравствуйте, делаю так:

Visual Basic
1
2
'
            sN = ActiveDocument.Range(Selection.Start, Selection.Start).Paragraphs.Count

но в ответе получаю 1, хотя это не правильно, что я делаю не так? спасибо



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

14.10.2017, 15:11

Ответы с готовыми решениями:

Как сделать, что бы в Memo1, на месте (строке) где стоит курсор, выделялась цветом строчка, где стоит печатный курсор «|»?
Как сделать, что бы в Memo1, на месте (строке) где стоит курсор, выделялась цветом строчка, где…

VBA Word Определить номер параграфа в ячейке таблицы
Доброго времени суток.
Работаю с ячейкой таблицы в word.
Задача взять из нее, например первых три…

Ворд, текст, где стоит курсор
здравствуйте, делаю так:
Sub Текст_где_курсор()

‘Debug.Print…

Word. Определение текущего параграфа
Всем, доброго времени суток!
Недавно пришлось начать осваивать VBA, причем параллельно на Word и…

2

Остап Бонд

Заблокирован

14.10.2017, 16:49

2

Цитата
Сообщение от viter.alex

Visual Basic
1
ActiveDocument.Range(0, Selection.Start).Paragraphs.Count

…это можно прочитать так: количество абзаце в части документа от первого символа до местоположения курсора

Не царское это дело —
голову включать и гуглить…



1



Homarty

141 / 119 / 29

Регистрация: 12.02.2017

Сообщений: 308

15.10.2017, 08:13

3

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub FindSelectedParagraph()
    Dim i&, iPos&
    iPos = Selection.Paragraphs(1).Range.Start
    With ActiveDocument
        Do
            i = i + 1
        Loop While .Paragraphs(i).Range.Start - iPos
        MsgBox "Active paragraph No " & i
    End With
End Sub



0



Добрый день.
Как в VBA Word достать номера абзацов? (отмечено красным на скрине)
У меня есть код, который обрабатывает таблицы в Word’e и берёт последний абзац перед каждой таблицей. Есть необходимость достать номер тоже.
Код:

Код
Sub KPI()
Dim wd As New Document
Set wd = ActiveDocument
tc = wd.Tables.Count
ReDim mas(1 To tc, 1 To 10)
For i = 1 To tc
    If i = 1 Then
        Set ps = wd.Range(0, wd.Tables(1).Range.Start - 1).Paragraphs
    Else
        Set ps = wd.Range(wd.Tables(i - 1).Range.End, wd.Tables(i).Range.Start - 1).Paragraphs
    End If
    For lp = ps.Count To 1 Step -1
        If Len(ps(lp)) > 5 Then
            mas(i, 1) = CleanString(ps(lp))
            Exit For
        End If
    Next
    For k = 1 To wd.Tables(i).Rows.Count
        mas(i, k + 1) = CleanString(wd.Tables(i).Cell(k, 2).Range)
    Next
Next
Set xl = CreateObject("Excel.Application")
xl.Visible = True
With xl.Workbooks.Add.Sheets(1)
    .Cells(1).Resize(tc, 10).Value = mas
    With .UsedRange
        .ColumnWidth = 27
        .Columns(2).ColumnWidth = 72
        .Columns(6).ColumnWidth = 72
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
    End With
End With
Set xl = Nothing
End Sub

Перейти к содержимому раздела

Серый форум

разработка скриптов

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

VBA/VBS: Извлечь номер абзаца.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 2010-10-02 14:40:09

  • pant-79
  • Разработчик
  • Неактивен
  • Рейтинг : [0|0]

Тема: VBA/VBS: Извлечь номер абзаца.

Полдня уже бьюсь над этой проблемой.
Как извлечь в Word номер абзаца, на котором сейчас стоит выделение (Selection то бишь)?

2 Ответ от alexii 2010-10-02 16:13:56

  • alexii
  • Разработчик
  • Неактивен

Re: VBA/VBS: Извлечь номер абзаца.

…
With objWord
    …
    Set objRange = .Selection.Range
    
    objRange.Expand wdParagraph
    
    WScript.Echo "Начало выделения — абзац №" & CStr(.ActiveDocument.Range(0, objRange.Start).Paragraphs.Count + 1)
    WScript.Echo "Конец выделения  — абзац №" & CStr(.ActiveDocument.Range(0, objRange.End).Paragraphs.Count)
    …
End With
…

* получаем из выделения диапазон («objRange»);
* расширяем этот диапазон (само выделение не трогаем!) до границ абзацев;
* считаем число абзацев в диапазоне [от начала документа («0») до начала «нашего» диапазона («objRange.Start»)], добавляя +1, — это номер первого абзаца в выделении;
* аналогично считаем число абзацев в диапазоне [от начала документа («0») до конца «нашего» диапазона («objRange.Start»)] — это номер последнего абзаца в выделении.

3 Ответ от pant-79 2010-10-02 19:47:44 (изменено: pant-79, 2010-10-02 20:00:57)

  • pant-79
  • Разработчик
  • Неактивен
  • Рейтинг : [0|0]

Re: VBA/VBS: Извлечь номер абзаца.

Ну, я так понял, objRange надо объявлять только в VBS?
И wdParagraph как константу тоже…
В VBA это, по-моему, проще…

Кстати, если выделение меньше абзаца, для конца выделения номер вычисляется с ошибкой почему-то.

Сообщения 3

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

 

Word

Get Line and Paragraph Number

Ease of Use

Intermediate

Version tested with

97 

Submitted by:

Steiner

Description:

This is a collection of three small functions that provide the line number on the current page, the abolute line number in the document, and the paragraph number in the document. 

Discussion:

Sometimes you need to refer to the line number of a certain bookmark or other object. Here, we provide three methods of functionality that MS should have included, but has not. Our sample file provides messageboxes to report the location. Likely, you will not use this method, but will use this code with other code to perform your task(s). 


Code:

instructions for use

			

Sub WhereAmI() MsgBox "Paragraph number: " & GetParNum(Selection.Range) & vbCrLf & _ "Absolute line number: " & GetAbsoluteLineNum(Selection.Range) & vbCrLf & _ "Relative line number: " & GetLineNum(Selection.Range) End Sub Function GetParNum(r As Range) As Integer Dim rParagraphs As Range Dim CurPos As Long r.Select CurPos = ActiveDocument.Bookmarks("startOfSel").Start Set rParagraphs = ActiveDocument.Range(Start:=0, End:=CurPos) GetParNum = rParagraphs.Paragraphs.Count End Function Function GetLineNum(r As Range) As Integer GetLineNum = r.Information(wdFirstCharacterLineNumber) End Function Function GetAbsoluteLineNum(r As Range) As Integer Dim i1 As Integer, i2 As Integer, Count As Integer, rTemp As Range r.Select Do i1 = Selection.Information(wdFirstCharacterLineNumber) Selection.GoTo what:=wdGoToLine, which:=wdGoToPrevious, Count:=1, Name:="" Count = Count + 1 i2 = Selection.Information(wdFirstCharacterLineNumber) Loop Until i1 = i2 r.Select GetAbsoluteLineNum = Count End Function

How to use:

  1. Copy the code above.
  2. Open your document.
  3. Hit Alt +F11 to open the Visual Basic Editor (VBE).
  4. Double-click your document’s name at left.
  5. Choose Insert-Module from the menu.
  6. Paste the code you copied.
  7. Close the VBE.

 

Test the code:

  1. Place your cursor somewhere inside the document.
  2. Hit Tools-Macro-Macros and double-click WhereAmI to display a dialog pointing out your current position.

 

Sample File:

Position.zip 7.78KB 

Approved by mdmackillop

This entry has been viewed 263 times.

Like this post? Please share to your friends:
  • Vba word нет календаря
  • Vba word неразрывный пробел
  • Vba word найти таблицу с текстом
  • Vba word найти строку
  • Vba word название файла