Автор Тема: Word VBA Макрос: вставка символов в слово с определенным интервалом  (Прочитано 2572 раз)

Оффлайн Monocle

  • Посетитель форума
  • Сообщений: 15
Здравствуйте, имеется макрос:

Sub bb()
Dim i&
With ActiveDocument
    For i = .Range.End - 1 To 1 Step -1
        If .Range(i - 1, i).Font.Size = 14 Then .Range(i, i).InsertAfter "*"
    Next
End With
End Sub

В каждом слове, после каждой буквы ставится знак *.
Помогите сделать так: знак вставляется не после каждой буквы, а 2-3 раза в слове и не в каждом слове, а, например, с интервалом через 3 слова. Спасибо!

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

  • Administrator
  • Сообщений: 2162
С понятием "слово" не всё так просто, как может показаться на первый взгляд.
В vba-ворде есть объект "word", но сюда входят и запятые. Кроме того, могут быть сложные слова с дефисом. В этом случае для ворда это три слова: слово до дефиса, дефис и слово после дефиса.

Примерный принцип такой:
Макрос
Sub макрос()

    Dim word As Range, counter As Long
    Dim i As Long, ii As Long
   
    For i = ActiveDocument.Words.Count To 1 Step -4
        ' Сброс переменной.
        counter = 0
        ' Присваиваем слову имя "word", чтобы удобнее писать код.
        Set word = ActiveDocument.Words(i)
        ' Цикл по буквам слова.
        For ii = word.Characters.Count To 1 Step -1
            If word.Characters(ii).Font.Size = 14 Then
                word.Characters(ii).InsertAfter "*"
                counter = counter + 1
                If counter > 3 Then
                    Exit For
                End If
            End If
        Next ii
    Next i

End Sub

Оффлайн Monocle

  • Посетитель форума
  • Сообщений: 15
Да, это то что нужно, спасибо большое!

Оффлайн Посетитель 29.10.2022

  • Посетитель форума
  • Сообщений: 12
Добрый день! Подскажите, а можно сделать так чтоб символ "*" вставлялся через каждое слово в середину слова?

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

  • Administrator
  • Сообщений: 2162
В этой теме специфическое задание. У вас тоже нужно вставлять после символа, у которого размер 14 пунктов? Создайте лучше новую тему.