1

Тема: Выделение только текста (без таблиц и рисунков)

Добрый день!
Подскажите как можно выделить в документе только текст без выделения таблиц и рисунков?
Документы очень большие, работать с зажатой CTRL не удобно, и постоянно встречаются таблицы, которые не должны выделяться.
Может решение заключается в макросе?

С уважением, Максим.

2

Re: Выделение только текста (без таблиц и рисунков)

а что надо с выделенным делать?

3

Re: Выделение только текста (без таблиц и рисунков)

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

4

Re: Выделение только текста (без таблиц и рисунков)

Меня смутила фраза

как можно выделить в документе только текст без выделения таблиц и рисунков?

5

Re: Выделение только текста (без таблиц и рисунков)

примерно так ---попробуйте сначала на копии

Sub a_130531_1433()
'интервалы для гладкого текста
'выравнивание по ширине
Dim pr As Paragraph
Dim j1                'текст в таблице
Dim s1                'текст параграфа
For Each pr In Word.ActiveDocument.Paragraphs
pr.Range.Select
j1 = Selection.Information(wdWithInTable)
s1 = pr.Range.Text

If Len(s1) > 3 Then
Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify
End If
If j1 = False Then
 With Selection.ParagraphFormat
  .LeftIndent = CentimetersToPoints(0)
  .RightIndent = CentimetersToPoints(0)
  .SpaceBefore = 12
  .SpaceBeforeAuto = False
  .SpaceAfter = 3
  .SpaceAfterAuto = False
  .LineSpacingRule = wdLineSpaceSingle
  .Alignment = wdAlignParagraphJustify
  .WidowControl = True
  .KeepWithNext = False
  .KeepTogether = False
  .PageBreakBefore = False
  .NoLineNumber = False
  .Hyphenation = True
  .FirstLineIndent = CentimetersToPoints(0)
  .OutlineLevel = wdOutlineLevelBodyText
  .CharacterUnitLeftIndent = 0
  .CharacterUnitRightIndent = 0
  .CharacterUnitFirstLineIndent = 0
  .LineUnitBefore = 0
  .LineUnitAfter = 0
  .MirrorIndents = False
  .TextboxTightWrap = wdTightNone
  .AutoAdjustRightIndent = True
  .DisableLineHeightGrid = False
  .FarEastLineBreakControl = True
  .WordWrap = True
  .HangingPunctuation = True
  .HalfWidthPunctuationOnTopOfLine = False
  .AddSpaceBetweenFarEastAndAlpha = True
  .AddSpaceBetweenFarEastAndDigit = True
  .BaseLineAlignment = wdBaselineAlignAuto
 End With
End If

Next pr

End Sub

6

Re: Выделение только текста (без таблиц и рисунков)

Данные в таблицах тоже выравнивает по ширине, чего делать не нужно.

Можно ли просто выделить весь текст, а я сам потом уже вручную нажму выравнивание по ширине?
Потому что мне не всегда надо добавлять интервалы, а выравнивать надо всегда.

7

Re: Выделение только текста (без таблиц и рисунков)

shanemac51, это гениально!

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

Sub a_130531_1433()
'интервалы для гладкого текста
'выравнивание по ширине
Dim pr As Paragraph
Dim j1                'текст в таблице
Dim s1                'текст параграфа
For Each pr In Word.ActiveDocument.Paragraphs
pr.Range.Select
j1 = Selection.Information(wdWithInTable)
s1 = pr.Range.Text

'Отделение таблиц, рисунков и пустых строк
If j1 = False And Len(s1) > 3 Then
        '(Обработка выделенного фрагмента)
        MsgBox ("Обработка выделенного фрагмента")
    
End If
Next pr
End Sub

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

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

8

Re: Выделение только текста (без таблиц и рисунков)

Пометьте таблицы и рисунки или остальной текст, после чего, используйте поиск для выделения всех вхождений того или другого. Способов пометки множество, например:
- изменить уровень абзацев, например на 9
- использовать выделение цветом
...
По-моему, использование уровней довольно удобно. Если же, при оформлении документа, использовались стили, то выделение сильно упрощается.

