Текущая строка word vba

Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Ask Question

Asked
11 years, 3 months ago

Modified
2 years, 9 months ago

Viewed
16k times

6

How can I determine the current row where a selection is active of the table in a Word VBA macro?

I’ve tried all variants with no success:

MsgBox Selection.Range
MsgBox Selection.Rows.Item.Index

  • vba
  • ms-word
  • row

Improve this question

edited Jul 5, 2020 at 12:10

Martijn Pieters's user avatar

Martijn Pieters

1.0m288 gold badges4005 silver badges3309 bronze badges

asked Dec 29, 2011 at 13:11

Crimix's user avatar

CrimixCrimix

3991 gold badge2 silver badges11 bronze badges

0

Add a comment
 | 

1 Answer

Sorted by:

Reset to default

15

I figured it out myself:

MsgBox Selection.Information(wdEndOfRangeRowNumber)
MsgBox Selection.Cells(1).RowIndex

Improve this answer

edited Jan 1, 2012 at 20:45

joran's user avatar

joran

168k32 gold badges428 silver badges464 bronze badges

answered Jan 1, 2012 at 20:20

Crimix's user avatar

CrimixCrimix

3991 gold badge2 silver badges11 bronze badges

1

  • And also Selection.Information(wdStartOfRangeRowNumber)

    – Winand

    Oct 27, 2022 at 7:12

Add a comment
 | 

Your Answer

Sign up or log in

Sign up using Google

Sign up using Facebook

Sign up using Email and Password

Post as a guest

Name

Email

Required, but never shown

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you’re looking for? Browse other questions tagged

  • vba
  • ms-word
  • row

or ask your own question.

  • The Overflow Blog
  • Are meetings making you less productive?

  • The philosopher who believes in Web Assembly

  • Featured on Meta
  • Improving the copy in the close modal and post notices — 2023 edition

  • Temporary policy: ChatGPT is banned

  • The [protection] tag is being burninated

  • Content Discovery initiative 4/13 update: Related questions using a Machine…

Related

2612

How do you display code snippets in MS Word preserving format and syntax highlighting?

20

VBA How to get path to The Current Users Application data folder?

497

How do I add indexes to MySQL tables?

0

Qualify Selection Object in VBA Word

0

VBA — Macro to extend selection to end of current table column, then find and replace only within that selection

0

VBA Word trying to shade SELECTED cells in one table in word that are bold

0

VBA Macros Lost After Updating to 2010 Word

1

How to make Microsoft Word visible after opening an Excel file in Word VBA

5

Set table column widths in Word macro VBA

Hot Network Questions

  • The challenge large language models (LLMs) pose to programming-based homework

  • Safe water for tomatoes

  • Review invitation of an article that overly cites me and the journal

  • How can Russia enforce the Wikimedia fines?

  • Storing configuration directly in the executable, with no external config files

  • Is it true that the thumb should be always on top of the piano keyboard when playing?

  • Keep export_presets.cfg in source control without exposing secrets

  • Has Batman ever ridden a bicycle?

  • A Magic Super Star

  • Why is Noether’s theorem not guaranteed by calculus?

  • Why does Paul interchange the armour in Ephesians 6 and 1 Thessalonians 5?

  • Natural way of saying «I don’t think X»

  • 60A breaker with 6AWG?

  • What can I do to cool down the room?

  • How to make inferences about individuals from aggregated data?

  • How to permanently turn on «-v» on ubuntu terminal (and how to remove it)

  • The print broke into tangled filaments

  • Plotting beam pattern of uniform linear array

  • Shortest time to cook burgers

  • Speeding up large data structures in Lean

  • Why are there the extra terms in SciPy’s implementation of the Kullback-Leibler divergence?

  • Is it safe for me to give my checking account’s routing and account numbers to a credit card company?

  • Simulated STM Image with Quantum-ESPRESSO’s pp.x

  • Keyboard shortcut for evaluating the current cell while keeping the cursor in the cell

more hot questions

Question feed

Your privacy

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

31 / 17 / 0

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

Сообщений: 102

1

