Автоматическое преобразование/исправление/приведение к единому виду/прощелкивание формул Equation 3.0.
Это не очень изящное решение, но я пользуюсь макросом TransformSelectedEquations, который приведен ниже. Надо выделить фрагмент текста и выполнить макрос. Все формулы Equation 3.0, которые оказались в выделении будут "прощелканы" и их размеры исправлены. Перед выполнением макроса надо (!) один раз прощелкать любую формулу, иначе стили могут быть выставлены неверными.
Насчет макроса, поскольку вам не нужно менять стили формул, то надо закоментировать пять строк после Do Until. После этого в цикле останется только две строки установки размеров. Думаю, сработает, но проверять было лень.
Примечание - Недостаток макроса в том, что он работает через поиск и замену. Думаю можно сделать умнее, использовать конструкции типа таких:
With ActiveDocument
For i = .Fields.Count To 1 Step -1
With .Fields(i)
If .Type = wdFieldRef Then
If varColor <> wdNoHighlight Then
ActiveDocument.Fields(i).Select
Selection.Range.HighlightColorIndex = varColor ' выделяем цветом
End If
.Unlink
End If
End With
Next
End With
но я не заморачивался, потому что меня и так устраивает.
Вот макрос:
Sub TransformSelectedEquations()
' преобразовать выделенные формулы
' "Прощелкать" формулы, которые попали в выделение
'''''''' Начало первого блока прокрутки
Dim lngVerticalScroll
Dim k As Long, nk As Long
k = 0 'счетчик
nk = 0 'число кликов, которое потребовалось, чтобы изменить прокрутку на 1%
lngVerticalScroll = ActiveWindow.VerticalPercentScrolled 'исходная прокрутка документа в процентах
If lngVerticalScroll < 100 Then
'если документ прокручен менее чем на 100%
Do
ActiveWindow.ActivePane.SmallScroll Down:=1 'прокручиваем вниз на один клик по кнопке на полосе прокрутки
k = k + 1
If ActiveWindow.VerticalPercentScrolled > lngVerticalScroll Or k >= 9999 Then
'если процент прокрутки увеличился, либо было 9999 кликов (это защита от зацикливания) _
Думаю, значения 9999 хватит для документа на несколько тысяч страниц.
nk = k
Exit Do
End If
Loop
ElseIf lngVerticalScroll = 100 Then
'если документа прокручен на 100%
Do
ActiveWindow.ActivePane.SmallScroll Down:=-1 'прокручиваем ВВЕРХ на один клик по кнопке на полосе прокрутки
k = k + 1
If ActiveWindow.VerticalPercentScrolled < lngVerticalScroll Or k >= 9999 Then
'если процент прокрутки УМЕНЬШИЛСЯ
'проверка на k >= 9999 тут наверно лишняя, но, на всякий случай, пусть будет
nk = k
Exit Do
End If
Loop
End If
'''''''' Конец первого блока прокрутки
Dim myRange As Range
Dim a, b
a = Selection.Range.Start ' левая граница выделения
b = Selection.Range.End ' правая граница выделения
Set myRange = ActiveDocument.Range(Start:=a, End:=b) 'сохраняем положение выделения
ActiveWindow.View.ShowFieldCodes = True ' включение отображения кодов полей
Selection.Find.ClearFormatting
With Selection.Find 'настройка опций поиска
.text = "^d EMBED Equation.3" '^d - означает поле
.Replacement.text = ""
.Forward = True
.Wrap = wdFindStop ' останавливаем поиск в конце
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Do Until Selection.Find.Execute = False Or Selection.Range.End >= b
If Selection.Type = wdSelectionShape Then
Selection.ShapeRange(1).ConvertToInlineShape.Select
End If
Selection.InlineShapes(1).OLEFormat.ConvertTo ClassType:="Equation.3", _
DisplayAsIcon:=False
'принудительно делаем ширину и высоту 100%, на всякий случай.
Selection.InlineShapes(1).ScaleWidth = 100
Selection.InlineShapes(1).ScaleHeight = 100
Loop
ActiveWindow.View.ShowFieldCodes = False ' выключение отображения кодов полей
Call ClearFindDialog ' очистить поиск ДОБАВИЛ ЭТО НЕДАВНО
myRange.Select ' выделяем исходное выделение
'''''''' Начало ВТОРОГО блока прокрутки
'Восстанавливаем исходную прокрутку документа. _
Два раза потому, что с первого раза не всегда срабатывает почему-то. _
Кроме того исходная прокрутка восстанавливается с большой погрешностью, поскольку значение округляется до целых.
ActiveWindow.VerticalPercentScrolled = lngVerticalScroll
ActiveWindow.VerticalPercentScrolled = lngVerticalScroll
k = 0 'инициализация счетчика
If lngVerticalScroll < 100 And nk < 9999 Then
'если исходная прокрутка была менее 100% и в первом блоке прокрутки удалось увеличить процент прокрутки
Do
'прокручиваем вниз по клику до тех пор пока не увеличим прокрутку на 1% (число кликов может отличаться от nk)
ActiveWindow.ActivePane.SmallScroll Down:=1 'прокручиваем вниз на один клик по кнопке на полосе прокрутки
k = k + 1
If ActiveWindow.VerticalPercentScrolled > lngVerticalScroll Then 'Or k >= 9999 Then
'когда процент прокрутки увеличится, прокручиваем назад на ранее запомненное число nk, _
чтобы вернуться в к исходной прокрутке с высокой точнотью. _
Условие Or k>=9999 тут лишнее, поскольку оно фактически есть выше (And nk < 9999).
ActiveWindow.ActivePane.SmallScroll Down:=-nk 'прокручиваем назад ВВЕРХ
Exit Do
End If
Loop
ElseIf lngVerticalScroll = 100 And nk < 9999 Then
'если исходная прокрутка была 100% и в первом блоке прокрутки удалось УМЕНЬШИТЬ процент прокрутки
Do
ActiveWindow.ActivePane.SmallScroll Down:=-1 'прокручиваем ВВЕРХ на один клик по кнопке на полосе прокрутки
k = k + 1
If ActiveWindow.VerticalPercentScrolled < lngVerticalScroll Then
'когда процент прокрутки УМЕНЬШИТСЯ, прокручиваем назад на ранее запомненное число nk
ActiveWindow.ActivePane.SmallScroll Down:=nk 'прокручиваем назад ВНИЗ
Exit Do
End If
Loop
End If
'''''''' Конец ВТОРОГО блока прокрутки
' Selection.MoveLeft Unit:=wdCharacter, Count:=1 ' это действие лучше не делать
End Sub
Sub ClearFindDialog()
' Очистиль поиск
''' Selection.WholeStory
''' Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Find.ClearFormatting
With Selection.Find
.text = "" ' ищем ничего
.Replacement.text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End Sub
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir