1

Тема: Массовое выделение элементов докумена (таблиц, рисунков)

Доброго времени суток!
Имеется документ, элементы которого (таблицы или рисунки) необходимо форматировать определенным образом. Для этого нужно массовое их выделение с последующим применением различных стилей. Пожалуйста помогите с макросами, который позволил бы выделить отдельно рисунки (и отдельно таблицы). Благодарю!

2

Re: Массовое выделение элементов докумена (таблиц, рисунков)

MsgBox$ "Количество таблиц в документе: " & ActiveDocument.Tables.Count
'выделить первую таблицу активного документа
ActiveDocument.Tables(1).Select

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

Count_рисунков = ActiveDocument.Shapes.Count
Count_рамок = ActiveDocument.Frames.Count

Выделять как таблицы

Отредактировано Ципихович Эндрю (28.02.2011 17:43:49)

3

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Ципихович Эндрю пишет:
MsgBox$ "Количество таблиц в документе: " & ActiveDocument.Tables.Count
'выделить первую таблицу активного документа
ActiveDocument.Tables(1).Select

Я не программирую на VBA, поэтому  предложение может  оказаться неверным.
Подсчитать кол-во таблиц в документе   
CountTab=ActiveDocument.Tables.Count
и потом в цикле их выделить 
for i=1 to CountTab
ActiveDocument.Tables(i).Select
end

4

Re: Массовое выделение элементов докумена (таблиц, рисунков)

да всё верно, смотря что автору нужно

5

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Всем спасибо!

ЮВ пишет:
Ципихович Эндрю пишет:
MsgBox$ "Количество таблиц в документе: " & ActiveDocument.Tables.Count
'выделить первую таблицу активного документа
ActiveDocument.Tables(1).Select

Я не программирую на VBA, поэтому  предложение может  оказаться неверным.
Подсчитать кол-во таблиц в документе   
CountTab=ActiveDocument.Tables.Count
и потом в цикле их выделить 
for i=1 to CountTab
ActiveDocument.Tables(i).Select
end

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

Я думал, что можно одним макросом выделить все таблицы (т.е. это как при нажатом ctrl выделяю мышью таблицы в документе) и отформатировать их по своему усмотрению.

Отредактировано 1st (01.03.2011 19:27:36)

6

Re: Массовое выделение элементов докумена (таблиц, рисунков)

1st пишет:

Я думал, что можно одним макросом выделить все таблицы (т.е. при нажатом ctrl выделяю мышью таблицы в документе) и отформатировать их по своему усмотрению.


Если нажать Ctrl (программно) и запустить макрос - множественное выделение не выполняется?

7

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Не парьтесь:
Я думал, что можно одним макросом выделить все таблицы (т.е. при нажатом ctrl выделяю мышью таблицы в документе) и отформатировать их по своему усмотрению.
Макрос это сделает если у Вас не 600-700 таблиц легко просто будет делать циклом или при условии, что эти таблицы идут следом одна за другой всё можно их выделить сразу все

8

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Ципихович Эндрю пишет:

Не парьтесь:

Честно говоря, так и не понял - проблема решена или нет?

9

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Если изначально таблицы одного стиля, то делаем так:

ActiveDocument.Tables(1).Select
Application.Run "SelectSimilarFormatting"
Selection.Style = "Простая таблица 1"

Рисунки "в тексте" (InLineShapes) выбрать можно только по одному, а все рисунки "перед текстом" (Shapes) выделяем так:

ActiveDocument.Range.ShapeRange.Select

Для массовой обработки последних не обязательно их выбирать, можно и так:

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

10

Re: Массовое выделение элементов докумена (таблиц, рисунков)

ЮВ пишет:

Честно говоря, так и не понял - проблема решена или нет?

Привет всем!
Вопрос актуален! Разбираюсь - читаю литературу по VBA. Может не понятен вопрос?
Имеется документ с множеством таблиц и рисунков. Мне нужно все таблицы в документе выровнять по ширине, текст в таблице по центру и т.д., т.е. применить определенный стиль для всех таблиц в документе. Искать, выделять и применять стиль для каждой?  Очень большой документ, более 300 таблиц. Та же проблема и с рисунками.

