If ActiveDocument.Fields(i).Code Like "*4-4*" Then ' ïîäáåðèòå ïîäõîäÿùèé êðèòåðèé äëÿ îïðåäåëåíèÿ íóæíîãî ïîëÿ
Me.ListBox1.AddItem Left(st, pos) & "ÃÊ ÐÔ"
Прошу Вас загруженный файл URL >> файл к вопросу 177212 загрузить на форум РФ про и выложить на него ссылку
Я правильно понял, что, увы, данным решением в лист бокс загнать название статей например УК РФ, состоящий из 473 статей или Гражданского кодекса РФ у которого статей еще более просто нереально, долго???
Я не понял название статей ВБА черпает из всего документа или из поля вида ТОС ..., если из документа, может можно сделать чтобы черпал из поля, так по моему будет быстрее???
В таком случае подскажите по концовке присланной Вами, то есть по исходному тексту кнопки я не понял, пробовал у меня не получилось, что то делает макрос непонятно что!!!!
Вот этой части я увы не добился
Упростим задачу, например пользователь ввёл куда либо, то есть сообщил программе что хочет посмотреть статью 6, он вводит просто «6»
Программа это воспринимает как «Статья 6 », то есть «Статья » & Значение & « »
Выложите пожалуйста код следующего, чтобы оно работало
открывается документ Гражданский кодекс, в нём ищется поле ТОС, а в нем ссылка на выбранную главу, по которой и осуществляется переход к нужному месту документа (при этом переходе может выделяться заголовок, поэтому дополнительно снимается всякое выделение).
Sub alt177212(ByVal num As String)
Dim st As String
Dim flag As Boolean
Dim i As Long, j As Long
st = "Статья " & num & " "
Application.Documents.Open "Гражданский кодекс.doc", , ReadOnly, , , , , , , , , , False
Application.Documents("Гражданский кодекс.doc").Activate
flag = True
i = 1
While (flag) And (i < ActiveDocument.Fields.Count)
If ActiveDocument.Fields(i).Code Like "*4-4*" Then
For j = 1 To ActiveDocument.Fields(i).Result.Paragraphs.Count
If InStr(ActiveDocument.Fields(i).Result.Paragraphs.Item(j).Range.Text, st) = 1 Then
ActiveDocument.Fields(i).Result.Hyperlinks(j).Follow
Selection.Collapse
flag = False
Exit For
End If
Next j
End If
Wend
Application.Documents("Гражданский кодекс.doc").Activate
End Sub
Sub test()
Call alt177212("16.1")
End Sub
'скажите зачем строка Application.Documents("Гражданский кодекс.doc").Activate два раза в начале макроса и в конце, то есть активировать активированное???
'скажите зачем в строке If ActiveDocument.Fields(i).Code Like "*4-4*" Then есть "*4-4*", как я понял надо "*1-4*"
скажите зачем строка Call alt177212("16.1"), откуда взялась, что должна выполнить???
'скажите зачем i = 1, как же оно сдвинется с места????
Разобрался я в этом вопросе во первых я соорудил конструкцию А = InStr(ActiveDocument.Fields(i).Result.Paragraphs.Item(j).Range.Text, st) 'я сколько не пробовал всё время в любых вариантах = 0, а Вы её сравниваете с = 1
Поэтому хотел спросить, если изменить условие вопроса:
если в документе имеется поле вида ТОС .... 1-4, тогда в его содержимом найти текст с учётом регистра на всякий случай
"Статья " & Значение & " ", узнать какая ссылка найденому и перейти по этой ссылке, так вроде быстрей???
Если да то представьте пожалуйста решение, пожалуйста
Sub alt177212(ByVal title As String)
Dim flag As Boolean
Dim i As Long, j As Long
Application.Documents.Open "D:\Mydoc\RfPro\Гражданский кодекс.doc", , ReadOnly, , , , , , , , , , False
Application.Documents("Гражданский кодекс.doc").Activate
flag = True
i = 1
While (flag) And (i < ActiveDocument.Fields.Count)
If ActiveDocument.Fields(i).Code Like "*1-4*" Then ' подберите подходящий критерий для определения нужного поля
For j = 1 To ActiveDocument.Fields(i).Result.Paragraphs.Count
If InStr(ActiveDocument.Fields(i).Result.Paragraphs.Item(j).Range.Text, title) = 1 Then
ActiveDocument.Fields(i).Result.Hyperlinks(j).Follow
Selection.Collapse
flag = False
Exit For
End If
Next j
End If
If flag Then i = i + 1
Wend
If flag Then MsgBox "Link to " & title & " not found."
End Sub
Sub test()
Call alt177212("Статья 16.1 ")
Call alt177212("Статья 15 ")
Call alt177212("Заголовок первого уровня 1 ")
End Sub
Более я не увидел разницы,
Вы даже не поправили, всё также пишите If InStr(ActiveDocument.Fields(i).Result.Paragraphs.Item(j).Range.Text, title) = 1 Then НЕ БУДЕТ ОНА НИКОГДА РАВНА ЕДИНИЦЕ, ВЕГДА РАВНА НУЛЮ
КАК ПОСТАВИТЬ УСЛОВИЕ, ЕСЛИ ИСКОМАЯ СТАТЬЯ НЕ НАЙДЕНА, ТОГДА ,,,,
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.