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♦
1.0m288 gold badges4005 silver badges3309 bronze badges
asked Dec 29, 2011 at 13:11
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
168k32 gold badges428 silver badges464 bronze badges
answered Jan 1, 2012 at 20:20
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
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.
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 |
|||
возвращает номер строки на странице. этот же номер отображается в статусбаре окна 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 |
Огромный облом!!!
0 |
Заблокирован |
|
21.08.2010, 13:39 |
5 |
vivat7,
0 |
31 / 17 / 0 Регистрация: 31.05.2010 Сообщений: 102 |
|
21.08.2010, 14:13 [ТС] |
6 |
Да, мне нужно обязательно программно определить «глобальный» номер строки в Word2003.
0 |
Заблокирован |
|
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 |
|||
через зад конечно, но, вроде, работает!
1 |
31 / 17 / 0 Регистрация: 31.05.2010 Сообщений: 102 |
|
21.08.2010, 19:10 [ТС] |
10 |
Спасибо, этот код действительно работает.
0 |
31 / 17 / 0 Регистрация: 31.05.2010 Сообщений: 102 |
|
23.08.2010, 12:05 [ТС] |
11 |
Отвечаю сам себе: Добавлено через 4 минуты Добавлено через 1 минуту
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
23.08.2010, 13:50 |
12 |
Код, который выводит глобальный номер страницы выглядит так причем сдесь номер страницы? CountBy — просто свойство определяющее способ нумерации строк (CountBy=5 ‘нумеруется каждая пятая строка). получить в переменную номер текущей строки с помощью объекта LineNumbering невозможно.
1 |
Заблокирован |
|
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. Добавлено через 10 минут Добавлено через 4 минуты
0 |
ironegg 1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
||||
30.08.2010, 05:09 |
16 |
|||
пока vivat7 разбирается, как запустить на выполнение нужный код, я немного оптимизировал(на время выполнения) предыдущий вариант
немного сумбурно, но… на стареньком компе в Word 2001 код выплоняется за пару секунд даже на больших документах из 300 страниц и 15000 строк
1 |
Заблокирован |
|
30.08.2010, 08:19 |
17 |
в Word 2001 нет такого Wordа. Чтобы посмотреть, какие Wordы есть: Сервис — Параметры — Совместимость — Рекомендуемые параметры для «список всех версий Word».
0 |
31 / 17 / 0 Регистрация: 31.05.2010 Сообщений: 102 |
|
30.08.2010, 13:59 [ТС] |
18 |
Уважаемый Ironegg!
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
30.08.2010, 19:17 |
19 |
Busine2009, у меня другой подход — Справка, О программе. vivat7, перепроверь эту «недокументирванную возможность». у меня стойкое впечатление, что ты по ошибке запускаешь мой код
1 |
vivat7 31 / 17 / 0 Регистрация: 31.05.2010 Сообщений: 102 |
||||
30.08.2010, 20:52 [ТС] |
20 |
|||
vivat7, перепроверь эту «недокументирванную возможность». у меня стойкое впечатление, что ты по ошибке запускаешь мой код[/QUOTE] Мы люди тверёзые, чтоб нынче, да надысь перепутать :-)))
0 |
|
|
|
Популярные разделы FAQ: Общие вопросы
Особенности VBA-кода
Оптимизация VBA-кода
Полезные ссылки
1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Как определить номер текущей строки
, в таблице word
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Senior Member Рейтинг (т): 9 |
Есть вот такая штука: Set tblToPrint = WordDoc.ActiveWindow.Selection.Tables(1)
курсор стоит в какойто, мне неизвестной ячейке таблици. Как мне узнать номер текущей строки/столбца, бъюсь уже целый день над такой вроде ерундой! |
leo |
|
Цитата Mulder @ 04.08.08, 12:09 курсор стоит в какойто, мне неизвестной ячейке таблици. Как мне узнать номер текущей строки/столбца RowIndex = Selection.Rows(1).Index ColIndex = Selection.Columns(1).Index |
Old Bat |
|
Moderator Рейтинг (т): 128 |
…WordDoc.ActiveWindow.Selection.Information(wdEndOfRangeColumnNumber) …WordDoc.ActiveWindow.Selection.Information(wdEndOfRangeRowNumber) |
Mulder |
|
Senior Member Рейтинг (т): 9 |
Гигантское спасибо! Работает! Добавлено 05.08.08, 06:47 |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- VB for Application
- Следующая тема
[ 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 за доклад и АВТОМАТОМ зачет!!! )
Во первых могу посоветовать одну вещь:
У тебя сам ворд конечно же есть, к нему должен быть установлен 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
Надеюсь, сохранится хорошее настроение и Вы поможете.;)
Да… Настроение — вещь ключевая. Я дак даже бы не взялся полностью через ворд мутить такую агрегацию Эт ж сколько нервоф… Плюс я втишь помешан на оптимальности, соответственно, то что я предложил сделать через разбор строчки — свойственное мне решение (Хотя еще больше я люблю не Стинг, а вообще *чар
)
В общем к Вашим услугам
4.8K
14 декабря 2005 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by Jump
Меня малясь терзают смутные сомнения: а эта штука не i возвратит?
Проверил… В общем имя вполне логичное… гхм… Возвращает тупо i, а совсем не выделенную ячейку.
Слушай, richel, когда пытаешься возвратить свои же переменные через переменные ворда и все при этом работает, как надо!!! Это уже говорит только об одном пора отдохнуть!!!
Хотя если ты называешь выделенной строку с которой сейчас работаешь, то все логично. Просто этот роуиндекс тебе и не нужен — твоя переменная 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 / макросам!
Эта страница содержит:
-
- Учебное пособие по Word VBA в формате PDF (бесплатная загрузка)
- Word VBA «Шпаргалка», содержащая список наиболее часто используемых фрагментов кода Word VBA.
- Полное руководство по Word VBA / Macro.
- Список всех наших руководств по макросам 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», чтобы запустить макрос.