Отредактировано 1st (03.03.2011 17:25:57)

11

Re: Массовое выделение элементов докумена (таблиц, рисунков)

1st пишет:

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

Как пример: Как выровнять все таблицы по ширине окна.

12

Re: Массовое выделение элементов докумена (таблиц, рисунков)

День добрый.
Для меня сейчас актуален подвопрос текущего топика, а именно обработка параметра spacing для таблиц.
Так сложилось, что текст получен из html и все таблицы пришли с нулевым значением интервала между ячейками. На практике это приводит к появлению двойных границ каждой ячейки в таблице. Дабы этого избежать, параметр "Интервал между ячейками" можно отключить вручную. Однако... Таблиц то море.. А в макрос я могу записать только конкретное число большее либо равное нулю..
Есть ли возможность в VBA "снять галочку" с параметра spacing для каждой страницы?
Пример кода приложу, дабы не быть голословным (кусочно из этой темы):

Sub Tables()
'
'
'
Dim i As Integer
Dim Acount As Integer
Acount = ActiveDocument.Tables.count
For i = 1 To Acount
ActiveDocument.Tables(i).Spacing = 0 'приводит к появлению сдвоенных границ :(
Next
End Sub

13

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Попробовал на чистом документе -> Создал произвольную таблицу (по умолчанию параметр/галочка Интервалы между ячейками отключен) -> Запустил процесс создания макроса -> Сначала активировал интервалы, потом снял.
Автоматический код привожу ниже:

Sub a_111()
'
'
'
    With Selection.Tables(1)
        .TopPadding = CentimetersToPoints(0)
        .BottomPadding = CentimetersToPoints(0)
        .LeftPadding = CentimetersToPoints(0.19)
        .RightPadding = CentimetersToPoints(0.19)
        .Spacing = CentimetersToPoints(0.04)
        .AllowPageBreaks = True
        .AllowAutoFit = True
    End With
    With Selection.Tables(1)
        .TopPadding = CentimetersToPoints(0)
        .BottomPadding = CentimetersToPoints(0)
        .LeftPadding = CentimetersToPoints(0.19)
        .RightPadding = CentimetersToPoints(0.19)
        .Spacing = 0
        .AllowPageBreaks = True
        .AllowAutoFit = True
    End With
End Sub

Как видно, единственным отличаем является параметр "Spacing". Однако при выставлении его в 0 = параметр не деактивируется, а выставляется в нулевое значение ==> сдвоенные границы, что визуально сильно "карявит" документ..

14

Re: Массовое выделение элементов докумена (таблиц, рисунков)

не пойму кинули в документ 1 таблицу
сделали
ActiveDocument.Tables(1).Spacing = 10
вернули
ActiveDocument.Tables(1).Spacing = 0
Всё делается, всё возвращается, а про ту что с нета скачана ничего не знаю, там могут бытьтакие чудеса

15

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Рисунки "в тексте" (InLineShapes) выбрать можно только по одному

А как можно такие рисунки отделить и применить к ним форматирование?
Если на примере, то есть в документе такие рисунки: одни крупные к ним идет подпись из названия. Другие мелкие, размещены внутри текста. Нужно крупные рисунки разместить по центру, а мелкие не трогать.

16

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Можно отобрать, например, по высоте или ширине

Dim oInShp As InlineShape
For Each oInShp In ActiveDocument.InlineShapes
  If oInShp.Height > 100 Then
    oInShp.Range.Paragraphs.First.Alignment = wdAlignParagraphCenter
  End If
Next
Лучше день потерять — потом за пять минут долететь!

17

Re: Массовое выделение элементов докумена (таблиц, рисунков)

Спасибо большое!
А как можно тогда с таблицами поступить? Есть в документе два вида таблиц. Первый вид: имеет шапку сбоку, второй шапку сверху. Нужно второй вид вид таблиц изменить: 1) шапку по центру дать 2) Внутри весь текст 12 шрифт задать.