Консультация № 177351
19.03.2010, 17:32
35.77 руб.
0 44 1
Здравствуйте уважаемые эксперты, подскажите, пожалуйста, в следующем
как среди всех ссылок в документе удалить ссылки, которые ссылаются не на имеющуюся в документе закладку, на папки, на документы, но есть исключение нельзя удалять ссылки на файл D:\Рабочая папка\ГК РФ.doc
И это должно выполняться не зависимо как поставили ссылку через Вставка-Ссылка-Перекрестная ссылка... или Вставка-Гиперссылка-Связать с: местом в документе. Удалять нужно только ссылку а текст, видный на экране удалять не надо

Спасибо Эндрю

Обсуждение

Неизвестный
21.03.2010, 19:50
общий
Andrew Kovalchuk:
Вы понимаете, что я второй раз задаю один и тот же вопрос, а ответа верного нет
Раз я их получаю, их получат и другие, значит их надо исправить, помоему так
Вы разве не согласны с этим:
если у Вас цикл, с количеством LinksCount = ActiveDocument.Fields.Count, тогда очень целесообразно в ранней стадии отсечь лишние поля
которые не следует обрабатывать, вроде так If ActiveDocument.Fields(i).Type = 3 Or ActiveDocument.Fields(i).Type = 88 Then
Неизвестный
21.03.2010, 21:30
общий
Ципихович Эндрю:
Цитата: 238244
Вы понимаете, что я второй раз задаю один и тот же вопрос, а ответа верного нет Раз я их получаю, их получат и другие, значит их надо исправить, помоему так
Довольно сложно исправить ошибку которую я не могу воспроизвести.
Цитата: 238244
если у Вас цикл, с количеством LinksCount = ActiveDocument.Fields.Count, тогда очень целесообразно в ранней стадии отсечь лишние поля которые не следует обрабатывать, вроде так If ActiveDocument.Fields(i).Type = 3 Or ActiveDocument.Fields(i).Type = 88 Then
Это действительно приблизит решение в сторону условия задачи - не зависимо как поставили ссылку через Вставка-Ссылка-Перекрестная ссылка... или Вставка-Гиперссылка-Связать с: местом в документе, но сильно сузит область применения такого решения другими пользователями (то есть решение потеряет общность имеющуюся в данный момент).
Неизвестный
22.03.2010, 05:07
общий
Andrew Kovalchuk:
Что её там воспроизводить ошибку, откройте чистый документ, набирите абракадабру выделите её нажмите Вставить гиперссылку
Я лично поставил на первую попавшуюся папку и на строке If Not (Bookmarks.Exists(bm)) Then получил рун тайм эррор 424
У Вас так?
Вы говорите: Это действительно приблизит решение в сторону условия задачи
Вот и хорошо внесите поправки, я же Вам говорю "вроде так", то есть точно не уверен
А Вы уважаемый эксперт, внесите поправки
Неизвестный
22.03.2010, 14:58
общий
Ципихович Эндрю:
Цитата: 238244
Что её там воспроизводить ошибку, откройте чистый документ, набирите абракадабру выделите её нажмите Вставить гиперссылку Я лично поставил на первую попавшуюся папку и на строке If Not (Bookmarks.Exists(bm)) Then получил рун тайм эррор 424 У Вас так?
У меня не так, именно поэтому я и написал - "Довольно сложно исправить ошибку которую я не могу воспроизвести". Я вижу абсолютно рабочий код.
Цитата: 238244
Вот и хорошо внесите поправки
Ниже представлен код с нужными вам исправлениями:
Код:
Sub test_q177351()
Dim bm As String
Dim re As Object

