1

У меня есть текстовый документ с 500+ встроенными изображениями.

Для каждого изображения в документе я хочу получить «Описание» из раздела «Альтернативный текст» изображения (когда вы щелкаете правой кнопкой мыши на изображении> свойства> альтернативный текст, вы можете увидеть это)

Затем я хочу поместить этот альтернативный текст ниже изображения как обычный текст.

Есть ли способ сделать это с помощью макроса VB в слове?

Я использую Microsoft Word 2010 на Windows 7.

2 ответа2

3

Макрос Word VBA для вставки альтернативного текста под изображениями

Sub InsertAltTextBelowImages()

    For i = ActiveDocument.Shapes.Count To 1 Step -1
        If ActiveDocument.Shapes(i).Type = msoPicture Then
            ActiveDocument.Shapes(i).ConvertToInlineShape
        End If
    Next i

    For Each img In ActiveDocument.InlineShapes
        If img.Type = wdInlineShapePicture Then
            img.Range.InsertAfter (vbCrLf & img.AlternativeText & vbCrLf)
        End If
    Next

End Sub

Две проблемы

  1. Word знает два типа изображений: встроенные изображения и плавающие изображения. Плавающие изображения не имеют свойства range, поэтому Word не знает, к какому абзацу относится изображение. Вы можете конвертировать (ConvertToInlineShape) плавающие изображения в обычные встроенные изображения. Но это испортит ваш макет

  2. Вы не можете просто вставить текст "ниже", как вы сказали. Что делать, если под картинкой нет линии? Вы должны вставить как минимум два разрыва страницы (vbCrLf) вместе с альтернативным текстом. Это портит ваш макет Word снова


Посмотрите мои скриншоты сравнения о том, как мой макрос влияет на макет

До

После

1

Макрос vb может делать все, что может сделать пользователь, но это было бы огромной задачей, запрограммировав это.

Я бы предложил экспортировать ваш текстовый документ в HTML-документ. Затем вы можете отредактировать его с помощью текстового редактора, такого как notepad++, и использовать умные действия поиска / замены с помощью регулярных выражений, чтобы изменить каждое изображение за один раз. Затем вы можете сохранить его снова и загрузить обратно документ html in word, чтобы преобразовать его обратно в текстовый документ.

Бьюсь об заклад, это заставит вас делать работу в 10 раз быстрее, чем написать макрос, который это сделает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .