2

Я использую автозамену Math в Word 2007, в том числе в основной текст. У меня "Использовать математические правила автозамены вне математических областей" отмечен в параметрах автозамены. Есть ли способ вызвать автозамену без перемещения курсора?

Вариант использования: я пытаюсь набрать, например, 50±10% . Если я 50\pm5% и нажму пробел, ничего не произойдет. Чтобы получить ± я должен набрать 50\pm<space><backspace>5% . backspace состоит в том, чтобы избавиться от места, которое вызвало автозаполнение \pm . Аналогично, если я нажму Enter вместо space , курсор переместится на следующую строку. Я пытаюсь не возвращаться назад к добавленному пробелу.

Я пытался нажать F3, используя TypeText в макросе VBA и вставляя неразрывный пробел нулевой ширины; ни один не вызвал автозаполнение. Я также безуспешно искал Google и MSDN, включая объект OMathAutoCorrect .

Я могу придумать два варианта, ни один из которых мне не нравится.

  1. Используйте AutoHock для отправки <space><backspace> . Я не использую AHK для чего-либо еще и хотел бы избежать запуска еще одного процесса, если это возможно.

  2. Поиск OMathAutoCorrect.Entries и ручная замена. Я беспокоюсь о скорости, хотя.

Спасибо за любые идеи!

1 ответ1

0

Ну, я узнал, OMathAutoCorrect.Entries будут индексироваться по введенному вами тексту, поэтому вы сможете быстро искать элементы. Я написал следующий макрос и назначил его сочетаниям клавиш. Вот на тот случай, если это поможет кому-то еще!

Public Sub ConvertMathAutoCorrectEntryStartingWithBackslash()
' Convert an autocorrect entry beginning with a backslash, and don't move the cursor.
    Dim st As Long, en As Long
    Dim needle As String
    Dim fontname As String

    ' Find the text to replace
    st = Selection.Start
    en = Selection.End
    If st = en Then
        'Nothing selected.  Assume we're at the end of a just-typed abbreviation.
        Selection.MoveStartUntil "\", wdBackward    'leaves the cursor just before the \
        Selection.MoveStart wdCharacter, -1         'grab the \, too
    End If
    needle = Selection.Text
    fontname = Selection.Characters(1).Font.Name

    ' Find the replacement
    Dim entry As OMathAutoCorrectEntry

    Set entry = Nothing
    On Error Resume Next
    Set entry = Application.OMathAutoCorrect.entries.Item(needle)
    On Error GoTo 0

    If Not (entry Is Nothing) Then
        ' A match - make the replacement
        Selection.Delete
        Selection.InsertAfter entry.Value
        Selection.Collapse wdCollapseEnd
        Selection.Font.Name = fontname  ' So the font doesn't carry over from the math
        Exit Sub
    End If

    ' We didn't find it - put the cursor back
    Selection.Start = st
    Selection.End = en
End Sub 'ConvertMathAutoCorrectEntryStartingWithBackslash

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .