Помещение «Выровнять по равным» в макрос - PullRequest
2 голосов
/ 28 апреля 2020

Я работаю над макрокомандой Word, чтобы упростить работу в университете по математике и статистике. По сути, выбор группы уравнений и ее запуск изменяет размер шрифта, высоту строки и форматирует абзац так, как я хочу, чтобы он был общим для всех моих разделов математики / уравнений. Это здорово, но есть кое-что, что мне еще нужно сделать, так сказать, «вручную»: щелкнуть правой кнопкой мыши и выбрать «Align at equals».

Теперь причина, по которой я спрашиваю об этом здесь, а не о суперпользователе, заключается в том, что я думаю, что я исчерпал все способы сделать это на стадии «записи макроса». Я узнал, как получить доступ к меню правой кнопки мыши без щелчка правой кнопкой мыши, и во время записи получил доступ к параметру «выравнивать по равным». Ничего не было записано.

По правде говоря, я бы все равно предпочел закодировать партию, так как это дает мне больше контроля. Итак, я опубликую свой код здесь, и если кто-нибудь знает, какую строку (и) кода мне нужно добавить, чтобы получить его для репликации команды «выравнивать по равным», я был бы чрезвычайно признателен.

Sub Equationiser()
'

' Equationiser Macro

'

'
    With Selection.ParagraphFormat
        .SpaceBefore = 12
        .SpaceAfter = 12
        .LineSpacingRule = wdLineSpace1pt5
    End With
    Selection.Font.Size = 20
End Sub

Таким образом, в идеале, перед разделом «With Selection.ParagraphFormat» должна быть какая-то команда «AlignAtEquals» или что угодно, чтобы при одном нажатии клавиши я смог выровнять все равные, установить высоту строки в 1.5, поместите пробел в 12 точек до и после абзаца и измените размер шрифта на 20.

Моим абсолютным идеалом также будет программный выбор всех блоков уравнений, которые находятся в одном блоке, как "выравнивать по равным "общеизвестно суетливы и привередливы относительно того, когда это исполнится. Это также может означать, что может потребоваться попытка и уловка в зависимости от того, будет ли попытка выполнить «выравнивание по равным», когда она обычно недоступна из меню правой кнопки мыши, ничего не даст или вызовет ошибку.

Буду признателен за любую помощь в этих двух реализациях, но я бы с радостью согласился только на первое.

1 Ответ

2 голосов
/ 28 апреля 2020

Я создал решение, которое должно отвечать вашим потребностям на основе:

  1. Просматривая уравнение, чтобы найти equal -знак.
  2. Получить местоположение that equal -sign
  3. Используйте это местоположение для установки свойства AlignPoint объекта OMath, который является вашим уравнением

Используйте эту ссылку MSDN, если вы хотите узнать больше

Sub Equationiser()
'

' Equationiser Macro

'

'

    Dim equationCounter As Long, charLoc As Long, FormattedTextLoc As Long

    With Selection
        For equationCounter = 1 To .OMaths.Count:
            FormattedTextLoc = 0
            For charLoc = 1 To Len(.OMaths(equationCounter).Range.FormattedText):
                FormattedTextLoc = FormattedTextLoc + Len(.OMaths(equationCounter).Range.FormattedText.Characters(charLoc))
                If .OMaths(equationCounter).Range.FormattedText.Characters(charLoc) = "=" Then
                    .OMaths(equationCounter).AlignPoint = (FormattedTextLoc - 1)
                    Exit For
                End If
            Next charLoc
        Next equationCounter
    End With


    With Selection.ParagraphFormat
        .SpaceBefore = 12
        .SpaceAfter = 12
        .LineSpacingRule = wdLineSpace1pt5
    End With
    Selection.Font.Size = 20
End Sub

Я провел небольшое тестирование, которое, насколько я вижу, должно быть в состоянии управлять несколькими кодовыми блоками, т.е. при выборе 2 кодовых блоков. выровняет все уравнения в первом блоке, а затем выровнит все уравнения во втором блоке (оба блока не выровнены по каждой строке) - - это ваш желаемый результат для вашего запроса: Моим абсолютным идеалом также будет программный выбор всех блоков уравнений, находящихся в одном и том же блоке, поскольку «выравнивание по равным» общеизвестно суетливо и привередливо в отношении того, когда оно будет выполняться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...