Как я могу получить Excel 2013, чтобы автоматически исправить математику? Например, измените \int на ∫. Я знаю, как сделать это для одного символа, но есть ли способ заставить Excel распознавать все математические автокоррекции?
1 ответ
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
. Вот ссылка на это:
Теперь мне нужно приступить к написанию процедуры разворота, чтобы можно было удалить записи. Поскольку существует некоторое дублирование между двумя коллекциями, я не уверен, как обрабатывать подтверждение, поскольку в коллекции по умолчанию OMathAutoCorrect
имеется 496 записей.