Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2012, 17:01   #1
mav1984
 
Регистрация: 16.09.2012
Сообщений: 7
По умолчанию [VBA Word] Удаление замещающего текста и гиперссылок

Здравствуйте! Только-только начал осваивать макросы, пока еще многого не понимаю.

У меня простая задачка, которую я раньше делал вручную, а теперь додумался, что можно написать макрос:
1. Удалить во всех картинках (и отформатированных в тексте, и не в тексте (вокруг рамки, за текстом, перед текстом)) замещающий текст
2. Удалить во всех картинках (также по-разному расположенных) гиперссылки (если есть)

Пока что при помощи поиска "додумался" до удаления замещающего текста:
Код:
Sub Макрос()

ActiveDocument.Content.ShapeRange.AlternativeText = ""

Dim i As Integer
For i = 0 To ActiveDocument.InlineShapes.Count
ActiveDocument.InlineShapes(i).AlternativeText = ""
Next i
    
End Sub
А вот с гиперссылками вообще не получается. Пробовал через рекордер макросов, но столкнулся с проблемой, что если гиперссылки на картинке вообще нет, то выдается ошибка (то есть нужно проверить наличие гиперссылки).

Последний раз редактировалось mav1984; 16.09.2012 в 17:22. Причина: один вопрос разрешен
mav1984 вне форума Ответить с цитированием
Старый 16.09.2012, 17:07   #2
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

в самом макросе снять выделение со всех картинок, тогда строку
ActiveDocument.Shapes.SelectAll в утиль
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.09.2012, 17:08   #3
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

топик надо в ветке по профилю задавать
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.09.2012, 17:13   #4
mav1984
 
Регистрация: 16.09.2012
Сообщений: 7
По умолчанию

В соответствии с правилами форума разместил ее в разделе новичков. Если есть модераторы, то прошу перенести.

Если удалить строку ActiveDocument.Shapes.SelectAll, то он требует наличие объекта для следующей строки: Selection.ShapeRange.AlternativeTex t = ""

А как ее по-другому записать, пока не представляю.
mav1984 вне форума Ответить с цитированием
Старый 16.09.2012, 17:21   #5
mav1984
 
Регистрация: 16.09.2012
Сообщений: 7
По умолчанию

О, нашел ответ на вопрос по выделению:

ActiveDocument.Content.ShapeRange.A lternativeText = ""

А вопрос по гиперссылкам остается.
mav1984 вне форума Ответить с цитированием
Старый 16.09.2012, 17:54   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

под себя делайте

Среди всех ссылок в документе удалить ссылки, которые ссылаются не на имеющуюся в документе закладку. Но есть исключение нельзя удалять ссылки на файл D:\Рабочая папка\ и D:\Рабочая папка\
Код:
    Dim link As Field
    Dim bm As String
    Dim start As Long
    Dim finish As Long
    For Each link In ActiveDocument.Fields
If Not (link.Code.Text Like "* D:\Рабочая папка*") Or Not (link.Code.Text Like "* D:\Рабочая папка*") Then
            start = InStr(2, link.Code.Text, " ")
            finish = InStr(start + 1, link.Code.Text, " ")
            bm = Mid$(link.Code.Text, start + 1, finish - start - 1)
            If Not (Bookmarks.Exists(bm)) Then
                link.Delete
            End If
        End If
Next
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.09.2012, 18:39   #7
mav1984
 
Регистрация: 16.09.2012
Сообщений: 7
По умолчанию

Честно говоря, не понял, как мне под себя этот код настроить.

Мне нужно удалить гиперссылки только из картинок, а в тексте оставить.

Нашел еще вот такой код:
Код:
Sub RemoveHyperlinks()
Dim oHyp As Hyperlink
  Do
    For Each oHyp In ActiveDocument.Hyperlinks
      oHyp.Range.Delete
    Next
  Loop While ActiveDocument.Hyperlinks.Count <> 0
End Sub
Каким образом в данном коде можно указать только на рисунки?
mav1984 вне форума Ответить с цитированием
Старый 16.09.2012, 19:41   #8
mav1984
 
Регистрация: 16.09.2012
Сообщений: 7
По умолчанию

Немного по-корявому, но тем не менее, работает:

Удаляет все гиперссылки из рисунков!
Код:
Sub Макрос1()

Dim PicTest As Shape

For Each PicTest In ActiveDocument.Shapes
On Error Resume Next
     PicTest.Select
     Selection.ShapeRange.Hyperlink.Delete
Next
 
Dim i As Integer

For i = 0 To ActiveDocument.InlineShapes.Count
On Error Resume Next
ActiveDocument.InlineShapes(i).Hyperlink.Delete
Next i

End Sub
mav1984 вне форума Ответить с цитированием
Старый 16.09.2012, 20:38   #9
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

цикл должен быть
Код:
For i = 0 To ActiveDocument.Hyperlink.Count
If ActiveDocument.Hyperlink(i).тут думать надо Then Hyperlink(i).Delete
Next i
и не пользоваться Selection......
зачем выделять?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.09.2012, 21:16   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Тему перенес.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA WORD При наборе текста, автоматическая вставка изображения fearnewstyle Microsoft Office Word 1 13.11.2011 08:05
Удаление текста из документа Word a_n_n_a Общие вопросы Delphi 3 01.08.2011 14:43
Vba excel Удаление Текста HelperAwM Microsoft Office Excel 4 19.06.2010 23:55
Удаление всех гиперссылок БуреВестник Microsoft Office Word 6 16.10.2009 10:05
удаление гиперссылок Gambler Microsoft Office Word 0 30.10.2006 23:23