Добрый день!
А можно ли как-то макросом выделить все в документе кроме таблиц и рисунков?
Обычно выделять не нужно, а нужно просто что-то сделать с некоторыми элементами.
Что вы планируете сделать с выделенными элементами?
Я хотел назначить стиль "Обычный" всему тексту сразу, но не трогать таблицы и рисунки.
В ворде вообще нельзя выделить несмежные фрагменты.
Можно только сделать макрос, который будет двигаться по всем абзацам в файле. Если абзац не в таблице, если в абзаце нет рисунка "InlineShape", то макрос применит к абзацу стиль "Обычный".
Я понял. Если поможете сделать такой макрос, буду рад.
Макрос
Sub Макрос()
Dim par As Paragraph
'1. Отключение монитора (может это ускорит макрос).
Application.ScreenUpdating = False
'2. Цикл по всем абзацам.
For Each par In ActiveDocument.Paragraphs
'1) Если абзац в таблице.
If par.Range.Information(wdWithInTable) = True Then
GoTo metka_NextPar
End If
'2) Если в абзаце рисунок типа "InlineShape".
If par.Range.InlineShapes.Count <> 0 Then
GoTo metka_NextPar
End If
'3) Применение стиля к абзацу.
par.Range.Style = "Обычный"
metka_NextPar:
Next par
'3. Включение монитора.
Application.ScreenUpdating = True
'4. Сообщение.
MsgBox "Готово.", vbInformation
End Sub
Спасибо Вам! Выручили!
Эта версия быстрее должна работать, т.к. не просматриваются все абзацы таблицы.
Макрос
Sub Макрос()
Dim par As Paragraph
'1. Отключение монитора (может это ускорит макрос).
Application.ScreenUpdating = False
'2. Присваивание имени "par" первому абзацу.
Set par = ActiveDocument.Paragraphs(1)
'3. Цикл по абзацам.
Do
'1) Если абзац в таблице.
If par.Range.Information(wdWithInTable) = True Then
' Присваивание имени "par" абзацу, который находится после таблицы.
Set par = par.Range.Tables(1).Range.Paragraphs.Last.Next
GoTo metka_NextPar
End If
'2) Если в абзаце рисунок типа "InlineShape".
If par.Range.InlineShapes.Count <> 0 Then
' Присваивание имени "par" следующему абзацу.
Set par = par.Next
GoTo metka_NextPar
End If
'3) Применение стиля к абзацу.
par.Range.Style = "Обычный"
Set par = par.Next
metka_NextPar:
'4) Если просмотрены все абзацы.
If par Is Nothing Then
Exit Do
End If
Loop
'4. Включение монитора.
Application.ScreenUpdating = True
'5. Сообщение.
MsgBox "Готово.", vbInformation
End Sub
Спасибо!
Вот только на другом файле не работает, хотя даже и вручную у меня стиль не устанавливается, только очищение формата помогает. Не понимаю, почему так. Помогите разобраться пожалуйста. Пример приложил.
[вложение удалено администратором]
Не знаю, почему так. Возможно брак в ворде. Значит нужно сначала очищать формат, а затем применять нужный стиль.
Это происходит, если к абзацу применён стиль знака. Стили подразделяются на стили абзаца, знака и ещё другие есть.
Почему-то если у абзаца стиль знака, то стиль абзаца нельзя применить.
Как быть? Можно ли доработать макрос так, чтобы он очищал сначала формат, а потом применял стиль?
Макрос
Sub Макрос()
Dim par As Paragraph
'1. Отключение монитора (может это ускорит макрос).
Application.ScreenUpdating = False
'2. Присваивание имени "par" первому абзацу.
Set par = ActiveDocument.Paragraphs(1)
'3. Цикл по абзацам.
Do
'1) Если абзац в таблице.
If par.Range.Information(wdWithInTable) = True Then
' Присваивание имени "par" абзацу, который находится после таблицы.
Set par = par.Range.Tables(1).Range.Paragraphs.Last.Next
GoTo metka_NextPar
End If
'2) Если в абзаце рисунок типа "InlineShape".
If par.Range.InlineShapes.Count <> 0 Then
' Присваивание имени "par" следующему абзацу.
Set par = par.Next
GoTo metka_NextPar
End If
'3) Применение стиля к абзацу.
par.Range.Select
Selection.ClearFormatting
Selection.Style = "Обычный"
Set par = par.Next
metka_NextPar:
'4) Если просмотрены все абзацы.
If par Is Nothing Then
Exit Do
End If
Loop
'4. Включение монитора.
Application.ScreenUpdating = True
'5. Сообщение.
MsgBox "Готово.", vbInformation
End Sub
Да, все получилось. Небольшое изменение в коде, и все работает!
Пытаюсь сам что-то из примеров применять, тем более, что Вы подробно все комментируете, но пока ума и времени не хватает.
Спасибо Вам за терпение и помощь!