Vba word номер строки

31 / 17 / 0

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

Сообщений: 102

1

31.05.2010, 23:52. Показов 14989. Ответов 28


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

Прошу подсказать: как программно определить номер строки в Word 2003 (там, где находится курсор)?



0



ironegg

1904 / 781 / 31

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

Сообщений: 1,567

01.06.2010, 01:39

2

Visual Basic
1
ActiveWindow.Selection.Information(wdFirstCharacterLineNumber)

возвращает номер строки на странице. этот же номер отображается в статусбаре окна Word
если выделено больше одной строки, то возвращает номер строки начала выделения



1



31 / 17 / 0

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

Сообщений: 102

01.06.2010, 11:54

 [ТС]

3

СПАСИБО. ActiveWindow., пожалуй, было последнее, где я не покопал.



0



31 / 17 / 0

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

Сообщений: 102

21.08.2010, 13:18

 [ТС]

4

Огромный облом!!!
ActiveWindow.Selection.Information(wdFirstCharacte rLineNumber)
Так определяется номер строки текущей страницы!
А как определить «глобальный» номер строки, отсчитанный от начала документа???



0



Busine2009

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

21.08.2010, 13:39

5

vivat7,
обязательно программно?



0



31 / 17 / 0

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

Сообщений: 102

21.08.2010, 14:13

 [ТС]

6

Да, мне нужно обязательно программно определить «глобальный» номер строки в Word2003.
Чисто для интереса можно было бы и узнать: а что в статус-баре можно это включить?



0



Busine2009

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

21.08.2010, 14:18

7

vivat7,
Файл — Параметры страницы — Источник бумаги — Нумерация строк.



0



31 / 17 / 0

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

Сообщений: 102

21.08.2010, 14:40

 [ТС]

8

> Файл — Параметры страницы — Источник бумаги — Нумерация строк.
Ставим опцию «непрерывно» и визуально получаем то что надо — приятно. Но кто знает, как программно считать этот номер??? Очень прошу ответить.

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



0



ironegg

1904 / 781 / 31

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

Сообщений: 1,567

21.08.2010, 17:50

9

через зад конечно, но, вроде, работает!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Sub numCurLine()
    Selection.HomeKey Unit:=wdLine
    Set s = Selection.Range
    Selection.GoTo wdLine, wdGoToFirst
    Do
        n = n + 1
        If Selection.Range.InRange(s) Then Exit Do
        Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=1
        DoEvents
    Loop Until n = 10000
    MsgBox n
End Sub



1



31 / 17 / 0

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

Сообщений: 102

21.08.2010, 19:10

 [ТС]

10

Спасибо, этот код действительно работает.
Но кто знает как это делается одной строкой прошу ответить.
Маловероятно, чтобы эта задача была забыта разработчиками VBA.



0



31 / 17 / 0

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

Сообщений: 102

23.08.2010, 12:05

 [ТС]

11

Отвечаю сам себе:
Код, который выводит глобальный номер страницы выглядит так
ActiveDocument.PageSetup.LineNumbering.CountBy
Спасибо всем, принявшим участие.
P.S. Может у кого есть ещё варианты ;-)

Добавлено через 4 минуты
Может у кого есть ещё варианты.
Он просто странно работает. Как курсор встает сначала на первую строку, затем пробегает по всем строкам до текущей, считая их.

Добавлено через 1 минуту
Впрочем, Count это и предполагает…



0



1904 / 781 / 31

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

Сообщений: 1,567

23.08.2010, 13:50

12

Цитата
Сообщение от vivat7
Посмотреть сообщение

Код, который выводит глобальный номер страницы выглядит так
ActiveDocument.PageSetup.LineNumbering.CountBy

причем сдесь номер страницы? CountBy — просто свойство определяющее способ нумерации строк (CountBy=5 ‘нумеруется каждая пятая строка). получить в переменную номер текущей строки с помощью объекта LineNumbering невозможно.
Учти, мой код можно оптимизировать, чтобы он выполнялся довольно шустро даже на больших документах(с помощью последовательных приближений и использования свойства ScreenUpdating).
так же имей в виду, что результаты этого кода, вообще говоря, не соответствуют значениям выдаваемым объектом LineNumbering, так как его действие аналогично пункту меню Перейти, но это, в принципе, тоже поправимо