Set re = CreateObject("VBScript.RegExp")
With re
.Global = True
.Pattern = "(\s+\\[dfhlmnoprtw])|(\s?HYPERLINK)|(\s?REF)|(\s?\x22)|(\x22\s?)"
' Шаблон для получения из ссылки поставленной способом REF или HYPERLINK целевого значения
' описывает флаги - (\s+\\[dfhlmnoprtw])
' тип ссылки - (\s?HYPERLINK)|(\s?REF)
' открывающие и закрывающие кавычки - (\s?\x22)|(\x22\s?)
' После зачистки по шаблону целесообразно использование функции Trim$ для удаления лишних лидирующих и завершающих пробелов
End With

LinksCount = ActiveDocument.Fields.Count
For i = LinksCount To 1 Step -1
If (ActiveDocument.Fields(i).Type = 3) Or (ActiveDocument.Fields(i).Type = 88) Then
If Not (ActiveDocument.Fields(i).Code.Text Like "*D:\\Рабочая папка\\ГК РФ.doc*") Then
bm = Trim$(re.Replace(ActiveDocument.Fields(i).Code.Text, ""))
If Not (Bookmarks.Exists(bm)) Then
ActiveDocument.Fields(i).Unlink
End If
End If
End If
Next
End Sub
Неизвестный
22.03.2010, 16:50
общий
Andrew Kovalchuk:
Сейчас только, что проверил всё то же на строке
If Not (Bookmarks.Exists(bm)) Then
получаю ту же ошибку рун тайм эррор 424
Как я понял вы не получаете, почему так происходит мысли есть???
Мистика какая то!!!!
Ну попробуем ещё раз возьмите файл по ссылке https://rfpro.ru/upload/1930
Открыв его нажмите Альт Эф 11 в компилятор вставьте Ваш код сегодня, 14:58
И прогоните его, если не получите на строке
If Not (Bookmarks.Exists(bm)) Then
ошибку рун тайм эррор 424, тогда я уже не знаю, у Вас мысли тогда есть???
Неизвестный
22.03.2010, 19:51
общий
Ципихович Эндрю:
Цитата: 238244
Ну попробуем ещё раз возьмите файл по ссылке https://rfpro.ru/upload/1930
Открыв его нажмите Альт Эф 11 в компилятор вставьте Ваш код сегодня, 14:58
И прогоните его, если не получите на строке
If Not (Bookmarks.Exists(bm)) Then
ошибку рун тайм эррор 424, тогда я уже не знаю
В результате прогона макроса отлинковалась ссылка на несуществующий каталог "C:\Documents and Settings\user1\Мои документы\catalog".
Макрос отработал без ошибок как в обычном режиме, так и в режиме пошагового (F8) выполнения.
Неизвестный
22.03.2010, 20:51
общий
Andrew Kovalchuk:
Странно, а почему же у меня не так, есть мысли???
Скажите предназначение строки If Not (Bookmarks.Exists(bm)) Then

'на мой взгляд алгоритм решения задачи такой, цикл по количеству полей
'если поле подпадает под гиперссылку то есть содержит тип вроде 88 или 3
'если в коде поля есть ":" но в коде нет D рабочая папка ..., тогда
'выясняем это поле является какой по счёту ссылкой и не выделяя её удаляем
'ActiveDocument.Hyperlinks(х).Delete
'если нет ":" тогда выясняем это поле является какой по счёту ссылкой, выясняем имя ссылки
'Имя_ссылки = ActiveDocument.Hyperlinks(х).Name, имя ссылки и есть закладка
'если таковой в документе нет тогда не выделяя ссылку удаляем
'ActiveDocument.Hyperlinks(1).Name <> ActiveDocument.Fields(1).Code

Как Вам эта мысль не проще???

