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:
But how do you get «Foo», followed by a line break, followed by «Bar», using VBA?
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!
Ksenya100 72 / 64 / 3 Регистрация: 13.05.2010 Сообщений: 349 |
||||
1 |
||||
25.03.2011, 18:20. Показов 17694. Ответов 5 Метки нет (Все метки)
подскажите пожалста!!
и в документе вместо переноса строки (вместо vbCr писала vbCrLf…тож самое) я вообще не очень про это знаю подскажите, что писать надо!!
0 |
72 / 64 / 3 Регистрация: 13.05.2010 Сообщений: 349 |
|
29.03.2011, 18:52 [ТС] |
2 |
как выход — написала на новой строке новую переменную
0 |
Частенько бываю 749 / 330 / 42 Регистрация: 20.06.2007 Сообщений: 854 |
|
30.03.2011, 04:35 |
3 |
Используйте константы VB, например vbNewLine
0 |
72 / 64 / 3 Регистрация: 13.05.2010 Сообщений: 349 |
|
30.03.2011, 17:17 [ТС] |
4 |
Vlanib, попробовала Код название дата //пустая строка, которая мне не нужна а если после docvariable строка содержит текст (опять же в шаблоне) (а именно так мне и надо) то «дата» на новую строку не переносится что делать????
0 |
0 / 0 / 0 Регистрация: 14.11.2017 Сообщений: 7 |
|
10.06.2011, 13:51 |
5 |
Vlanib, попробовала Код название дата //пустая строка, которая мне не нужна а если после docvariable строка содержит текст (опять же в шаблоне) (а именно так мне и надо) то «дата» на новую строку не переносится что делать???? пиши так: и будет тебе счастье…
0 |
72 / 64 / 3 Регистрация: 13.05.2010 Сообщений: 349 |
|
16.01.2012, 10:59 [ТС] |
6 |
Zarubin, да, дейстаительно всё получилось, спасибо !!
0 |
- 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
-
Marked as answer by
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.
- vbNewLine
- vbCrLf
- 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.
Форум программистов Vingrad
Модераторы: Akina
Страницы: (2) Все [1] 2 |
Поиск: |
|
VBA For Word, Не работает перевод строки |
Опции темы |
Гость_Temp |
|
||
Unregistered
|
Делаю так:
мне надо чтоб он слово [address] заменил на две строки, но вместо перевода строки (vbCrLf) вижу два квадратика. Почему? Что мне делать? Может вместо vbCrLf уникод символ какой-нить надо? Помоите пожалуйста! Очень благодарен! |
||
|
|||
Alles |
|
||
Шустрый Профиль
Репутация: 2
|
Wrd.Selection.Find.Execute FindText:=»[address]», ReplaceWith:=»Country» & Chr(13) & Chr(13) & «av. Aseerte, 123» |
||
|
|||
Гость_Temp |
|
||
Unregistered
|
Не работает… Может как-нибудь по другому? |
||
|
|||
-Mikle- |
|
||
Невидимка Vingrad’а Профиль
Репутация: 8
|
Попытался найти ответ и-и-и…. мне это тоже интересно стало… Какой же код символа переноса строки у Word? Кто знает? ——————— Если тебе плюют в спину, значит ты впереди… |
||
|
|||
cardinal |
|
||
Инженер Профиль
Репутация: 19
|
Так все же правильно! Зачем тут два раза Chr(13) я не понял, но это не суть. Код символа переноса строки это 13. ——————— Немецкая оппозиция потребовала упростить натурализацию иммигрантов «Познание бесконечности требует бесконечного времени, а потому работай не работай — все едино». А. и Б. Стругацкие |
||
|
|||
Alles |
|
||
Шустрый Профиль
Репутация: 2
|
Хм… , а может вот так Selection.TypeParagraph вот это точно строку переводит в Ворде! |
||
|
|||
Alles |
|
||
Шустрый Профиль
Репутация: 2
|
Да …… cardinal прав это мой касяк я просто запарился и воткнул туда два 13 я почемуто подумал что … да ладно проехали там должен быть один перевод. Но Ворд действительно себя странно ведет при таком переводе ! у меня например пропадает кнопка в которой прописан перевод , а курсор где стоял там и стоит , а вот с этим Selection.TypeParagraph все ОК.
|
||
|
|||
Alles |
|
||
Шустрый Профиль
Репутация: 2
|
Нет я помоему не прав ! Selection.TypeParagraph в этом блоке не работает ! Selection.Text = «Country» & Chr(13) & «av. Aseerte, 123» вот так все работает ! Ты ищешь слово по документу и заменяешь его ??!! Selection.Find.ClearFormatting End With Может ты вот так попробуешь ? |
||
|
|||
Гость_Temp |
|
||
Unregistered
|
Selection.TypeParagraph — это метод, он знает как переводить строку. |
||
|
|||
Alles |
|
||
Шустрый Профиль
Репутация: 2
|
Да …кому как , но я органически не выношу когда в ворде работают с таблицами и на работе у себя постоянно воюю с персооналом. А вообще системный перевод строки это Chr(13) …… это как соль ! она соленая и все тут !!! |
||
|
|||
Гость_Temp |
|
||
Unregistered
|
В Word сделана Счет-фактура. Для того чтобы разметить в каких областях листа, что находиться, я использую таблицу без видимых границ. Вообще весь файл — это шаблон. Потом, из VB, я работаю с этим шаблоном, т.е. ищу метасимволы, и заменяю их на соответствующие значения из прораммы. Но если метасимвол в последней строке ячейки, то он не хочет переносить строку. В других местах переносит, а тут нет. |
||
|
|||
cardinal |
|
||||
Инженер Профиль
Репутация: 19
|
Да, прикольно… А разница между «software enter» и «hardware enter» оказывается есть.
А в MSDN вообще написано, что нам эта константа не пригодится,
а она пригодилась ——————— Немецкая оппозиция потребовала упростить натурализацию иммигрантов «Познание бесконечности требует бесконечного времени, а потому работай не работай — все едино». А. и Б. Стругацкие |
||||
|
|||||
Гость_Temp |
|
||
Unregistered
|
cardinal, ты молодец!!! Как я не догадался? Спасибо ОГРОМНОЕ за потраченое на меня время! Ты очень помог мне!!! Моя человеческая благодарность тебе! СПА-СИ-БО!!! |
||
|
|||
Гость_Temp |
|
||
Unregistered
|
Также огромное СПАСИБО Alles’у! Который потратил не меньше времени на меня! |
||
|
|||
Alles |
|
||
Шустрый Профиль
Репутация: 2
|
Ну блин …век живи век учись )) cardinal — тебе по рейтингу +10 . |
||
|
|||
Страницы: (2) Все [1] 2 |
|
Правила форума «VB6» | |
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | VB6 | Следующая тема » |
У меня есть строка с номером, которая выглядит так:
«12345678-123»
Я хочу добавить перевод строки (то, что вы получаете, нажав [SHIFT] + [ENTER]) перед тире «-».
Он продолжает добавлять возврат каретки. Это мой код:
sSomeString = Replace(sSomeString, "-", vbLf & Chr(30)) 'Chr(11) does not work ether - Chr(30) is the char for the dash, that does not break
ActiveDocument.Tables(iTableIndex).Cell(.Rows.Count, 4).Range.Text = sSomeString
Я погуглил, и до сих пор везде говорится, что нужно использовать ether vbLf или Chr (11). Любые идеи?
// Задача решена:
Мой код работал некорректно, потому что я не использовал Char (30), поэтому Word создал разрыв строки с символом «-«
1 ответ
Лучший ответ
Word использует вертикальную табуляцию (код символа 11) для разрывов строки. Итак, вам нужно что-то вроде этого:
sSomeString = Replace(sSomeString, "-", Chr(11) & Chr(30))
Я не знаю, делает ли Microsoft это легко доступным. Однако вы всегда можете вставить разрыв строки в Word (Shift + Enter), а затем использовать VBA для проверки кода символа.
1
Zack
8 Авг 2018 в 14:45