31.05.2010, 23:52. Показов 15013. Ответов 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



    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,0275 ]   [ 16 queries used ]   [ Generated: 17.04.23, 04:12 GMT ]  

            113

            15

            Как я могу определить текущую строку, в которой активен выбор таблицы в макросе Word VBA?

            Я пробовал все варианты без успеха:

            MsgBox Selection.Range
            MsgBox Selection.Rows.Item.Index

            row

            word-vba

            ms-word

            спросил(а)

            11 лет, 3 месяца назад

            Crimix

            добавить комментарий

            пожаловаться

            Решение

            173

            Я сам понял:

            MsgBox Selection.Information(wdEndOfRangeRowNumber)
            MsgBox Selection.Cells(1).RowIndex

            ответил(а)

            11 лет, 3 месяца назад

            Crimix

            добавить комментарий

            пожаловаться

            Ваш ответ

            Введите минимум 50 символов

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

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

            Код:

            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 — это и есть роуиндекс :)

            Как определить текущую строку, в которой активен выбор таблицы в макросе Word VBA?

            Я попробовал все варианты без успеха:

            MsgBox Selection.Range
            MsgBox Selection.Rows.Item.Index
            

            6

            ms-word

            row

            word-vba

            Источник

            user641221


            29 дек ’11 в 13:11
            2011-12-29 13:11

            2011-12-29 13:11

            1

            ответ

            Решение

            Я понял это сам:

            MsgBox Selection.Information(wdEndOfRangeRowNumber)
            MsgBox Selection.Cells(1).RowIndex
            

            15

            Источник

            user641221


            01 янв ’12 в 20:20
            2012-01-01 20:20

            2012-01-01 20:20

            Другие вопросы по тегам

            ms-word

            row

            word-vba

            Содержание

            • VBA PDF (бесплатные загрузки)
            • Примеры Word VBA «Шпаргалка»
            • Учебное пособие по макросам Word VBA
            • Пример простого макроса Word
            • Объект документа Word
            • Документы
            • Диапазон, выделение, абзацы
            • Примеры макросов Word

            Добро пожаловать в наше мега-руководство по Word VBA / макросам!

            Эта страница содержит:

              1. Учебное пособие по Word VBA в формате PDF (бесплатная загрузка)
              2. Word VBA «Шпаргалка», содержащая список наиболее часто используемых фрагментов кода Word VBA.
              3. Полное руководство по Word VBA / Macro.
              4. Список всех наших руководств по макросам Word VBA с возможностью поиска

            Возможно, вас заинтересует наше интерактивное руководство по VBA для Excel. Хотя некоторые из примеров / упражнений относятся к Excel VBA, большая часть содержимого является общим для всех VBA, и вам может быть полезно изучить такие концепции, как If, Loops, MessageBoxes и т. Д.

            VBA PDF (бесплатные загрузки)

            Загрузите наше бесплатное руководство по Microsoft Word VBA! Или учебники VBA для других программ Office!

            Скачать

            Ниже вы найдете простые примеры кода VBA для работы с Microsoft Word.

            Выбрать / перейти к

            ОписаниеКод VBABackspaceSelection.TypeBackspaceВыбрать весь документSelection.HomeKey Unit: = wdStory
            Selection.ExtendКопироватьSelection.CopyУдалитьSelection.Delete Unit: = wdCharacter, Count: = 1Вставить послеSelection.InsertAfter «текст»Начало строкиSelection.HomeKey Unit: = wdLineКонец линииSelection.EndKey Unit: = wdLineВставитьSelection.PasteВыбрать всеSelection.WholeStoryВыбрать всю строкуSelection.EndKey Unit: = wdLine, Extend: = wdExtendВверх по абзацуSelection.MoveUp Unit: = wdParagraph, Count: = 1Переместить вправо на один символSelection.MoveRight Unit: = wdCharacter, Count: = 1Переместить вправо на одну ячейку в таблицеSelection.MoveRight Unit: = wdCellПерейти к началу документаSelection.HomeKey Unit: = wdStoryПерейти в конец документаSelection.EndKey Unit: = wdStoryПерейти на страницу 1Selection.GoTo What: = wdGoToPage, Which: = wdGoToNext, Name: = ”1 ″Перейти к началу страницыSelection.GoTo What: = wdGoToBookmark, Name: = ” Page”
            Selection.MoveLeft Unit: = wdCharacter, Count: = 1

            Return to Top

            Закладки

            ОписаниеКод VBAДобавлятьС ActiveDocument.Bookmarks
            .Add Range: = Selection.Range, Name: = «Name».
            .DefaultSorting = wdSortByName
            .ShowHidden = Ложь
            Конец сСчитатьDim n as Integer
            n = ActiveDocument.Bookmarks.CountУдалитьActiveDocument.Bookmarks («Имя закладки»). УдалитьСуществуют?Если ActiveDocument.Bookmarks.Exists («BookmarkName») = True, то
            ‘Сделай что-нибудь
            Конец, еслиПерейти кSelection.GoTo What: = wdGoToBookmark, Name: = ”BookmarkName”ВыбиратьActiveDocument.Bookmarks («Имя закладки»). ВыберитеЗаменить текстSelection.GoTo What: = wdGoToBookmark, Name: = ”BookmarkName”
            Selection.Delete Unit: = wdCharacter, Count: = 1
            Selection.InsertAfter «Новый текст»
            ActiveDocument.Bookmarks.Add Range: = Selection.Range, _
            Name: = ”BookmarkName”

            Return to Top

            Документ

            ОписаниеКод VBAАктивироватьДокументы («Example.doc»). АктивироватьДобавить в переменнуюDim doc As Document
            Установить doc = Documents.AddДобавлятьDocuments.AddДобавить (из другого документа)Documents.Add Template: = ”C: Forms FormDoc.doc”, _
            NewTemplate: = FalseЗакрыватьДокументы («Example.doc»). ЗакрытьЗакрыть — сохранить измененияДокументы («Example.doc»). Закройте SaveChanges: = wdSaveChangesЗакрыть — не сохранятьДокументы («Example.doc»). Закройте SaveChanges: = wdDoNotSaveChanges.Закрыть — запрос на сохранениеДокументы («Example.doc»). Закройте SaveChanges: = wdPromptToSaveChanges.

            Return to Top

            Столбцы

            ОписаниеКод VBAСохранить какДокументы («Example.doc»). SaveAs («C: Example Example.doc»)СохранитьДокументы («Example.doc»). СохранитьЗащищатьДокументы («Example.doc»). Защитить пароль: = «пароль»Снять защитуДокументы («Example.doc»). Снять пароль: = «пароль»Число страницDim varNumberPages как вариант
            varNumberPages = _
            ActiveDocument.Content.Information (wdActiveEndAdjustedPageNumber)РаспечататьДокументы («Example.doc»). Распечатать

            Return to Top

            Устали искать примеры кода VBA? Попробуйте AutoMacro!

            Шрифт

            ОписаниеКод VBAРазмерSelection.Font.Size = 12ЖирныйSelection.Font.Bold = TrueКурсивSelection.Font.Italic = TrueПодчеркиваниеSelection.Font.Underline = wdUnderlineSingleВсе заглавные буквыSelection.Font.AllCaps = TrueЦветSelection.Font.TextColor = vbRedИмяSelection.Font.Name = «Абади»Нижний индексSelection.Font.Subscript = TrueSuperScriptSelection.Font.Superscript = TrueЦвет выделенияSelection.Range.HighlightColorIndex = wdYellowСтильSelection.Style = ActiveDocument.Styles («Нормальный»)

            Return to Top

            Вставлять

            ОписаниеКод VBAВставить автотекстSelection.TypeText Текст: = ”a3 ″
            Selection.Range.InsertAutoTextВставить код датыВставить файлSelection.InsertFile («C: Docs Something.doc»)Вставить разрыв страницыSelection.InsertBreak Тип: = wdPageBreakВставить символ абзацаSelection.TypeText Text: = Chr $ (182)Вставить вкладкуSelection.TypeText Текст: = vbTabВставить текстSelection.TypeText Text: = «Любой текст»Вставить абзац типаSelection.TypeParagraphВставить абзацSelection.InsertParagraph

            Return to Top

            Петли

            ОписаниеКод VBAСделать до конца документаСделать до ActiveDocument.Bookmarks (« Sel») = ActiveDocument.Bookmarks (« EndOfDoc»)
            ‘Сделай что-нибудь
            SubДля каждого документа в ДокументахDim doc As Document
            Для каждого документа в документах
            ‘Сделай что-нибудь
            Следующий документЦикл по абзацамПодпункты через абзацы
            Dim i As Long, iParCount As Long
            iParCount = ActiveDocument.Paragraphs.CountFori = 1 На iParCount
            ActiveDocument.Paragraphs (i) .Alignment = wdAlignParagraphLeft
            Далее я

            Return to Top

            Пункт

            ОписаниеКод VBAKeepLinesTogetherSelection.ParagraphFormat.KeepTogether = TrueKeepWithNextSelection.ParagraphFormat.KeepWithNext = ИстинаПробел послеSelection.ParagraphFormat.SpaceAfter = 12Пространство доSelection.ParagraphFormat.SpaceBefore = 0Выровнять по центруSelection.ParagraphFormat.Alignment = wdAlignParagraphCenterВыровнять по правому краюSelection.ParagraphFormat.Alignment = wdAlignParagraphRightВыровнять по левому краюSelection.ParagraphFormat.Alignment = wdAlignParagraphLeftЛевый отступSelection.ParagraphFormat.LeftIndent = InchesToPoints (3,75)Правый отступSelection.ParagraphFormat.RightIndent = InchesToPoints (1)Межстрочный интервалС Selection.ParagraphFormat
            .LineSpacingRule = wdLineSpaceExactly
            .LineSpacing = 12
            Конец сПеребрать все абзацыПодпункты через абзацы
            Dim i As Long, iParCount As Long
            iParCount = ActiveDocument.Paragraphs.CountFori = 1 На iParCount
            ActiveDocument.Paragraphs (i) .Alignment = wdAlignParagraphLeft
            Далее я

            Return to Top

            Учебное пособие по макросам Word VBA

            Это руководство по использованию VBA с Microsoft Word. Это руководство научит вас писать простой макрос и взаимодействовать с документами, диапазонами, выделениями и абзацами.

            Примечание. Если вы новичок в Macros / VBA, вам также может быть полезна эта статья: Как писать макросы VBA с нуля.

            VBA — это язык программирования, используемый для автоматизации программ Microsoft Office, включая Word, Excel, Outlook, PowerPoint и Access.

            Макросы представляют собой блоки кода VBA, которые выполняют определенные задачи.

            Когда ты Записать макрос, Word запишет код VBA в макрос, что позволит вам повторять ваши действия. Вы можете увидеть список всех доступных макросов из Просмотр> Макросы.

            После записи макроса вы сможете редактировать макрос из списка макросов:

            Когда вы нажимаете Редактировать, вы открываете Редактор VBA. Используя редактор VBA, вы можете редактировать записанные макросы или писать макрос Word с нуля. Для доступа к редактору VBA используйте ярлык ALT + F11 или щелкните Visual Basic от Лента разработчика.

            Пример простого макроса Word

            Это простой пример макроса Word VBA. Он выполняет следующие задачи:

            • Открывает документ Word
            • Записывает в документ
            • Закрывает и сохраняет документ Word.
            123456789101112131415 Sub WordMacroExample ()’Открыть документ и назначить переменнойDim oDoc как документУстановите oDoc = Documents.Open («c: Users something NewDocument.docx»).’Написать в документSelection.TypeText «www.automateexcel.com»Selection.TypeParagraph’Сохранить и закрыть документoDoc.SaveoDoc.CloseКонец подписки

            Основы работы с макросами Word

            Весь код VBA должен храниться в подобных процедурах. Чтобы создать процедуру в VBA, введите «Sub WordMacroExample» (где «WordMacroExample» — желаемое имя макроса) и нажмите ВХОДИТЬ. VBA автоматически добавит круглые скобки и End Sub.

            Объект документа Word

            При взаимодействии с Microsoft Word в VBA вы часто будете ссылаться на Word «Объекты». Наиболее распространенные объекты:

            Объект приложения — сам Microsoft Word

            Объект документа — документ Word

            Объект диапазона — Часть документа Word

            Объект выделения — Выбранный диапазон или положение курсора.

            заявка

            Приложение — это объект «верхнего уровня». Через него можно получить доступ ко всем остальным объектам Word.

            Помимо доступа к другим объектам Word, можно применить настройки «уровня приложения»:

            1 Application.Options.AllowDragAndDrop = True

            Это пример доступа к «Выборке» в «Windows (1)» в Приложении:

            1 Application.Windows (1) .Selection.Characters.Count

            Однако к наиболее распространенным объектам Word можно получить доступ напрямую, без ввода полной иерархии. Поэтому вместо этого вы можете (и должны) просто ввести:

            1 Selection.Characters.Count

            Документы

            ActiveDocument

            Часто у вас есть два или более документов, открытых в Word, и вам нужно указать, с каким конкретным документом Word следует взаимодействовать. Один из способов указать, какой документ использовать ActiveDocument. Например:

            1 ActiveDocument.PrintOut

            … Напечатал бы ActiveDocument. ActiveDocument — это документ в Word, который «имеет фокус»

            Чтобы переключить ActiveDocument, используйте команду Activate:

            1 Документы («Example.docx»). Активировать

            Этот документ

            Вместо использования ActiveDocument для ссылки на активный документ вы можете использовать ThisDocument для ссылки на документ, в котором хранится макрос. Этот документ никогда не изменится.

            Переменные документа

            Однако для более сложных макросов может быть сложно отслеживать активный документ. Также может быть неприятно переключаться между документами.

            Вместо этого вы можете использовать переменные документа.

            Этот макрос назначит ActiveDocument переменной, а затем распечатает документ, используя переменную:

            12345 Sub VarExample ()Dim oDoc как документУстановите oDoc = ActiveDocumentoDoc.PrintOutКонец подписки

            Документ Методы

            Открыть документ

            Чтобы открыть документ Word:

            1 Documents.Open «c: Users SomeOne Desktop Test PM.docx»

            Мы рекомендуем всегда назначать документ переменной при его открытии:

            12 Dim oDoc как документУстановите oDoc = Documents.Open («c: Users SomeOne Desktop Test PM.docx»).

            Создать новый документ

            Чтобы создать новый документ Word:

            Мы можем указать Word создать новый документ на основе некоторого шаблона:

            1 Documents.Add Template: = «C: Program Files Microsoft Office Templates MyTemplate.dotx»

            Как всегда, присвоение документа переменной при создании или открытии помогает избавить от серьезных проблем:

            12 Dim oDoc как документУстановите oDoc = Documents.Add (Template: = «C: Program Files Microsoft Office Templates MyTemplate.dotx»)

            Сохранить документ

            Чтобы сохранить документ:

            или Сохранить как:

            1 ActiveDocument.SaveAs FileName: = c: Users SomeOne Desktop test2.docx «, FileFormat: = wdFormatDocument

            Закрыть документ

            Чтобы закрыть документ и сохранить изменения:

            1 ActiveDocument.Close wdSaveChanges

            или без сохранения изменений:

            1 ActiveDocument.Close wdDoNotSaveChanges

            Распечатать документ

            Это напечатает активный документ:

            1 ActiveDocument.PrintOut

            Диапазон, выделение, абзацы

            Диапазон а также Выбор являются, вероятно, наиболее важными объектами в Word VBA и, безусловно, наиболее часто используемыми.

            Диапазон относится к некоторой части документа, обычно, но не обязательно, к тексту.

            Выбор относится к выделенному тексту (или другому объекту, например изображениям) или, если ничего не выделено, к точке вставки.

            Абзацы представляют абзацы в документе. Это менее важно, чем кажется, потому что у вас нет прямого доступа к тексту абзаца (вам нужно получить доступ к определенному диапазону абзацев, чтобы внести изменения).

            Диапазон

            Диапазон может быть любой частью документа, включая весь документ:

            12 Dim oRange As RangeУстановите oRange = ActiveDocument.Content

            или он может быть маленьким, как один символ.

            Другой пример, этот диапазон будет относиться к первому слову в документе:

            12 Dim oRange As RangeУстановите oRange = ActiveDocument.Range.Words (1)

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

            В следующем примере мы выделим первое слово второго абзаца жирным шрифтом:

            123 Dim oRange As RangeУстановите oRange = ActiveDocument.Paragraphs (2) .Range.Words (1)oRange.Bold = True

            Установить текст диапазона

            Чтобы установить текстовое значение диапазона:

            123 Dim oRange As RangeУстановите oRange = ActiveDocument.Paragraphs (2) .Range.Words (1)oRange.Text = «Привет»

            (Совет: обратите внимание на пробел после «Hello». Поскольку слово «объект» включает пробел после слова, просто «hello» мы получим «Hellonext word»)

            С диапазонами можно делать сотни вещей. Всего несколько примеров (предполагается, что вы уже сделали объектную переменную апельсин относится к интересующему диапазону):

            Изменить шрифт

            1 oRange.Font.Name = «Arial»

            Отображение в окне сообщения количества символов в определенном диапазоне

            1 MsgBox oRange.Characters.Count

            Вставьте текст перед ним

            1 oRange.InsertBefore «это вставленный текст»

            Добавить сноску к диапазону

            12 ActiveDocument.Footnotes.Add Диапазон: = oRange, _Text: = «Подробнее читайте на easyexcel.net.»

            Скопируйте в буфер обмена

            1234 oRange.CopyЧасто вам нужно перейти к конкретному диапазону. Итак, вы можете начать, начать и закончитьoRange.Start = 5oRange.End = 50

            После приведенного выше кода oRange будет относиться к тексту, начинающемуся с пятого и заканчивающемуся 50-м символом в документе.

            Выбор

            Выбор используется даже шире, чем Диапазон, потому что с ним легче работать Выборы чем Диапазоны, ЕСЛИ ваш макрос взаимодействует ТОЛЬКО с ActiveDocument.

            Сначала выберите желаемую часть вашего документа. Например, выберите второй абзац в активном документе:

            1 ActiveDocument.Paragraphs (2) .Range.Select

            Затем вы можете использовать объект выбора для ввода текста:

            1 Selection.TypeText «Какой-то текст»

            Мы можем ввести несколько абзацев ниже «Некоторый текст»:

            12 Selection.TypeText «Какой-то текст»Selection.TypeParagraph

            Часто необходимо знать, выделен ли какой-то текст или у нас есть только точка вставки:

            12345 Если Selection.Type wdSelectionIP ТогдаSelection.Font.Bold = TrueЕщеMsgBox «Вам нужно выделить текст».Конец, если

            При работе с объектом Selection мы хотим поместить точку вставки в определенное место и запускать команды, начиная с этой точки.

            Начало документа:

            1 Selection.HomeKey Unit: = wdStory, Extend: = wdMove

            Начало текущей строки:

            1 Selection.HomeKey Unit: = wdLine, Extend: = wdMove

            Параметр Extend wdMove перемещает точку вставки. Вместо этого вы можете использовать wdExtend, который выделит весь текст между текущей точкой вставки.

            1 Selection.HomeKey Unit: = wdLine, Extend: = wdExtend

            Переместить выделение

            Самый полезный метод изменения положения точки вставки — «Перемещение». Чтобы переместить выделение на два символа вперед:

            1 Selection.Move Unit: = wdCharacter, Count: = 2

            чтобы переместить его назад, используйте отрицательное число для параметра Count:

            1 Selection.Move Unit: = wdCharacter, Count: = — 2

            Параметр единицы измерения может быть wdCharacter, wdWord, wdLine или другим (используйте справку Word VBA, чтобы увидеть другие).

            Чтобы вместо этого переместить слова:

            1 Selection.Move unit: = wdWord, Count: = 2

            С выделением легче работать (по сравнению с диапазонами), потому что он похож на робота, использующего Word, имитирующего человека. Где находится точка вставки — какое-то действие произойдет. Но это означает, что вы должны позаботиться о том, где находится точка вставки! Это непросто после многих шагов в коде. В противном случае Word изменит текст в нежелательном месте.

            Если вам нужно какое-то свойство или метод, недоступный в объекте Selection, вы всегда можете легко получить диапазон, связанный с выбором:

            1 Установите oRange = Selection.Range.

            СОВЕТ: Использование Выбор часто проще, чем использование диапазонов, но также и медленнее (важно, когда вы имеете дело с большими документами)

            Абзацы

            Вы не можете напрямую использовать объект Paragraphs для изменения текста:

            1 ActiveDocument.Paragraphs (1) .Text = «Нет, это не сработает»

            Выше не сработает (на самом деле выдаст ошибку). Вам нужно сначала получить диапазон, связанный с конкретным абзацем:

            1 ActiveDocument.Paragraphs (1) .Range.Text = «Теперь работает :)»

            Но вы можете напрямую изменить его стиль:

            1 ActiveDocument.Paragraphs (1) .Style = «Нормальный»

            или измените форматирование на уровне абзаца:

            1 ActiveDocument.Paragraphs (1) .LeftIndent = 10

            или, может быть, вы хотите сохранить этот абзац на одной строке со следующим абзацем:

            1 ActiveDocument.Paragraphs (1) .KeepWithNext = True

            Сделайте абзац по центру:

            1 ActiveDocument.Paragraphs (1) .Alignment = wdAlignParagraphCenter

            ОЧЕНЬ полезно назначить конкретный абзац объектной переменной. Если мы присвоим переменной конкретный абзац, нам не нужно беспокоиться, станет ли первый абзац вторым, потому что мы вставили перед ним один абзац:

            12 dim oPara как абзацУстановите oPara = Selection.Paragraphs (1) ‘здесь мы присваиваем первый абзац текущего выделения переменной

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

            1234567 Sub ParagraphExample ()Dim oPara как абзацУстановить oPara = ActiveDocument.Paragraphs (1)MsgBox oPara.Range.TextoPara.Range.InsertParagraphBefore ‘Вставить абзацMsgBox oPara.Range.TextКонец подписки

            Объект абзаца очень часто используется в циклах:

            123456789101112 Sub LoopThroughParagraphs ()Dim oPara как абзацДля каждого параметра в ActiveDocument.Paragraphs«Сделай что-нибудь с этим. Мы просто покажем’текст абзаца, если его стиль — «Заголовок 4″Если oPara.Style = «Заголовок 4», тоMsgBox oPara.Range.TextКонец, еслиДалее oParaКонец подписки

            Word VBA Tutorial Заключение

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

            Примеры макросов Word

            Примеры макросов Word
            Шаблоны
            Добавить новые документы
            Подсчет слов в выделенном фрагменте
            Текстовые поля
            Сохранить как PDF
            Закладки
            Таблицы
            Найти, найти и заменить
            Открытые документы

            Word VBA: часто задаваемые вопросы

            Что такое макрос Word?

            Макрос — это общий термин, обозначающий набор инструкций по программированию, которые автоматизируют задачи. Макросы Word автоматизируют задачи в Word с помощью языка программирования VBA.

            Есть ли в слове VBA?

            Да, в Microsoft Word есть редактор VBA. Доступ к нему можно получить, нажав клавиши ALT + F11 или перейдя в раздел «Разработчик»> «Visual Basic».

            Как использовать VBA в Word?

            1. Откройте редактор VBA (ALT + F11 или Разработчик> Visual Basic).
            2. Выберите «Вставить»> «Модуль», чтобы создать модуль кода.
            3. Введите «Sub HelloWorld» и нажмите Enter.
            4. Между строками «Sub HelloWorld» и «End Sub» введите «MsgBox« Hello World! »
            5. Вы создали макрос!
            6. Теперь нажмите «F5», чтобы запустить макрос.

            Понравилась статья? Поделить с друзьями:
          • Текущая строка excel для макроса
          • Текущая страница в excel vba
          • Текущая страница word vba
          • Текущая стоимость в excel это
          • Текущая стоимость аннуитета формула excel