Неизвестный
23.03.2010, 00:27
общий
Ципихович Эндрю:
Цитата: 238244
Странно, а почему же у меня не так, есть мысли???
Вирусы? Битая система? Криво установленный офис? Неполный набор системных библиотек? Что-то еще?
Цитата: 238244
Скажите предназначение строки If Not (Bookmarks.Exists(bm)) Then
Функция в скобках возвращает значение True если закладка в документе есть и False в противном случае.
Цитата: 238244
Как Вам эта мысль не проще???
Мне не проще. Кто-то может иметь альтернативное мнение.
Неизвестный
23.03.2010, 05:43
общий
Andrew Kovalchuk:
На всякий случай спршу под словами "отлинковалась ссылка "
Вы имеете в виду удалилась ссылка?
А почему бы вместо строки If Not (Bookmarks.Exists(bm)) Then не поставвить If ActiveDocument.Bookmarks.Exists(bm) = True Then ????
Такая конструкция на моём компьютере с симптомами
Вирусы? Битая система? Криво установленный офис? Неполный набор системных библиотек?
РАБОТАЕТ
Неизвестный
23.03.2010, 11:06
общий
Andrew Kovalchuk:
'Мой компьютер имеющий
'Вирусы? Битая система? Криво установленный офис? Неполный набор системных библиотек?
'видимо не воспринимает слово Not я заменил
'If Not (Bookmarks.Exists(bm)) Then
'на
'If ActiveDocument.Bookmarks.Exists(bm) = False
'а также строку
'If Not (ActiveDocument.Fields(i).Code.Text Like "*D:\\Рабочая папка\\ГК РФ.doc*") Then
'на
'If ActiveDocument.Fields(i).Code.Text Like "*D:\\Рабочая папка\\ГК РФ.doc*" = False Then
'и всё пошло на лад, но увы не всё, Вы забыли, что есть поля где Ваш макрос bm определяет как "Номер \*Charformat", а такой закладки конечно не может быть
'что далее???

Неизвестный
23.03.2010, 14:41
общий
Ципихович Эндрю:
Цитата: 238244
видимо не воспринимает слово Not
Это довольно подозрительно, так как эта команда является основной (и довольно часто используемой) логической операцией.
Цитата: 238244
Вы забыли, что есть поля где Ваш макрос bm определяет как "Номер \*Charformat", а такой закладки конечно не может быть
Смысл приведенного я не осилил.
Цитата: 238244
А почему бы вместо строки If Not (Bookmarks.Exists(bm)) Then не поставвить If ActiveDocument.Bookmarks.Exists(bm) = True Then ????
Хотя бы потому, что это противоположные условия - я узнаЮ ОТСУТСТВУЕТ ли ссылка, а вы убеждаетесь что ссылка ПРИСУТСТВУЕТ. К тому же предлагаемый вами вариант выполняет на одну операцию сравнения больше. Функция Exists() возвращает логическое значение - зачем же его еще с чем-то сравнивать? Буквально трактуя используемые в конструкции слова мой вариант звучит как "Если не существует закладки то...", а ваш - "Если на вопрос существует ли закладка будет получен ответ, который выглядит как ДА, то..."
Неизвестный
23.03.2010, 16:32
общий
Andrew Kovalchuk:
Я говорю
Вы забыли, что есть поля где Ваш макрос bm определяет как "Номер \*Charformat", а такой закладки конечно не может быть
Смысл приведенного я не осилил
Посняю полей у меня море например {REF Номер \*Charformat}
Вот при таком поле в Вашем случае макрос bm определяет как "Номер \*Charformat", а такой закладки конечно не может быть
То есть надо что то делать!!!
То есть Вам надо это предусмотреть!!!
Неизвестный
23.03.2010, 16:59
общий
Ципихович Эндрю:
Цитата: 238244
Посняю полей у меня море например {REF Номер \*Charformat}
Вот при таком поле в Вашем случае макрос bm определяет как "Номер \*Charformat", а такой закладки конечно не может быть
...
То есть Вам надо это предусмотреть!!!
Если я правильно понял, то ссылки приведенного вида, как, к примеру {REF 2 \h} или { REF 35 \p} не являются валидными - так как закладки должны начинаться с латинской буквы. Но даже если вам удалось поставить поле со ссылкой на такую закладку, то разбор ссылки все равно приводит к цифровому значение - для приведенных примеров это будут значения "2" и "35" соответственно - которые интерпретируются в данном контексте как строки, но никак не "2 \h" и "35 \p".
Цитата: 238244
То есть надо что то делать!!!
Согласен. Нужно ставить корректные закладки.
Неизвестный
23.03.2010, 19:19
общий
Andrew Kovalchuk:
Закладки должны начинаться с латинской буквы
Нужно ставить корректные закладки
То есть это камень в мой огород, с какой хочу с такой буквы с такой и начинаю, а Вы видели закладки начинающиеся с цифры, а я видел, и это нормально
Вот код, который русскоговорящий юзер написал для русскоговорящих юзеров, бесплатно, в нём главно, что по условию задачи строго ссылается на тот документ
D:\Рабочая папка\ГК РФ.doc
который нужно, без Лайков и это тоже плюс, а у Вас он был бы на диске F и Вы бы пролетели


