You could use a function such as a slightly modified version of the one on my web site https://www.gmayor.com/word_vba_examples_2.htm e.g.

Sub FillForm()
Dim oCtrl As Control
Dim oRng As Range
Dim m_oFrm As UserForm1


    Set m_oFrm = New UserForm1
    With m_oFrm
        .Show
        For Each oCtrl In .Controls
            If TypeName(oCtrl) = "TextBox" Then
                Select Case oCtrl.Name
                    Case Is = "txtKeys"
                        'Set a range to the content control
                        Set oRng = ActiveDocument.SelectContentControlsByTitle("Keys").Item(1).Range
                        'Fill the range with the content of the text box
                        oRng.Text = oCtrl.Text
                        'Convert the range to true title case
                        TrueTitleCase oRng
                        'set the range to the last word in the control
                        Set oRng = ActiveDocument.SelectContentControlsByTitle("Keys").Item(1).Range.Words.Last
                        'make that last word upper case
                        oRng.Case = wdUpperCase
                    Case Else
                End Select
            End If
        Next oCtrl
    End With
    Unload m_oFrm
lbl_Exit:
    Set oCtrl = Nothing
    Set oRng = Nothing
    Set m_oFrm = Nothing
    Exit Sub
End Sub


Public Sub TrueTitleCase(oRng As Range)
'Graham Mayor - https://www.gmayor.com - Last updated - 24 Mar 2021 
Dim vFindText As Variant
Dim vReplText As Variant
Dim i As Long
Dim k As Long
Dim m As Long
    'count the characters in the selected string
    k = Len(oRng)
    If k < 1 Then
        'If none, then no string is selected
        'so warn the user
        MsgBox "Select the text first!", vbOKOnly, "No text selected"
        Exit Sub    'and quit the macro
    End If
    'format the selected string as title case
    oRng.Case = wdTitleWord
    'list the exceptions to look for in an array
    vFindText = Array("A", "An", "And", "As", "At", "But", "By", "For", _
                      "If", "In", "Of", "On", "Or", "The", "To", "With")
    'list their replacements in a matching array
    vReplText = Array("a", "an", "and", "as", "at", "but", "by", "for", _
                      "if", "in", "of", "on", "or", "the", "to", "with")
    With oRng
        With .Find
            'replace items in the first list
            'with the corresponding items from the second
            .ClearFormatting
            .Replacement.ClearFormatting
            .Forward = True
            .Wrap = wdFindStop
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Format = True
            .MatchCase = True
            For i = LBound(vFindText) To UBound(vFindText)
                .Text = vFindText(i)
                .Replacement.Text = vReplText(i)
                .Execute Replace:=wdReplaceAll
            Next i
        End With
        'Reduce the range of the selected text
        'to encompass only the first character
        .MoveEnd Unit:=wdCharacter, Count:=-Len(oRng) + 1
        'format that character as upper case
        .Case = wdUpperCase
        'restore the selected text to its original length
        .MoveEnd Unit:=wdCharacter, Count:=k
        'and check to see if the string contains a colon
        If InStr(1, oRng, ":") > 0 Then
            'If it does note the position of the character
            'after the first colon
            m = InStr(1, oRng, ":") + 1
            'and set that as the new start of the selected text
            .MoveStart wdCharacter, m
            'set the end of the selected text to include
            'one extra character
            .MoveEnd Unit:=wdCharacter, Count:=-Len(oRng) + 1
            'format that character as upper case
            .Case = wdUpperCase
        End If
    End With
lbl_Exit:
    Exit Sub
End Sub