Word vba перенос строк

New paragraph / new line?

In Microsoft Word, there’s all the difference in the world between a new paragraph and a new line.

To insert a new paragraph, press the Enter key. If you have «show all characters» turned on, you’ll see each paragraph break with its «backwards P» icon. Each paragraph in Word has its own properties. It can have extra space above or below, it could be indented from the left / right margins, with the option of different indentation for the first line.

To insert a new line, press Shift + Enter. If you have «show all characters» turned on, you’ll see each manual line break with the icon of a solid arrow that goes first down, then left. Forcing a new line does not start a new paragraph, so the text will be laid out exactly as if it were a continuation of the paragraph you were in, simply on a new line. Because that’s what it is. If your paragraph has extra space above or below, this new line will simply be spaced in the same way as the line-spacing (you don’t get the extra spacing). If your paragraph has different indentation for the first line, this new line won’t have that different indentation, because it’s not the first line in a new paragraph.

That’s how you enter a line break in Word itself. But what if you want to do so in Visual Basic (i.e., in a macro)?

I needed to do this recently, and the answer was hard to find online, so I’ll write it up here — as usual, to help me find this again, and to help anyone else looking for the same thing.

New paragraphs in VBA are easy. There’s an application wide constant defined, vbCrLf, which represents ASCII character 10 (carriage return) followed by ASCII character 13 (line feed). A code snippet like this:

ActiveDocument.Paragraphs(6).Range.Text = "Foo" & vbCrLf & "Bar"

will replace the text of that paragraph with «Foo», followed by a paragraph break, followed by «Bar». Thus:

Foo and Bar in different paragraphs

But how do you get «Foo», followed by a line break, followed by «Bar», using VBA?

Foo and Bar separated by a line break

You might try some other VBA supplied constants. Such as vbCr (carriage return, ASCII 13) and vbNewLine (new line, also ASCII 13), or vbLf (line feed, ASCII 10). But all of those insert a new paragraph.

ActiveDocument.Paragraphs(6).Range.Text = "Foo" & vbCr & "Bar"
ActiveDocument.Paragraphs(6).Range.Text = "Foo" & vbLf & "Bar"
ActiveDocument.Paragraphs(6).Range.Text = "Foo" & vbNewLine & "Bar"

It turns out that what you need is ASCII 11, for which there is no pre-defined constant. The following gives you what you’re after:

ActiveDocument.Paragraphs(6).Range.Text = "Foo" & Chr(11) & "Bar"

I didn’t find that in any Microsoft documentation anywhere, but it works. Thanks for reading, and happy macro writing!

Home / VBA / How to Add a New Line (Carriage Return) in a String in VBA

In VBA, there are three different (constants) to add a line break.

  1. vbNewLine
  2. vbCrLf
  3. vbLf

vbNewLine

vbNewLine inserts a newline character that enters a new line. In the below line of code, you have two strings combined by using it.

Range("A1") = "Line1" & vbNewLine & "Line2"

When you run this macro, it returns the string in two lines.

It returns the character 13 and 10 (Chr(13) + Chr(10)). You can use a code in the following way as well to get the same result.

Range("A1") = "Line1" & Chr(13) & Chr(10) & "Line2"

But when you use vbNewLine you don’t need to use CHAR function.

vbCrLf

vbCrLf constant stands for Carriage Return and Line feed, which means Cr moves the cursor to the starting of the line, and Lf moves the cursor down to the next line.

When you use vbCrLf within two string or values, like, you have in the following code, it inserts a new line.

Range("A1") = "Line1" & vbCrLf & "Line2"

vbLf

vbLf constant stands for line feed character, and when you use it within two strings, it returns line feed character that adds a new line for the second string.

Range("A1") = "Line1" & vbLf & "Line2"

If you want to add a new line while using the VBA MsgBox you can use any of the above three constants that we have discussed.

MsgBox "Line1" & vbNewLine & "Line2"
MsgBox "Line1" & vbCrLf & "Line2"
MsgBox "Line1" & vbLf & "Line2"

There’s also a constant vbCr that returns carriage return character that you can use to insert a new line in a message box.

MsgBox "Line1" & vbCr & "Line2"

vbCr won’t work if you want to enter a cell value until you apply wrap text to it.

  • Remove From My Forums
  • Question

  • I tried «rn» with no look. It simply inserts «rn» verbatim into the document. How do I send a newline character in VBA?

    Thanks!

    Sep

Answers

  • Sub ScratchMacro()
    ‘A quick macro scratch pad created by Greg Maxey
    ActiveDocument.Range.InsertAfter «Test» & Chr(11) & «Test»  ‘New line
    ActiveDocument.Range.InsertAfter «Test» & vbCr & «Test» ‘New paragraph
    End Sub

    «Sepoto» wrote in message news:9bff0bf2-f53d-4c04-97fa-f5b48a48e120@communitybridge.codeplex.com…

    I tried «rn» with no look. It simply inserts «rn» verbatim into the document. How do I send a newline character in VBA?

    Thanks!

    Sep


    Greg Maxey Please visit my website at: http://gregmaxey.mvps.org/word_tips.htm

    • Marked as answer by

      Wednesday, October 27, 2010 10:57 PM


Форум программистов Vingrad

Модераторы: Akina

Страницы: (2) Все [1] 2 
( Перейти к первому непрочитанному сообщению )

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> VBA For Word, Не работает перевод строки 