Количество_полей = ActiveDocument.Fields.Count
If Количество_полей = 0 Then Exit Sub
Количество_ссылок = ActiveDocument.Hyperlinks.Count
If Количество_ссылок = 0 Then Exit Sub
Удалено_ссылок = 0
Сcылка_номер = 0
For i = 1 To Количество_полей
Код_поля = Trim(ActiveDocument.Fields(i - Удалено_ссылок).Code)
If Код_поля Like "*HYPERLINK*" Then
Сcылка_номер = Сcылка_номер + 1
Имя_ссылки_закладки = ActiveDocument.Hyperlinks(Сcылка_номер - Удалено_ссылок).Name
If Имя_ссылки_закладки Like "*:*" And Имя_ссылки_закладки <> "D:\Рабочая папка\ГК РФ.doc" Then
ActiveDocument.Hyperlinks(Сcылка_номер).Delete
Удалено_ссылок = Удалено_ссылок + 1
ElseIf ActiveDocument.Bookmarks.Exists(Имя_ссылки_закладки) = False Then
ActiveDocument.Hyperlinks(Сcылка_номер - Удалено_ссылок).Delete
Удалено_ссылок = Удалено_ссылок + 1
End If
End If
Next i
If Удалено_ссылок <> 0 Then MsgBox$ "В документе всего " & Сcылка_номер & " ссылок, удалено " & Удалено_ссылок & " пустых ссылок", vbOKOnly, "ВНИМАНИЕ": Exit Sub
Неизвестный
23.03.2010, 20:13
общий
Andrew Kovalchuk:
Конечно же первые две строчки можно выбросить, записать так
If ActiveDocument.Fields.Count = 0 Or ActiveDocument.Hyperlinks.Count = 0 Then Exit Sub
Четвёртую строку If Количество_ссылок = 0 Then Exit Sub выбрасывем
И самое главное ошибся, строку ActiveDocument.Hyperlinks(Сcылка_номер).Delete
надо записать как ActiveDocument.Hyperlinks(Сcылка_номер - Удалено_ссылок).Delete
Теперь всё

