Автор Тема: Word VBA Макросы: Занесение значений в переменные относительно заданного слова.  (Прочитано 60 раз)

Оффлайн Rengame113

  • Посетитель форума
  • Сообщений: 71
В файле есть фраза "Привет   2  (1.1.1) Мой друг и как твои дела".
Поиском в тексте нахожу слово "Привет" и ставлю курсор после этого слова.
Необходимо в переменную a поместить значение 2, а в переменную b значение 1.1.1.
Сложность заключается еще в том, что количество пробелов между словами "Привет" и "Мой" может быть разное.

Оффлайн Администратор

  • Administrator
  • Сообщений: 1641
Re: Занесение значения в переменные
« Ответ #1 : 05 Июнь 2019, 21:19 »
Написал вам письмо на почту с заголовком "Письмо с форума". Написал именно на почту, а не на форум.

Оффлайн Администратор

  • Administrator
  • Сообщений: 1641
Макрос
Sub Макрос()
   
    Dim doc As Document, курсор As Range
    Dim начало As Long, конец As Long
    Dim слово1 As String, слово2 As String
   
   
    ' Присваиваем документу имя "doc", чтобы дальше обращаться к документу по этому имени.
    Set doc = ActiveDocument
   
    ' Поиск нужного фрагмента.
    With doc.Range.Find
        .Text = "Привет"
        If .Execute = True Then
            ' Присваиваем найденному фрагменту имя "курсор".
            Set курсор = .Parent.Duplicate
            ' Превращение курсора в точку вставки и вставка точки вставки после
                ' найденного фрагмента.
                ' Мысленно можно так представить. Когда нашли, то у нас выделенный фрагмент.
                ' Точка вставки - это мигающий курсор.
            курсор.Collapse Direction:=wdCollapseEnd
        End If
    End With
   
    ' Если не найдено.
    If курсор Is Nothing Then
        MsgBox "Не найдно.", vbExclamation
        Exit Sub
    End If
   
    ' Запись первого слова в переменную.
    ПолучитьНачало курсор, начало
    ПолучитьКонец курсор, конец
    слово1 = doc.Range(начало, конец).Text
   
    ' Запись второго слова в переменную.
    ПолучитьНачало курсор, начало
    ПолучитьКонец курсор, конец
    слово2 = doc.Range(начало, конец).Text
   
End Sub

Private Sub ПолучитьНачало(курсор As Range, начало As Long)
    ' Двигаем курсор вправо, пока справа от курсора пробел.
    курсор.MoveWhile Cset:=" ", Count:=wdForward
    начало = курсор.Start
End Sub

Private Sub ПолучитьКонец(курсор As Range, конец As Long)
    ' Двигаем курсор вправо до первого пробела.
    курсор.MoveUntil Cset:=" ", Count:=wdForward
    конец = курсор.Start
End Sub

Оффлайн Rengame113

  • Посетитель форума
  • Сообщений: 71

Оффлайн Администратор

  • Administrator
  • Сообщений: 1641
написал вам письмо на почту (с другим содержимым)