Макрос: Выделение жирным каждое третье слово в тексте

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Aslin
Сообщения: 15
Зарегистрирован: 22 янв 2018, 10:02

30 янв 2018, 09:20

Здравствуйте, подскажите как создать макрос в ворде, который бы выделял каждое третье слово жирным. Знаю, что там должно быть количество шагов равное 3, но как грамотно написать не знаю, постоянно выдает ошибку
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

30 янв 2018, 22:19

Код: Выделить всё

Sub Test()
    With ActiveDocument.Words
         Dim iCount&
         For iCount = 1 To .Count Step 3
             .Item(iCount).Font.Bold = True
         Next
    End With
End Sub

Код: Выделить всё

Sub Test2()
    Dim objWord As Word.Range, iCount&
    For Each objWord In ActiveDocument.Words
        If iCount Mod 3 = 0 Then
           objWord.Font.Bold = True
        End If
        iCount = iCount + 1
    Next
End Sub
P.S. Рекомендую ознакомиться с тем, что Word считает Word(словом), ибо запятая это тоже слово :) если Вы с этим не согласны, то можете добавить доп.проверку
Aslin
Сообщения: 15
Зарегистрирован: 22 янв 2018, 10:02

10 фев 2018, 21:51

Здравствуйте, данные макросы выделяют первые слова в тройке, а надо наоборот чтобы выделял третье слово, а не первое
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

11 фев 2018, 01:08

В чём проблема? Неужели нельзя взять первый вариант и начать цикл не с 1, а с 3
Aslin
Сообщения: 15
Зарегистрирован: 22 янв 2018, 10:02

11 фев 2018, 08:30

Спасибо, разобралась. Еще один вопрос какая функция в макросе добавляет исключение? Чтобы макрос не считал за слово знаки пунктуации?
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

11 фев 2018, 11:50

Можете использовать что-то вроде этого :

Код: Выделить всё

Sub Test3()
    Dim objWord As Word.Range, iCount&: iCount = 1
    
    Const chars = "*[.,;:!?(){}" & vbCr & "]*"
    
    For Each objWord In ActiveDocument.Words
        If Not objWord.Text Like chars Then
           If iCount Mod 3 = 0 Then objWord.Font.Bold = True
           iCount = iCount + 1
        End If
    Next
End Sub
Здесь перечислены не все символы, которые Word воспринимает как слово. Впрочем, можно поступить и проще, считать словом то, что содержит минимум 2 символа. Это позволит обойтись без перечисления ненужных символов, правда такой подход отсечёт и с а у я
Ответить