Неизвестный
23.03.2010, 23:45
общий
Ципихович Эндрю:
Цитата: 238244
Закладки должны начинаться с латинской буквы Нужно ставить корректные закладки То есть это камень в мой огород, с какой хочу с такой буквы с такой и начинаю, а Вы видели закладки начинающиеся с цифры, а я видел, и это нормально
С какой хотите с такой и начинайте. Это же ваш Ворд и ваши правила именования закладок, но только производитель программного продукта рекомендует другое.
Цитата: 238244
Вот код, который русскоговорящий юзер написал для русскоговорящих юзеров, бесплатно, в нём главно, что по условию задачи строго ссылается на тот документ D:\Рабочая папка\ГК РФ.doc который нужно, без Лайков и это тоже плюс, а у Вас он был бы на диске F и Вы бы пролетели
Оценку качества кода оставлю людям более компетентным, чем я. Но по части пролета в случае расположения файла на диске F представленный код ничем не отличается от моего. Вычисление индекса требуемой закладки мы уже обсуждали. Обработка ссылок типа REF уже не нужна? В условии задачи, помнится говорилось, что
это должно выполняться не зависимо как поставили ссылку через Вставка-Ссылка-Перекрестная ссылка... или Вставка-Гиперссылка-Связать с: местом в документе.
Неизвестный
24.03.2010, 05:26
общий
Andrew Kovalchuk:
По поводу Вставка-Ссылка-Перекрестная ссылка
я говорил по инерции думал, раз люди ставят, надо предусмотреть, потом куда то потерялся Ваш файл где говорится о Вещем Олеге
скачать снова, дома Вин рара нет
решил сам поставить такую же ссылку
мучился мучился
там выбираешь закладка, есть возможность поставить на текст закладки, номер страницы, номер абзаца, номер абзаца (краткий), номер абзаца (полный), выше\ниже
Увы я не знаю, кто этим пользуется, я лично нет, и не буду пользоваться, поэтому оставил без внимания
Когда говорил это должно выполняться не зависимо как поставили ссылку через Вставка-Ссылка-Перекрестная ссылка не знал об этом
Извиняюсь на счёт он был бы на диске F и Вы бы пролетели
НЕТ НЕ ПРОЛЕТЕЛИ, НЕ УВИДЕЛ D:
На счёт того что там производитель рекомендует
Ему на юзеров безразлично, к их мнению он не прислушивается, и получает обратную реакцию, пусть не выпускает русский Ворд
К тому же о начале с английской буквы там ничего не сказано
Вот зашёл по Вашей ссылке:
Имя закладки должно начинаться с буквы; в нем могут использоваться цифры, но не должно быть пробелов. Если требуется разделить слова в имени закладки, пользуйтесь знаком подчеркивания, например «Первый_заголовок».



Неизвестный
24.03.2010, 14:09
общий
Ципихович Эндрю:
Цитата: 299564
полей у меня море например {REF Номер \*Charformat}
Я никогда не встречал конструкцию \*Charformat в качестве флага. Правильно ли я понимаю, что приведенный текст поля можно вставить в документ и использовать в таком виде - {REF Номер \*Charformat}? Если НЕТ, пришлите текст поля, который следует обрабатывать. На самом деле в регулярном выражении уже перечислены все флаги, которые могут использоваться для ссылок типа REF и HYPERLINK.
Неизвестный
24.03.2010, 16:32
общий
Andrew Kovalchuk:
В чистом документе пишите абракадабру выделяете её часть, ставите закладку с именем Номер
ниже пишите поле {REF Номер \*Charformat}, слову РЭФ выделив его присваиваете например 18 шрифт, затем щёлкаете по нём, обновить и увидете слово точно такое же какое в Ранже закладки Номер 18 шрифтом, за эти действия отвечает *Charformat
Неизвестный
24.03.2010, 17:32
общий
Ципихович Эндрю:
Цитата: 238244
обновить и увидете слово точно такое же какое в Ранже закладки Номер 18 шрифтом
Не закладки, а типа поля. Формат первой буквы типа поля определяет формат значения поля.
Цитата: 238244
поле {REF Номер \*Charformat}
Оказывается есть три класса значений ключа \*, посему вносим косметические изменения в регулярное выражение: вместо (\s+\\[dfhlmnoprtw]) пишем (\s+\\(([dfhlmnoprtw])|(\*\s*(\w)+))).
Неизвестный
24.03.2010, 18:30
общий
Andrew Kovalchuk:
В связи с Вашими изменениями получилось, я также вставил переменную ФФ
Dim bm As String
Dim re As Object

