1

Тема: Поиск и удаление конкретного графического объекта и внеш. связей

В документе в разных местах содержится множество графических объектов (они еще связаны с одним внешними файлом), которые надо  удалить. Они имеют все одно название. Ручной поиск находит только все графические объекты  (включая и те , которые не надо удалять). Как бы это автоматизировать? Как конкретизировать поиск и удаление объекта вида file.jpg?
И второе: как автоматически удалить внешние связи у оставшихся картинок, чтобы рисунки остались в файле? (макросом в режиме записи не пишется) sad

2

Re: Поиск и удаление конкретного графического объекта и внеш. связей

По второму вопросу читайте заметку Связывание и разрыв связей с графическими объектами в редакторе Word.

По первому вопросу попробуйте такой макрос (быстро переделал из другого макроса с похожей целью):

Sub CopyNamePicture_and_Delete_It()
'Копируем для каждой картинки в буфер имя файла картинки из диалогового окна "Связи"
'и удаляем, если имя картинки file.jpg
Dim oSec As Section
Dim sName As String
Dim sStart As String
Dim oShape As InlineShape
Dim i As Integer
For Each oSec In ActiveDocument.Sections
   For Each oShape In ActiveDocument.InlineShapes
      If oShape.Type = wdInlineShapeLinkedPicture Then  'если рисунок связан
         sName = oShape.Field.Code
         sName = Replace(sName, Chr(34) & " \* MERGEFORMAT ", "")
         sStart = InStrRev(sName, "/")
         sName = Right(sName, Len(sName) - sStart)
         'проверяем имя картинки и если совпадает - удаляем картинку
         If sName = "file.jpg" Then oShape.Delete
      ElseIf oShape.Type = wdInlineShapePicture Then
         i = i + 1
      End If
   Next oShape
Next oSec
End Sub

Отредактировано admin (08.04.2010 14:40:17)

3

Re: Поиск и удаление конкретного графического объекта и внеш. связей

admin пишет:

По второму вопросу читайте заметку Связывание и разрыв связей с графическими объектами в редакторе Word.

Спасибо огромное за пример, утром попробую, по второму вопросу как "вручную" я знаю. А  как через VBA это решить?

4

Re: Поиск и удаление конкретного графического объекта и внеш. связей

А выделить все и нажать комбинацию клавиш CTRL+SHIFT+F9 не помогает?
Знаю точно, что работает с полями и преобразовывает их в обычный текст.. Может быть и с внешними связями это прокатит???

5

Re: Поиск и удаление конкретного графического объекта и внеш. связей

andrkar пишет:

А выделить все и нажать комбинацию клавиш CTRL+SHIFT+F9 не помогает?
Знаю точно, что работает с полями и преобразовывает их в обычный текст.. Может быть и с внешними связями это прокатит???

Мне не нужно, чтобы поля преобразовывались в текст smile

6

Re: Поиск и удаление конкретного графического объекта и внеш. связей

Gorden пишет:

И второе: как автоматически удалить внешние связи у оставшихся картинок, чтобы рисунки остались в файле?

Так предложенный макрос удаляет такие рисунки. Они же были вставлены методом "вставить и связать". Те рисунки, что остались в документе, не имеют связи. Они внедрены в документ.

7

Re: Поиск и удаление конкретного графического объекта и внеш. связей

admin пишет:
Gorden пишет:

И второе: как автоматически удалить внешние связи у оставшихся картинок, чтобы рисунки остались в файле?

Так предложенный макрос удаляет такие рисунки. Они же были вставлены методом "вставить и связать". Те рисунки, что остались в документе, не имеют связи. Они внедрены в документ.

Проверил, у меня не работает, наверно я некорректно сформулировал задачу. file.jpg - это не имя картинки в документе, а это внешний связанный файл, который многократно размещается в разных частях документа. Сам Word наверное как-то по-своему их потом "обзывает". Может как-то подправить Ваш (админ) пример?

8

Re: Поиск и удаление конкретного графического объекта и внеш. связей

file.jpg - это имя файла картинки, которое макрос вытаскивает из связи. То есть, существующее у вас на компе имя файла, а не какое-то абстрактное имя.
Чтобы понять, что именно у вас в документе, надо видеть ваш документ вживую.
Как вы вставляли картинки? Если внедряли без связи, то и связи нет и ничего не удаляется. Если же вставляли со связью, то макрос удаляет такие картинки.
Приложите ваш документ, если можете.

9

Re: Поиск и удаление конкретного графического объекта и внеш. связей

admin пишет:

file.jpg - это имя файла картинки, которое макрос вытаскивает из связи. То есть, существующее у вас на компе имя файла, а не какое-то абстрактное имя.
Чтобы понять, что именно у вас в документе, надо видеть ваш документ вживую.
Как вы вставляли картинки? Если внедряли без связи, то и связи нет и ничего не удаляется. Если же вставляли со связью, то макрос удаляет такие картинки.
Приложите ваш документ, если можете.

Прикладываю файл с связанными картинками, лишняя table.jpg. Это маленький графический маркер над заголовком таблицы (генерируется в другой программе, которая формирует и сам документ).

Post's attachments

Параметры .rar 34.19 Кб, 1 скачиваний с 2010-04-09 

You don't have the permssions to download the attachments of this post.

10

Re: Поиск и удаление конкретного графического объекта и внеш. связей

Нет, так не пойдет. Я вижу одни рамки в документе. В связях указаны лишь названия для картинок, но ни связей, ни хранения картинок в самом документе не обнаружено.
Сделаем по-другому: Кликните на вашей ненужной картинке, перейдите в диалог "Связи" (меню "Правка") и посмотрите, что написано в сведениях об источнике связи (см. скрин ниже):

Поиск и удаление конкретного графического объекта и внеш. связей

11

Re: Поиск и удаление конкретного графического объекта и внеш. связей

У вас внедренные картинки. И стоит задача удалить внедренную картинку, которая имеет имя table.jpg. Вроде бы не сложно, но что-то туплю...

12

Re: Поиск и удаление конкретного графического объекта и внеш. связей

Блин, вот простейший код для вашего случая:

Sub del_shape()
Dim oShape As InlineShape
Dim sec As Section
For Each sec In ActiveDocument.Sections
  For Each oShape In ActiveDocument.InlineShapes
    If oShape.LinkFormat.SourceName = "table.jpg" Then oShape.Delete
  Next oShape
Next sec
End Sub

13

Re: Поиск и удаление конкретного графического объекта и внеш. связей

Спасибо, оно работает, но остаются связи с другими рисунками, которые надо оставить в документе. (наверное, проще разорвать связи со всеми оставшимися?)
Кстати, вручную после разрыва связей, почему-то часть картинок исчезла (которая была во второй половине документа). Существуют какие-либо ограничения по количеству встроенных рисунков? (их несколько сотен)

14

Re: Поиск и удаление конкретного графического объекта и внеш. связей

Устраняется предварительной записью в формате Word-2007, после этого все нормально функционирует, спасибо, тему можно закрыть