:(

   

Опции темы

Гость_Temp
Дата 11.8.2003, 21:47 (ссылка)
   |    (голосов: 0)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Unregistered

Делаю так:

Код
Wrd.Selection.Find.Execute FindText:="[address]", ReplaceWith:="Country" & vbCrLf & "av. Aseerte, 123"

мне надо чтоб он слово [address] заменил на две строки, но вместо перевода строки (vbCrLf) вижу два квадратика. Почему? Что мне делать? Может вместо vbCrLf уникод символ какой-нить надо? Помоите пожалуйста! Очень благодарен!

  Вверх
Alles
Дата 12.8.2003, 04:04 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.6.2003
Где: RUSSIA

Репутация: 2
Всего: 2

Wrd.Selection.Find.Execute FindText:=»[address]», ReplaceWith:=»Country» & Chr(13) & Chr(13) & «av. Aseerte, 123»

PM MAIL ICQ   Вверх
Гость_Temp
Дата 13.8.2003, 06:12 (ссылка)
   |    (голосов: 0)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Unregistered

Цитата
Wrd.Selection.Find.Execute FindText:=»[address]», ReplaceWith:=»Country» & Chr(13) & Chr(13) & «av. Aseerte, 123»

Не работает… sad.gif Может как-нибудь по другому?

  Вверх
-Mikle-
Дата 13.8.2003, 07:23 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Невидимка Vingrad’а
***

Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59

Попытался найти ответ и-и-и…. мне это тоже интересно стало… Какой же код символа переноса строки у Word? Кто знает?

———————

Если тебе плюют в спину, значит ты впереди…

PM   Вверх
cardinal
Дата 13.8.2003, 09:00 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Инженер
****

Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99

Код
Selection.Find.Execute FindText:="[address]", ReplaceWith:="Country" & Chr(13) & Chr(13) & "av. Aseerte, 123"

Так все же правильно! Зачем тут два раза Chr(13) я не понял, но это не суть. Код символа переноса строки это 13.

———————

Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

«Познание бесконечности требует бесконечного времени, а потому работай не работай — все едино».  А. и Б. Стругацкие

PM   Вверх
Alles
Дата 13.8.2003, 09:00 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.6.2003
Где: RUSSIA

Репутация: 2
Всего: 2

Хм… , а может вот так Selection.TypeParagraph вот это точно строку переводит в Ворде!

PM MAIL ICQ   Вверх
Alles
Дата 13.8.2003, 09:10 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.6.2003
Где: RUSSIA

Репутация: 2
Всего: 2

Да …… cardinal прав это мой касяк я просто запарился и воткнул туда два 13 я почемуто подумал что … да ладно проехали там должен быть один перевод. Но Ворд действительно себя странно ведет при таком переводе ! у меня например пропадает кнопка в которой прописан перевод , а курсор где стоял там и стоит , а вот с этим Selection.TypeParagraph все ОК.

Код
Wrd.Selection.Find.Execute FindText:="[address]", ReplaceWith:="Country" & Selection.TypeParagraph & "av. Aseerte, 123"

PM MAIL ICQ   Вверх
Alles
Дата 13.8.2003, 09:53 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.6.2003
Где: RUSSIA

Репутация: 2
Всего: 2

Нет я помоему не прав ! Selection.TypeParagraph в этом блоке не работает !
Автор : ты помоему что-то намудрил

Selection.Text = «Country» & Chr(13) & «av. Aseerte, 123» вот так все работает !

Ты ищешь слово по документу и заменяешь его ??!!

Selection.Find.ClearFormatting
With Selection.Find
.Text = «address»
.Replacement.Text = «»

End With
Selection.TypeParagraph
Selection.Text = «Country» & Chr(13) & «av. Aseerte, 123»
Selection.Find.Execute
End Sub

Может ты вот так попробуешь ?

PM MAIL ICQ   Вверх
Гость_Temp
Дата 13.8.2003, 16:56 (ссылка)
   |    (голосов: 0)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Unregistered

Selection.TypeParagraph — это метод, он знает как переводить строку.
Вся беда в том, что вообще, то что я написал в вопросе, работает. Не работает это в случае если [address] стоит в последней строке в ячейке таблицы. Если поставить знак переноса после него (т.е. сделать так чтоб он был не в последней строке ячейки), то все работает. Но ведь ворд как-то может ставить перенос строки, даже если слово в последней строке ячейки. Как он это делает? Какой же символ переносит строку независимо от того, где она находится?

  Вверх
Alles
Дата 14.8.2003, 04:19 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.6.2003
Где: RUSSIA

Репутация: 2
Всего: 2

Да …кому как , но я органически не выношу когда в ворде работают с таблицами и на работе у себя постоянно воюю с персооналом. А вообще системный перевод строки это Chr(13) …… это как соль ! она соленая и все тут !!!
Странно ! у меня все работает независимо где в таблице стоит искомая строка.

PM MAIL ICQ   Вверх
Гость_Temp
Дата 14.8.2003, 06:05 (ссылка)
   |    (голосов: 0)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Unregistered

В Word сделана Счет-фактура. Для того чтобы разметить в каких областях листа, что находиться, я использую таблицу без видимых границ. Вообще весь файл — это шаблон. Потом, из VB, я работаю с этим шаблоном, т.е. ищу метасимволы, и заменяю их на соответствующие значения из прораммы. Но если метасимвол в последней строке ячейки, то он не хочет переносить строку. В других местах переносит, а тут нет. sad.gif

  Вверх
cardinal
Дата 14.8.2003, 15:55 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Инженер
****

Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99

Да, прикольно… А разница между «software enter» и «hardware enter» оказывается есть.

Код
Selection.Find.Execute FindText:="[address]", ReplaceWith:="Country" & vbVerticalTab & "av. Aseerte, 123"
SendKeys "{RIGHT}", True

А в MSDN вообще написано, что нам эта константа не пригодится,

Цитата
Vertical tab; not useful in Microsoft Windows

а она пригодилась smile.gif

———————

Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

«Познание бесконечности требует бесконечного времени, а потому работай не работай — все едино».  А. и Б. Стругацкие

PM   Вверх
Гость_Temp
Дата 14.8.2003, 16:58 (ссылка)
   |    (голосов: 0)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Unregistered

cardinal, ты молодец!!! Как я не догадался? Спасибо ОГРОМНОЕ за потраченое на меня время! Ты очень помог мне!!! Моя человеческая благодарность тебе! СПА-СИ-БО!!!

  Вверх
Гость_Temp
Дата 14.8.2003, 17:01 (ссылка)
   |    (голосов: 0)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Unregistered

Также огромное СПАСИБО Alles’у! Который потратил не меньше времени на меня!

  Вверх
Alles
Дата 15.8.2003, 02:21 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.6.2003
Где: RUSSIA

Репутация: 2
Всего: 2

Ну блин …век живи век учись smile.gif)) cardinal — тебе по рейтингу +10 .

PM MAIL ICQ   Вверх



















Страницы: (2) Все [1] 2 

Ответ в темуСоздание новой темы
Создание опроса
Правила форума «VB6»
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс «транслит» (возле кнопок кодов) если у Вас нет русских шрифтов.

  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »

Редактирование документов Word из кода VBA Excel. Добавление и форматирование текста. Объект Word.Range, свойство Text, методы InsertAfter и InsertBefore.

Работа с Word из кода VBA Excel
Часть 3. Редактирование документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Добавление текста в новый документ

Основные объекты, использующиеся в VBA Word для определения места вставки, добавления и форматирования текста – это Selection (выделение), Range (диапазон) и Bookmark (закладка).

Selection и Range позволяют заполнять текстом новые документы или редактировать существующие. Закладки можно использовать для вставки изменяемых реквизитов в шаблоны различных документов: договоры, акты, справки.

Объект Range имеет преимущество перед объектом Selection, так как он может быть создан только программно и не зависит от действий пользователя. Если для вставки и форматирования текста будет использоваться объект Selection, а пользователь во время работы программы просто поставит курсор в другое место документа, результат будет непредсказуем.

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

Объект Range возвращается свойством Range других объектов приложения Word: Document, Selection, Bookmark, Paragraph, Cell (объект Table).

Вставка текста без форматирования

Если текст вставляется без форматирования, достаточно одной строки кода (myDocument – это переменная):

  • Вставка текста с заменой имеющегося: myDocument.Range.Text = "Вставляемый текст"
  • Добавление текста после имеющегося: myDocument.Range.InsertAfter "Добавляемый текст"
  • Добавление текста перед имеющимся: myDocument.Range.InsertBefore "Добавляемый текст"

Методами InsertAfter и InsertBefore можно вставить текст и на пустую страницу, также, как с помощью свойства Text. Перейти на новый абзац и начать предложение с красной строки можно с помощью ключевых слов vbCr (vbNewLine, vbCrLf) и vbTab.

Вставка текста с форматированием

Для форматирования отдельных участков текста необходимо указать диапазон символов, входящих в этот участок. Здесь нам также поможет объект Range, которому можно задать любой набор символов, содержащихся в документе Word.

Синтаксис присвоения диапазона символов объекту Range:

myDocument.Range(Start:=n, End:=m)

‘или без ключевых слов Start и End

myDocument.Range(n, m)

  • myDocument – переменная;
  • n – номер точки перед начальным символом;
  • m – номер точки после конечного символа.

Счет точек вставки начинается с нуля. Знаки переноса строки, возврата каретки и табуляции учитываются как отдельные символы. 0 – это для объекта Word.Range виртуальная точка вставки на пустом документе, 1 – точка между первым и вторым символом, 2 – точка между вторым и третьим символом и т.д.

На пустом документе объекту Range можно присвоить только виртуальную точку вставки:
myDocument.Range(Start:=0, End:=0)

Первый символ в документе с текстом:
myDocument.Range(Start:=0, End:=1)

Диапазон с 11 по 20 символ:
myDocument.Range(Start:=10, End:=20)

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

Вставка курсора в начало документа:
myDocument.Range(Start:=0, End:=0).Select

Эта строка вставит курсор между пятым и шестым символами:
myDocument.Range(Start:=5, End:=5).Select

Вставка курсора в конец документа:
myDocument.Range(.Range.Characters.Count - 1, .Range.Characters.Count - 1).Select

Ссылку на объект Range можно присвоить переменной, но при форматировании ее придется каждый раз переопределять и код получится длиннее. Пример присвоения ссылки объектной переменной:

Dim myRange As Word.Range

Set myRange = myDocument.Range(Start:=0, End:=20)

Для Range(Start:=0, End:=20) в документе должно быть как минимум 20 символов.

Однострочные примеры редактирования и форматирования текста

Вставка дополнительного текста внутри имеющегося после заданной точки:
myDocument.Range(Start:=10, End:=10).InsertAfter "Вставляемый текст"

Новый абзац с красной строки (предыдущая строка должна заканчиваться символом возврата каретки или переноса строки):
myDocument.Range.InsertAfter vbTab & "Красная строка"

Присвоение шрифту заданного диапазона зеленого цвета:
myDocument.Range(Start:=10, End:=65).Font.ColorIndex = wdGreen

Меняем обычное начертание на курсив:
myDocument.Range(Start:=10, End:=65).Font.Italic = True

Указываем размер шрифта:
myDocument.Range(Start:=10, End:=65).Font.Size = 22

Применение стандартных стилей:
myDocument.Range(Start:=0, End:=16).Style = "Заголовок 1"

Если вас заинтересуют другие команды форматирования текста, запишите их макрорекордером в VBA Word и примените к объекту Range.

Пример 1
Добавление текста в новый документ без форматирования:

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

Sub Primer1()

On Error GoTo Instr

Dim myWord As New Word.Application, _

myDocument As Word.Document

Set myDocument = myWord.Documents.Add

myWord.Visible = True

With myDocument

.Range.Text = «Заголовок по центру» & vbCr

.Range(Start:=0, End:=19).ParagraphFormat.Alignment _

  = wdAlignParagraphCenter

.Range.InsertAfter _

  vbTab & «Первый абзац с красной строки» & vbCr & _

  «Второй абзац не с красной строки» & vbCr & _

  vbTab & «Третий абзац с красной строки»

End With

Set myDocument = Nothing

Set myWord = Nothing

Exit Sub

Instr:

If Err.Description <> «» Then

  MsgBox «Произошла ошибка: « & Err.Description

End If

If Not myWord Is Nothing Then

  myWord.Quit

  Set myDocument = Nothing

  Set myWord = Nothing

End If

End Sub

Пример 2
Добавление текста в новый документ с форматированием:

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

Sub Primer2()

On Error GoTo Instr

Dim myWord As New Word.Application, _

myDocument As Word.Document

Set myDocument = myWord.Documents.Add

myWord.Visible = True

With myDocument

.Range.Text = «Заголовок по центру» & vbCr

.Range(Start:=0, End:=19).Style = «Заголовок»

.Range(Start:=0, End:=19).ParagraphFormat.Alignment _

  = wdAlignParagraphCenter

.Range.InsertAfter «Заголовок 1 не по центру» & vbCr

.Range(Start:=20, End:=44).Style = «Заголовок 1»

.Range.InsertAfter vbTab & «Шрифт по умолчанию « _

  & «с красной строки» & vbCr

.Range.InsertAfter «Зеленый курсив, размер 20»

.Range(Start:=82, End:=107).Font.Italic = True

.Range(Start:=82, End:=107).Font.Size = 20

.Range(Start:=82, End:=107).Font.ColorIndex = wdGreen

End With

Set myDocument = Nothing

Set myWord = Nothing

Exit Sub

Instr:

If Err.Description <> «» Then

  MsgBox «Произошла ошибка: « & Err.Description

End If

If Not myWord Is Nothing Then

  myWord.Quit

  Set myDocument = Nothing

  Set myWord = Nothing

End If

End Sub

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

Начиная практиковаться в написании кода VBA, очень важно с самого начала выработать хорошие привычки в оформлении кода, чтобы в дальнейшем написанный код было легко читать и понимать, как он работает.

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

Эта статья посвящена комментариям, отступам в коде и переносам строк – элементам, которые делают код аккуратным и понятным.

Содержание

  1. Комментарии в VBA
  2. Отступы в коде VBA
  3. Переносы строк в VBA

Комментарии в VBA

Самое важное для написания аккуратного и понятного кода – чаще оставлять комментарии. Комментарии – это строки в коде, которые исполняют роль заметок и помогают разобраться, какие действия выполняет та или иная часть кода.

Комментарии не участвуют в процессе выполнения программы и не влияют на результат работы макроса. Каждая строка, начинающаяся апострофом (‘), будет считаться в VBA комментарием. Редактор VBA в Excel выделит такую строку зелёным цветом шрифта, чтобы с первого взгляда было понятно, что это комментарий, который не будет выполняться.

Ниже продемонстрировано, как при помощи комментариев поясняется работа простой процедуры Sub:

' процедура Sub для просмотра диапазона ячеек A1-A100 активного
' листа  и поиска ячейки, содержащей переданную процедуре строку 

Sub Find_String(sFindText As String)

   Dim i As Integer   ' переменная типа Integer для цикла 'For'
   Dim iRowNumber As Integer   ' переменная типа Integer для хранения результата 

   iRowNumber = 0

   ' последовательно посматриваем ячейки A1-A100, пока не будет найдено значение 'sFindText'

   For i = 1 To 100
      If Cells(i, 1).Value = sFindText Then

         ' найдено совпадение с переданной строкой
         ' сохраняем номер текущей строки и выходим из цикла
         iRowNumber = i
         Exit For

      End If
   Next i

   ' сообщение во всплывающем окне сообщает пользователю,
   ' найдена ли строка, и если найдена – сообщает номер строки 

   If iRowNumber = 0 Then
      MsgBox "Строка " & sFindText & " не найдена"
   Else
      MsgBox "Строка " & sFindText & " найдена в ячейке A" & iRowNumber
   End If

End Sub

Не расстраивайтесь, если какую-то часть кода, показанного выше, не удалось понять – далее в учебнике мы рассмотрим эту тему подробнее. Цель приведённого примера – продемонстрировать, как при помощи комментариев поясняется каждый блок кода.

Часто программисты ленятся добавлять подробные комментарии к своему коду, но, поверьте, затраченные усилия оправдают себя с избытком! Несколько минут, потраченных на написание понятного комментария, могут сэкономить Вам долгие часы в будущем.

Отступы в коде VBA

Другой приём, делающий написанный код более читаемым – правильно расставлять отступы. В приведённом выше примере видно, что отступ сделан для кода внутри главной процедуры Sub и далее отступ увеличивается для каждого вложенного блока кода. Такие увеличенные отступы помогают понять, где каждый отдельный блок кода начинается и заканчивается.

Переносы строк в VBA

Ещё один способ сделать код более читаемым и облегчить работу с ним – делать переносы и разбивать одну длинную строку кода на несколько коротких. В VBA, чтобы разбить строку, нужно вставить символы » _» (пробел+подчёркивание) непосредственно перед переносом строки. Это сообщает компилятору VBA, что текущая строка кода продолжается на следующей строке.

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

Посмотрите на этот оператор If:

If (index = 1 And sColor1 = "красный") Or (index = 2 And sColor1 = "синий") Or (index = 3 And sColor1 = "зеленый") Or (index = 4 And sColor1 = "коричневый") Then

При помощи переносов строк тот же оператор If может быть записан вот так:

If (index = 1 And sColor1 = "красный") Or _
   (index = 2 And sColor1 = "синий") Or _
   (index = 3 And sColor1 = "зеленый") Or _
   (index = 4 And sColor1 = "коричневый") Then

Если рассмотренный оператор If разбит на четыре строки, то составляющие его блоки c условиями видны гораздо более наглядно. Этот пример иллюстрирует, как аккуратное оформление может сделать код более читаемым и привести в результате к меньшему количеству ошибок и путаницы.

Оцените качество статьи. Нам важно ваше мнение:

Like this post? Please share to your friends:
  • Word vba межстрочный интервал
  • Word vba массив строк
  • Word vba add row and table
  • Word vba activedocument saved
  • Word vba activedocument save