Як в Wordграфічно виділити приставку, корінь, суфікс та закінчення у потрібному слові (як на уроках української мови)?
Це питання поставив мені один із підписників на YouTube каналі. І я вирішив записати відео на цю тему. Адже багатьом може стати корисним вміння розбирати слова на частини в програмі MS Word.
Як у Word виділити приставку, корінь, суфікс, закінчення та основу. Відео
Як у Word виділити приставку, корінь, суфікс, закінчення та основу за допомогою макросів та VBA
А саме, створимо:
- Макрос Приставка в Word.
- Макрос Суфікс в Word.
- Макрос Корінь в Word.
- Макрос Закінчення в Word.
Для цього:
- Запустіть MS 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 