1



Busine2009

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

23.08.2010, 20:30

13

ironegg,
пример, когда нумерация строк (Файл — Параметры страницы — и т.д.) не соответствует реальному количеству строк, если использовать твой макрос.



0



1904 / 781 / 31

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

Сообщений: 1,567

24.08.2010, 01:10

14

я знаю. знал всегда. действие моего кода основано на пункте меню «перейти». например строки таблицы (используемые, например для форматирования оглавления) мой код учитывает, а нумерация строк нет. это легко поправимо, если проверять, не находится ли текущая строка в таблице. считаю, что мой код более гибкий благодаря этой особенности



1



31 / 17 / 0

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

Сообщений: 102

24.08.2010, 10:20

 [ТС]

15

Ответ конкретно для Ironegg.
Вот этот код замечательно работает (при этом ничего не нумерует, слава богу):
Dim n As Long
n = ActiveDocument.PageSetup.LineNumbering.CountBy
MsgBox n
Причем, замечательно даже при наличии таблиц (хотя в моих обрабатываемых файлах их нет).
Чтобы это проверить открой любой многостраничный документ, встань на любую строку и запусти — сам всё и увидишь.
Хочешь сказать, что я случайно открыл недокументированную возможность? Тогда принимаю ваши поздравления.

Добавлено через 10 минут
Ironegg, конечно, я написал неверно одно слово. Вот правильный текст:
> Отвечаю сам себе:
> Код, который выводит глобальный номер СТРОКИ выглядит так
> ActiveDocument.PageSetup.LineNumbering.CountBy

Добавлено через 4 минуты
Он правда и разрывы страниц считает (а, возможно, и разделов0, но в моем случае нет ни того ни другого. Либо я их удалю программно перед обработкой текста.



0



ironegg

1904 / 781 / 31

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

Сообщений: 1,567

30.08.2010, 05:09

16

пока vivat7 разбирается, как запустить на выполнение нужный код, я немного оптимизировал(на время выполнения) предыдущий вариант

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Public Sub numCurLine3()
Dim m&, n&, k&
    Application.ScreenUpdating = 0
    With Selection
        Set ÇàïîìíèìÂûäåëåíèå = .Range ' ÷òîáû ïîòîì âîññòàíîâèòü âûäåëåíèå
        Set clps = .Range 'åñëè ÷òî òî âûäåëåíî ...
        clps.Collapse (wdCollapseStart) ' ... ищем только начало выделения
        clps.Select
        
        nPage = .Information(wdActiveEndPageNumber)
        If nPage = .Information(wdNumberOfPagesInDocument) Then ' åñëè âûäåëåíèå íà ïîñëåäíåé ñòðàíèöå
            n = .Information(wdFirstCharacterLineNumber)
            nPage = nPage - 1
        End If
        
        If nPage = 0 Then ' åñëè â äîêóìåíòå îäíà ñòðàíèöà
            n = .Information(wdFirstCharacterLineNumber)
        Else
            .GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=1
            m = 10000
            Do
                Set tmpSel = .Range
                .GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=m
                If .Information(wdActiveEndPageNumber) > nPage Then
                    tmpSel.Select
                    m = m / 10
                ElseIf .Information(wdActiveEndPageNumber) = nPage Then
                    Exit Do
                Else
                    k = k + m
                End If
                DoEvents
            Loop
            
            If n Then ' åñëè âûäåëåíèå áûëî íà ïîñëåäíåé ñòðàíèöå
                n = n - .Information(wdFirstCharacterLineNumber)
                .GoTo What:=wdGoToPage, Count:=nPage + 1
                .GoTo What:=wdGoToLine, Which:=wdGoToPrevious, Count:=1
                n = .Information(wdFirstCharacterLineNumber) + n + k + m + 1
            Else
                n = .Information(wdFirstCharacterLineNumber)
                ÇàïîìíèìÂûäåëåíèå.Select
                n = .Information(wdFirstCharacterLineNumber) - n + k + m + 1
            End If
        End If
    End With
    ÇàïîìíèìÂûäåëåíèå.Select ' âîññòàíîâèì âûäåëåíèå
    Application.ScreenUpdating = 1
    MsgBox n
End Sub

немного сумбурно, но… на стареньком компе в Word 2001 код выплоняется за пару секунд даже на больших документах из 300 страниц и 15000 строк



1



Busine2009

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

30.08.2010, 08:19

17

Цитата
Сообщение от ironegg
Посмотреть сообщение

в Word 2001

нет такого Wordа. Чтобы посмотреть, какие Wordы есть: Сервис — Параметры — Совместимость — Рекомендуемые параметры для «список всех версий Word».



0



31 / 17 / 0

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

Сообщений: 102

30.08.2010, 13:59

 [ТС]

18

Уважаемый Ironegg!
На многостраничных документах твой код работает во много раз быстрее, чем открытая мной недокументированная возможность (в случае, если окно ворд видно). Но я запускаю ворд в Access 2003 и не визуализирую окно ворд.



0



1904 / 781 / 31

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

Сообщений: 1,567

30.08.2010, 19:17

19

Busine2009, у меня другой подход — Справка, О программе.
т.е я имел в виду текстовый редактор из MS Office XP. а вот и история версий http://ru.wikipedia.org/wiki/Microsoft_Word (кстати, забавная страничка. рекомендую). вообще, согласен. я был немножко не точен

vivat7, перепроверь эту «недокументирванную возможность». у меня стойкое впечатление, что ты по ошибке запускаешь мой код



1



vivat7

31 / 17 / 0

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

Сообщений: 102

30.08.2010, 20:52

 [ТС]

20

vivat7, перепроверь эту «недокументирванную возможность». у меня стойкое впечатление, что ты по ошибке запускаешь мой код[/QUOTE]

Мы люди тверёзые, чтоб нынче, да надысь перепутать :-)))
Перепроверь сам:

Visual Basic
1
2
3
Dim n As Long
n = ActiveDocument.PageSetup.LineNumbering.CountBy
MsgBox n



0



  • Remove From My Forums
  • Question

  • I’m trying to get the line number, the number of paragraph and the number of page of a commont object in word macro document.

    How I can do that ?

    Thank you

    • Moved by

      Monday, November 14, 2011 9:09 AM
      (From:Visual Basic Language)

Answers

  • Hi

    Here is a hint

    Sub Get_Comment_Information()
    
    Dim oComment As Comment
    Dim oCommentRange As Range
    
    For i1 = 1 To ActiveDocument.Comments.Count
        Set oComment = ActiveDocument.Comments(i1)
        Set oCommentRange = oComment.Scope.Paragraphs(1).Range
        Debug.Print "Page : " & oCommentRange.Information(wdActiveEndPageNumber) & vbTab _
                         & "Line : " & oCommentRange.Information(wdFirstCharacterLineNumber) & vbTab
    
        
    
    Next i1
    
    End Sub
    
    

    Cheers

    Shasur


    http://www.vbadud.blogspot.com http://www.dotnetdud.blogspot.com

    • Marked as answer by
      danishani
      Wednesday, February 1, 2012 5:34 AM

  • Hi benaloui,

    Below an article on how to retrieve the line and paragraph number:

    http://www.vbaexpress.com/kb/getarticle.php?kb_id=59

    For the Page Number and Total Pages for example, you can use below code (run in a Module):

    Sub test()
    
    Dim Pagnr As Integer
    Dim TotPages As Integer
    
    Pagnr = Selection.Information(wdActiveEndPageNumber)
    
    TotPages = ThisDocument.ComputeStatistics(wdStatisticPages)
    
    MsgBox "CurrentPage: " & Pagnr & " of TotalPages: " & TotPages
    
    End Sub
    

    Hope this helps,


    Daniel van den Berg | Washington, USA | «Anticipate the difficult by managing the easy»

    • Proposed as answer by
      danishani
      Saturday, January 28, 2012 5:53 PM
    • Marked as answer by
      danishani
      Wednesday, February 1, 2012 5:34 AM

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки


    1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
    2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
    3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
    4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.

    >
    Как определить номер текущей строки
    , в таблице word

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    04.08.08, 12:09

      Senior Member

      ****

      Рейтинг (т): 9

      Есть вот такая штука:

      ExpandedWrap disabled

        Set tblToPrint = WordDoc.ActiveWindow.Selection.Tables(1)

      курсор стоит в какойто, мне неизвестной ячейке таблици. Как мне узнать номер текущей строки/столбца, бъюсь уже целый день над такой вроде ерундой! :wall:


      leo



      Сообщ.
      #2

      ,
      04.08.08, 13:55

        Цитата Mulder @ 04.08.08, 12:09

        курсор стоит в какойто, мне неизвестной ячейке таблици. Как мне узнать номер текущей строки/столбца

        ExpandedWrap disabled

          RowIndex = Selection.Rows(1).Index

          ColIndex = Selection.Columns(1).Index

        Profi

        Old Bat



        Сообщ.
        #3

        ,
        04.08.08, 16:15

          Moderator

          *****

          Рейтинг (т): 128

          ExpandedWrap disabled

            …WordDoc.ActiveWindow.Selection.Information(wdEndOfRangeColumnNumber)

            …WordDoc.ActiveWindow.Selection.Information(wdEndOfRangeRowNumber)


          Mulder



          Сообщ.
          #4

          ,
          05.08.08, 06:46

            Senior Member

            ****

            Рейтинг (т): 9

            Гигантское спасибо! Работает! :D

            Добавлено 05.08.08, 06:47
            Ухты, даже кнопочку «Вопрос решён» за меня нажали :)

            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

            0 пользователей:

            • Предыдущая тема
            • VB for Application
            • Следующая тема

            Рейтинг@Mail.ru

            [ Script execution time: 0,0202 ]   [ 16 queries used ]   [ Generated: 14.04.23, 17:33 GMT ]  

            Номер текущей строки таблицы Ворд

            Подскажите пожалуйста, как определить номер строки в таблице Ворд, в любой ячейке на строке находится курсор?
            Для числа всех строк в таблице

            Код:

            int rows_count=Tables3.OlePropertyGet(«Rows»).OlePropertyGet(«Count»);

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

            4 ответа

            4.8K

            14 декабря 2005 года

            Jump

            128 / / 09.11.2005

            Цитата:

            Originally posted by richel
            Подскажите пожалуйста, как определить номер строки в таблице Ворд, в любой ячейке на строке находится курсор?
            Для числа всех строк в таблице

            Код:

            int rows_count=Tables3.OlePropertyGet(«Rows»).OlePropertyGet(«Count»);

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

            Опять я :)
            (прет меня седня! За доклад про калькуляторы получил 5 за доклад и АВТОМАТОМ зачет!!! :D )
            Во первых могу посоветовать одну вещь:
            У тебя сам ворд конечно же есть, к нему должен быть установлен VBA (В ворде меню Севис/Макрос/Редактор VB) — открой — там и хелп замечательный, и поставив точечку после компонента, получаешь список всех его свойств и методов.

            А если это продолжение предыдущей темы, то указатель торчит там, где ты последний раз выполняла .Select (если юзер не полазил), а если где оставлен ты не в курсе, то опять же через подметоды Selected’а можно нарыть где указатель. Т.е. указатель сам не поймаешь, но можно найти выделенный кусок текста, а с учетом того, что просто указатель — это выделенный кусок с нулевой длинной выделения…

            1.2K

            14 декабря 2005 года

            richel

            142 / / 20.01.2005

            Цитата:

            Originally posted by Jump
            У тебя сам ворд конечно же есть, к нему должен быть установлен VBA (В ворде меню Севис/Макрос/Редактор VB) — открой — там и хелп замечательный, и поставив точечку после компонента, получаешь список всех его свойств и методов.

            Я так и сделала, только тогда, когда узнала, что искать.
            Вот решение вопроса:

            Код:

            rows_find=Tables3.OleFunction(«Cell», i, 2).OlePropertyGet(«RowIndex»);
            ShowMessage(rows_find);

            Так что, слава богу, все работает, пока, безукоризненно. Но еще встретятся трудные места.
            Надеюсь, сохранится хорошее настроение и Вы поможете.;)

            4.8K

            14 декабря 2005 года

            Jump

            128 / / 09.11.2005

            Цитата:

            Originally posted by richel
            Я так и сделала, только тогда, когда узнала, что искать.
            Вот решение вопроса:

            Код:

            rows_find=Tables3.OleFunction(«Cell», i, 2).OlePropertyGet(«RowIndex»);
            ShowMessage(rows_find);

            Так что, слава богу, все работает, пока, безукоризненно. Но еще встретятся трудные места.

            :) Я б не догадался насчет РоуИндекс… Не логичное имя. Логичней SelectedRow, т.к. все-таки имеет место выделение…
            Меня малясь терзают смутные сомнения: а эта штука не i возвратит?

            Цитата:

            Originally posted by richel
            Надеюсь, сохранится хорошее настроение и Вы поможете.;)

            Да… Настроение — вещь ключевая. Я дак даже бы не взялся полностью через ворд мутить такую агрегацию :D Эт ж сколько нервоф… Плюс я втишь помешан на оптимальности, соответственно, то что я предложил сделать через разбор строчки — свойственное мне решение (Хотя еще больше я люблю не Стинг, а вообще *чар :D )
            В общем к Вашим услугам :)

            4.8K

            14 декабря 2005 года

            Jump

            128 / / 09.11.2005

            Цитата:

            Originally posted by Jump

            Меня малясь терзают смутные сомнения: а эта штука не i возвратит?

            Проверил… В общем имя вполне логичное… гхм… Возвращает тупо i, а совсем не выделенную ячейку.
            Слушай, richel, когда пытаешься возвратить свои же переменные через переменные ворда и все при этом работает, как надо!!! Это уже говорит только об одном :D пора отдохнуть!!! :D

            Хотя если ты называешь выделенной строку с которой сейчас работаешь, то все логично. Просто этот роуиндекс тебе и не нужен — твоя переменная i — это и есть роуиндекс :)

            Формулировка задачи:

            Здравствуйте, таблицы Ворда

            Подскажите как по аналогии узнать номер строки в таблице, в документе Ворда, где расположен курсор, даже если таблица имеет ячейки, объединённые по вертикали, пока делаю, так:

            но получаю: ошибка 5991 отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединённые по вертикали
            Спасибо

            и ещё как узнать номер ячейки в таблице Ворда, где находится курсор?

            неужели без цикла никак нельзя узнать?

            что хотел — решил

            увы в другом месте прорвало, вопрос актуален
            как узнать номер ячейки в таблице Ворда, где находится курсор?
            как узнать количество ячеек в строке таблицы Ворда, и в случае когда таблица имеет объединённые ячейки по вертикали?

            Код к задаче: «Узнать номер строки в таблице Ворда, где расположен курсор»

            textual

            If Selection.Cells(1).Next Is Nothing Then MsgBox "Конец таблицы"

            Полезно ли:

            15   голосов , оценка 4.000 из 5

            lina
            Начинающий
            Начинающий
             
            Сообщения: 14
            Зарегистрирован: 11.06.2004 (Пт) 13:10

            номер последней строки в таблице WORD

            Имеется таблица в WORDе. Необходимо определить номер последней строки этой таблицы. :roll:


            GSerg
            Шаман
            Шаман
             
            Сообщения: 14286
            Зарегистрирован: 14.12.2002 (Сб) 5:25
            Откуда: Магадан

            Сообщение GSerg » 19.10.2004 (Вт) 10:06

            table.rows.count???

            Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


            lina
            Начинающий
            Начинающий
             
            Сообщения: 14
            Зарегистрирован: 11.06.2004 (Пт) 13:10

            Сообщение lina » 19.10.2004 (Вт) 15:16

            Не получается, ругается Object reguired


            GSerg
            Шаман
            Шаман
             
            Сообщения: 14286
            Зарегистрирован: 14.12.2002 (Сб) 5:25
            Откуда: Магадан

            Сообщение GSerg » 19.10.2004 (Вт) 15:38

            Ну так нужно же указать, какую таблицу…

            Например, tables(1).rows.count…

            Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


            lina
            Начинающий
            Начинающий
             
            Сообщения: 14
            Зарегистрирован: 11.06.2004 (Пт) 13:10

            Сообщение lina » 20.10.2004 (Ср) 8:23

            Спасибо Шаман. Я сама после двух месяцев ничегонеделания не знаю чего хочу. У меня раньше в программе уже определялось количество строк, поэтому программа и ругалась.



            Вернуться в VBA

            Кто сейчас на конференции

            Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

            Понравилась статья? Поделить с друзьями:
          • Vba word положение курсора
          • Vba word поиск только в таблице
          • Vba word поиск текста по шаблону
          • Vba word поиск текста в таблице
          • Vba word поиск строки