Макросы под заказ и готовый пакет - mtdmacro.ru

9

Re: Выделение только текста (без таблиц и рисунков)

Вождь пишет:

Пометьте таблицы и рисунки или остальной текст, после чего, используйте поиск для выделения всех вхождений того или другого. Способов пометки множество, например:
- изменить уровень абзацев, например на 9
- использовать выделение цветом
...
По-моему, использование уровней довольно удобно. Если же, при оформлении документа, использовались стили, то выделение сильно упрощается.

То есть Вы предлагаете опять же вручную выделять?
У меня часто бывают тексты по 200 страниц, на каждой второй скажем странице идет небольшая таблица, которую трогать не надо. Получается очень много времени уходит просто на выделение текста.

С уважением, Максим.

10

Re: Выделение только текста (без таблиц и рисунков)

Alex_Gur пишет:

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

Sub a_130531_1433()
'интервалы для гладкого текста
'выравнивание по ширине
Dim pr As Paragraph
Dim j1                'текст в таблице
Dim s1                'текст параграфа
For Each pr In Word.ActiveDocument.Paragraphs
pr.Range.Select
j1 = Selection.Information(wdWithInTable)
s1 = pr.Range.Text

'Отделение таблиц, рисунков и пустых строк
If j1 = False And Len(s1) > 3 Then
        '(Обработка выделенного фрагмента)
        MsgBox ("Обработка выделенного фрагмента")
    
End If
Next pr
End Sub

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

Выскакивает окошко "Обработка выделенного фрагмента", выделяется следующий фрагмент, потом снова окошко, но форматирование текста не меняется.

11

Re: Выделение только текста (без таблиц и рисунков)

удалите строку
MsgBox ("Обработка выделенного фрагмента")

12

Re: Выделение только текста (без таблиц и рисунков)

Sub a_130531_1433()
'интервалы для гладкого текста
'выравнивание по ширине
Dim pr As Paragraph
Dim j1                'текст в таблице
Dim s1                'текст параграфа
For Each pr In Word.ActiveDocument.Paragraphs
pr.Range.Select
j1 = Selection.Information(wdWithInTable)
s1 = pr.Range.Text
If j1 = False and  Len(s1) > 3  Then

 With Selection.ParagraphFormat
  .Alignment = wdAlignParagraphJustify
  .LeftIndent = CentimetersToPoints(0)
  .RightIndent = CentimetersToPoints(0)
  .SpaceBefore = 12
  .SpaceBeforeAuto = False
  .SpaceAfter = 3
  .SpaceAfterAuto = False
  .LineSpacingRule = wdLineSpaceSingle
  .Alignment = wdAlignParagraphJustify
  .WidowControl = True
  .KeepWithNext = False
  .KeepTogether = False
  .PageBreakBefore = False
  .NoLineNumber = False
  .Hyphenation = True
  .FirstLineIndent = CentimetersToPoints(0)
  .OutlineLevel = wdOutlineLevelBodyText
  .CharacterUnitLeftIndent = 0
  .CharacterUnitRightIndent = 0
  .CharacterUnitFirstLineIndent = 0
  .LineUnitBefore = 0
  .LineUnitAfter = 0
  .MirrorIndents = False
  .TextboxTightWrap = wdTightNone
  .AutoAdjustRightIndent = True
  .DisableLineHeightGrid = False
  .FarEastLineBreakControl = True
  .WordWrap = True
  .HangingPunctuation = True
  .HalfWidthPunctuationOnTopOfLine = False
  .AddSpaceBetweenFarEastAndAlpha = True
  .AddSpaceBetweenFarEastAndDigit = True
  .BaseLineAlignment = wdBaselineAlignAuto
 End With
End If

Next pr

End Sub

13

Re: Выделение только текста (без таблиц и рисунков)

Благодарю, работает.

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

14

Re: Выделение только текста (без таблиц и рисунков)

убери строки

.SpaceBefore = 12
  .SpaceBeforeAuto = False
  .SpaceAfter = 3
  .SpaceAfterAu

15

Re: Выделение только текста (без таблиц и рисунков)

Благодарю!

Все замечательно работает!