Макрос виділення приставки, кореня, суфікса та закінчення в Word

Як в Wordграфічно виділити приставку, корінь, суфікс та закінчення у потрібному слові (як на уроках української мови)?

Це питання поставив мені один із підписників на YouTube каналі. І я вирішив записати відео на цю тему. Адже багатьом може стати корисним вміння розбирати слова на частини в програмі MS Word.

Як у Word виділити приставку, корінь, суфікс, закінчення та основу. Відео

Як у Word виділити приставку, корінь, суфікс, закінчення та основу за допомогою макросів та VBA

А саме, створимо:

  1. Макрос Приставка в Word.
  2. Макрос Суфікс в Word.
  3. Макрос Корінь в Word.
  4. Макрос Закінчення в Word.

Для цього:

  • Запустіть MS Word.
  • Перейдіть на вкладку Розробник. Якщо цієї вкладки немає, то потрібно її увімкнути, обравши Файл → Параметри → Налаштування стрічки і позначте галочкою пункт Розробник.

Розробник Word

  • На вкладці Розробник натисніть кнопку Записати макрос.
  • У вікні, що з'явиться введіть будь-яке ім'я макросу і натисніть ОК.

Запис макроса Word

  • Натисніть Зупинити запис.

Запис макроса Word

  • На вкладці Розробник натисніть на іконку Макроси.

Макроси Word

  • У вікні, що з'явиться оберіть той макрос, який ви створили раніше і натисніть Змінити.

Макроси Word

  • У вікні що з'явиться виділіть код поточного макросу і замініть його на вказаний нижче код VBA для виділення приставки, кореня, суфікса та закінчення в Word.

VBA Word

Будьте уважні. Вам потрібно замінити тільки той код, який відноситься до створеного раніше макросу. Якщо у вас є інші макроси в Word, їх код видаляти не потрібно.

Код VBA для виділення приставки, кореня, суфікса та закінчення в Word

Option Explicit

Enum LexicalUnits
    luRoot = 0
    luPrefix = 1
    luPostfix = 2
    luEndfix = 3
End Enum

'Вставить корень
Sub корень()
    Call AddLexicalUnit(luRoot)
End Sub

'Вставить приставку
Sub приставка()
    Call AddLexicalUnit(luPrefix)
End Sub

'Вставить суффикс
Sub суффикс()
    Call AddLexicalUnit(luPostfix)
End Sub

'Вставить окончание
Sub окончание()
    Call AddLexicalUnit(luEndfix)
End Sub

Sub AddLexicalUnit(LexUnit As LexicalUnits)
    Dim nL As Single, nT As Single, nW As Single, nH As Long
    Const HEIGHT As Single = 3
'    ActiveWindow.GetPoint 0, 0, 0, nH, Selection.Range
    nL = Selection.Information(wdHorizontalPositionRelativeToPage)
    nT = Selection.Information(wdVerticalPositionRelativeToPage) + 2
    Selection.Collapse wdCollapseEnd
    nW = Selection.Information(wdHorizontalPositionRelativeToPage) - nL
    Select Case LexUnit
        Case luRoot 'Корень
            With ActiveDocument.Shapes.BuildFreeform(msoEditingAuto, CSng(nL), CSng(nT))
                .AddNodes msoSegmentCurve, msoEditingAuto, CSng(nL + nW / 2 - 1), CSng(nT - HEIGHT)
                .AddNodes msoSegmentCurve, msoEditingAuto, CSng(nL + nW - 2), CSng(nT)
                .ConvertToShape.Select
            End With
        Case luPrefix 'Приставка
            With ActiveDocument.Shapes.BuildFreeform(msoEditingAuto, CSng(nL), CSng(nT))
                .AddNodes msoSegmentLine, msoEditingAuto, CSng(nL + nW - 2), CSng(nT)
                .AddNodes msoSegmentLine, msoEditingAuto, CSng(nL + nW - 2), CSng(nT + 2 * HEIGHT / 3)
                .ConvertToShape.Select
            End With
        Case luPostfix 'Суффикс
            With ActiveDocument.Shapes.BuildFreeform(msoEditingAuto, CSng(nL), CSng(nT))
                .AddNodes msoSegmentLine, msoEditingAuto, CSng(nL + nW / 2 - 1), CSng(nT - HEIGHT)
                .AddNodes msoSegmentLine, msoEditingAuto, CSng(nL + nW - 2), CSng(nT)
                .ConvertToShape.Select
            End With
        Case luEndfix 'Окончание
            nH = Selection.Font.Size
            With ActiveDocument.Shapes.AddShape(msoShapeRectangle, nL, nT, nW, CSng(nH))
                .Fill.Visible = msoFalse
                .Select
            End With
    End Select
    Selection.ShapeRange.WrapFormat.Type = 3
End Sub

Main Menu