1

Как я могу получить Excel 2013, чтобы автоматически исправить математику? Например, измените \int на ∫. Я знаю, как сделать это для одного символа, но есть ли способ заставить Excel распознавать все математические автокоррекции?

1 ответ1

3

Microsoft (в их бесконечной мудрости) не имеет Application.OMathAutoCorrect.UseOutsideOMath = True доступен в параметрах Excel ► Проверка ► Параметры автозамены ► Автозамена Math или непосредственно через VBA в Excel. ИМХО, это, вероятно, связано с ограничениями Excel на отображение истинных символов Unicode и некоторых обычных символов ASCII, таких как галочка (или одинарная кавычка или ASCII 039), которые используются для других целей. Если что-то не может быть сделано полностью и работать через несколько дополнительных языковых пакетов, то весь процесс, вероятно, был отложен до принятия решения. Когда Excel находится в своем математическом редакторе, происходит обмен другим интерфейсом, и все символы могут отображаться правильно.

Я подготовил полный список символов Math автозамены на моем OneDrive здесь для вас , чтобы посмотреть на: Excel_2013_OMathAutoCorrectEntries.xlsx. Есть некоторые очень заметные упущения, такие как \grave и \bar которые Excel либо автокорректирует, либо интерпретирует для других целей, но большинство символов просто отлично.

Это просто означает, что мы должны обойти ограничения и принять любые недостатки. В то время как использование VBA в Excel объекта OMathAutoCorrect несколько затруднено , в Word - нет. Если мы возьмем все записи из коллекции OMathAutoCorrectEntries и преобразуем их как дополнения к стандартной коллекции AutoCorrectEntries , то они будут доступны во всех программах Office, включая Excel. Конечные результаты в каждой из программ Office могут отличаться.

Закройте Excel и все другие приложения Office, затем откройте Word для нового пустого документа и нажмите Alt+F11 чтобы войти в VBE. Используйте раскрывающиеся меню, чтобы вставить ► модуль (или Alt+I, M). Вставьте следующее в новую панель под названием что-то вроде Normal - NewMacros (код) или Normal - Module1 (код).

Sub Normalize_Math_AutoCorrect_Entries()
    Dim acm As Long, ac As Long, yn As Long, cACEs As AutoCorrectEntries
    Set cACEs = Application.AutoCorrect.Entries
    With Application.OMathAutoCorrect
        .UseOutsideOMath = False    'no longer necessary
        For acm = 1 To .Entries.Count
            yn = vbYes
            For ac = 1 To cACEs.Count
                If cACEs(ac).Name = .Entries(acm).Name Then
                     yn = MsgBox(cACEs(ac).Name & " is currently assigned to " & cACEs(ac).Value & _
                       Chr(46) & Chr(10) & Chr(10) & "Are you sure you want to replace it?", _
                       vbYesNo + vbQuestion, "Duplication")
                    If yn = vbYes Then cACEs(ac).Delete
                    Exit For
                End If
            Next ac
            If yn = vbYes Then _
                Application.AutoCorrect.Entries.Add Name:=.Entries(acm).Name, Value:=.Entries(acm).Value
        Next acm
    End With
    Set cACEs = Nothing
End Sub

После этого нажмите Alt+Q чтобы вернуться к пустому документу. Нажмите Alt+F8 чтобы открыть диалоговое окно «Макросы» и запустить макрос. Если встречается повторяющаяся запись, процесс будет приостановлен, и вам будет представлено что-то вроде следующего.

                Автозамена подтверждения перезаписи

Обратите внимание, что я выбрал тот, который действительно может быть отображен. Многие из символов Unicode будут представлены только знаком ? поскольку стандартное окно сообщения VBA не может отображать Unicode. Это не означает, что символ будет добавлен неправильно. Как и в Excel, это ограничение экрана.

Принять или отклонить перезапись. Все, что еще не найдено в стандартной коллекции AutoCorrectEntries будет добавлено без запроса.

Когда этот процесс завершится, все записи OMathAutoCorrect будут нормализованы как стандартные записи AutoCorrect . Если вы откроете Excel, они должны быть доступны немедленно. Вот до и после ввода пробела, который вызывает автокоррекцию после \beta .

        \ бета перед пробелом

        бета после пробела

В связи с этим я недавно написал статью о том, что вас может заинтересовать использование стилизованных дробей в программах Office посредством дополнений к стандартной коллекции AutoCorrect . Вот ссылка на это:

       Стилизованные дроби в Windows

Теперь мне нужно приступить к написанию процедуры разворота, чтобы можно было удалить записи. Поскольку существует некоторое дублирование между двумя коллекциями, я не уверен, как обрабатывать подтверждение, поскольку в коллекции по умолчанию OMathAutoCorrect имеется 496 записей.

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