Set re = CreateObject("VBScript.RegExp")
With re
.Global = True
.Pattern = "(\s+\\(([dfhlmnoprtw])|(\*\s*(\w)+)))|(\s?HYPERLINK)|(\s?REF)|(\s?\x22)|(\x22\s?)"
' шаблон для получения из ссылки поставленной способом REF или HYPERLINK целевого значения
' описывает флаги - (\s+\\[dfhlmnoprtw])
' тип ссылки - (\s?HYPERLINK)|(\s?REF)
' открывающие и закрывающие кавычки - (\s?\x22)|(\x22\s?)
' после зачистки по шаблону целесообразно использование функции Trim$ для удаления лишних лидирующих и завершающих пробелов
End With

LinksCount = ActiveDocument.Fields.Count
For i = LinksCount To 1 Step -1
If (ActiveDocument.Fields(i).Type = 3) Or (ActiveDocument.Fields(i).Type = 88) Then
ActiveDocument.Fields(i).Select 'временно выделяем для наглядности
ФФ = ActiveDocument.Fields(i).Code.Text 'временно узнаём для наглядности
If ActiveDocument.Fields(i).Code.Text Like "*D:\\Рабочая папка\\ГК РФ.doc*" = False Then
bm = Trim$(re.Replace(ActiveDocument.Fields(i).Code.Text, ""))
If ActiveDocument.Bookmarks.Exists(bm) = False Then
ActiveDocument.Fields(i).Unlink
End If
End If
End If
Next

Вот Вам конкретная ситуация
ФФ = REF Номер \*Charformat
тогда
bm = Номер, если такой закладки нет тогда нужно удалить
Как бы не так, кто вам сказал, что это поле является ссылкой
Опять пролёт
Неизвестный
24.03.2010, 19:31
общий
Ципихович Эндрю:
Цитата: 238244
Вот Вам конкретная ситуация
ФФ = REF Номер \*Charformat
тогда
bm = Номер, если такой закладки нет тогда нужно удалить
Как бы не так, кто вам сказал, что это поле является ссылкой
Опять пролёт
Без флага \h это поле ссылкой действительно не является. Однако, с другой стороны, это поле ссылается на несуществующую закладку и значит без потери функциональности может быть заменено на текстовое значение.
Неизвестный
24.03.2010, 20:07
общий
Andrew Kovalchuk:
Тем не менеее это не ссылка и всё этим сказано, не удалять
Смысл задачи заключается в том, чтобы щёлкнув по ссылке пользователя куда либо отпрвили и не было сообщений всевозможных и то что направит в начало документа
Неизвестный
25.03.2010, 01:07
общий
Ципихович Эндрю:
Цитата: 238244
Тем не менеее это не ссылка и всё этим сказано, не удалять
Цикл может выглядеть так:
Код:
For i = LinksCount To 1 Step -1
If Not (ActiveDocument.Fields(i).Code.Text Like "*D:\\Рабочая папка\\ГК РФ.doc*") Then
If ((ActiveDocument.Fields(i).Type = wdFieldRef) And (InStr(ActiveDocument.Fields(i).Code.Text, " \h")) > 0) Or _
(ActiveDocument.Fields(i).Type = wdFieldHyperlink) Then
bm = Trim$(re.Replace(ActiveDocument.Fields(i).Code.Text, ""))
If Not (Bookmarks.Exists(bm)) Then
ActiveDocument.Fields(i).Unlink
End If
End If
End If
Next
Неизвестный
25.03.2010, 05:44
общий
Andrew Kovalchuk:
А всё что выше цикла
Dim bm As String
Dim re As Object

Set re = CreateObject("VBScript.RegExp")
With re
.Global = True
.Pattern = "(\s+\\(([dfhlmnoprtw])|(\*\s*(\w)+)))|(\s?HYPERLINK)|(\s?REF)|(\s?\x22)|(\x22\s?)"
' шаблон для получения из ссылки поставленной способом REF или HYPERLINK целевого значения
' описывает флаги - (\s+\\[dfhlmnoprtw])
' тип ссылки - (\s?HYPERLINK)|(\s?REF)
' открывающие и закрывающие кавычки - (\s?\x22)|(\x22\s?)
' после зачистки по шаблону целесообразно использование функции Trim$ для удаления лишних лидирующих и завершающих пробелов
End With
ОСТАВЛЯТЬ??????
Неизвестный
25.03.2010, 09:34
общий
Andrew Kovalchuk:
Если только поле начинающееся на REF и заканчивающееся h может быть
ссылкой???, почему бы Вам не поставить условие об этом и другие поля
начинающиеся на REF не трогать????
Неизвестный
25.03.2010, 14:48
общий
Ципихович Эндрю:
Цитата: 238244
А всё что выше цикла ... ОСТАВЛЯТЬ??????
Конечно оставлять. В цикле же обработка происходит с использованием регулярного выражения, которое в приведенном куске настраивается.
Цитата: 238244
Если только поле начинающееся на REF и заканчивающееся h может быть ссылкой???, почему бы Вам не поставить условие об этом и другие поля начинающиеся на REF не трогать????
Не заканчивающееся на h, а имеющее такой ключик. То что вы предлагаете уже делается благодаря условию - [i]If ((ActiveDocument.Fields(i).Type = wdFieldRef) And (InStr(ActiveDocument.Fields(i).Code.Text, " \h")) > 0)[/i] - читается как "Если тип текущего поля REF и присутствует ключ \h".
Неизвестный
25.03.2010, 20:44
общий
Andrew Kovalchuk:
И чтобы уже до конца всё решить, извиняюсь забыл учесть, что бывают случаи, что в документе появляются ссылки на
"mailto:"
"http://"
Их я бы не хотел удалять как тогда изменить Ваш код???
А также бывают случаи, что имеется ссылка в документе зрительно смотришь на неё наведя курсор, отображаются реальные документы
А поинтерисуешся через ВБА кодом этого поля вылезают в нём знаки вида %20, отчего они происходят я представляю, от копирования части документов из одного файла в другой, а как при помощи ВБА код этого поля привести в вид который можно проверить существут ли такой документ If Len(Dir$ Код ) =0 Then
Вот эту переменную Код предварительно как привести в вид приемлемый для ВБА???

Неизвестный
25.03.2010, 23:23
общий
Ципихович Эндрю:
Цитата: 238244
И чтобы уже до конца всё решить, извиняюсь забыл учесть, что бывают случаи, что в документе появляются ссылки на "mailto:" "http://" Их я бы не хотел удалять как тогда изменить Ваш код???
Условие может выглядеть так
Код:
If ((ActiveDocument.Fields(i).Type = wdFieldRef) And (InStr(ActiveDocument.Fields(i).Code.Text, " \h")) > 0) Or _
(ActiveDocument.Fields(i).Type = wdFieldHyperlink) And _
(InStr(ActiveDocument.Fields(i).Code.Text, "mailto:") = 0) And _
(InStr(ActiveDocument.Fields(i).Code.Text, "http://") = 0) Then
Цитата: 299564
А также бывают случаи, что имеется ссылка в документе зрительно смотришь на неё наведя курсор, отображаются реальные документы
А поинтерисуешся через ВБА кодом этого поля вылезают в нём знаки вида %20, отчего они происходят я представляю, от копирования части документов из одного файла в другой, а как при помощи ВБА код этого поля привести в вид который можно проверить существут ли такой документ If Len(Dir$ Код ) =0 Then
Вот эту переменную Код предварительно как привести в вид приемлемый для ВБА???
%20 - это код обычного символа пробела. Думаю, что все можно сделать. Но сдается мне, это уже совсем другая история.
Неизвестный
31.03.2010, 05:02
общий
Andrew Kovalchuk:
Хотел спросить вопрос на форуме № 177488 для Вас трудности составляет или не видели его???
Форма ответа