Приступим.
1 Sub ВзятьВКавычки()
2 With Selection
3 If Right(.Text, 1) = Chr(32) Or _
4 Right(.Text, 1) = Chr(13) Then
5 .MoveLeft wdCharacter, 1, wdExtend
6 End If
7 If .Text <> "" Then
8 .InsertAfter "»"
9 .InsertBefore "«"
10 End If
11 End With
12 End Sub
2 With Selection
3 If Right(.Text, 1) = Chr(32) Or _
4 Right(.Text, 1) = Chr(13) Then
5 .MoveLeft wdCharacter, 1, wdExtend
6 End If
7 If .Text <> "" Then
8 .InsertAfter "»"
9 .InsertBefore "«"
10 End If
11 End With
12 End Sub
1 Sub СделатьРимскойЦифрой()
2 Dim a As String
3 With Selection
4 .MoveLeft Unit:=wdWord, Count:=1, Extend:=wdWord
5 a = Trim(.Text)
6 .Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
7 divserveFormatting:=False, Text:="= " + a + " \*ROMAN"
8 .MoveLeft Unit:=wdWord, Count:=1, Extend:=wdWord
9 a = Trim(.Text)
10 .TypeText a & " "
11 End With
12 End Sub
2 Dim a As String
3 With Selection
4 .MoveLeft Unit:=wdWord, Count:=1, Extend:=wdWord
5 a = Trim(.Text)
6 .Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
7 divserveFormatting:=False, Text:="= " + a + " \*ROMAN"
8 .MoveLeft Unit:=wdWord, Count:=1, Extend:=wdWord
9 a = Trim(.Text)
10 .TypeText a & " "
11 End With
12 End Sub
Усовершенствованный макрос находится здесь
1 Sub Формула_с_нумерацией()
2 With Selection.ParagraphFormat
3 .SpaceBeforeAuto = False
4 .SpaceAfterAuto = False
5 .FirstLineIndent = CentimetersToPoints(0)
6 End With
7 With Selection
8 .ParagraphFormat.TabStops.ClearAll
9 .ParagraphFormat.TabStops.Add Position:=(ActiveDocument.PageSetup.PageWidth - ActiveDocument.PageSetup.LeftMargin - ActiveDocument.PageSetup.RightMargin) / 2 _
10 , Alignment:=wdAlignTabCenter, Leader:=wdTabLeaderSpaces
11 .ParagraphFormat.TabStops.Add Position:=(ActiveDocument.PageSetup.PageWidth - ActiveDocument.PageSetup.LeftMargin - ActiveDocument.PageSetup.RightMargin) _
12 , Alignment:=wdAlignTabRight, Leader:=wdTabLeaderSpaces
13 .TypeText Text:=vbTab
14 .InsertStyleSeparator
15 .TypeBackspace
16 .TypeText Text:=vbTab & "("
17 .InsertCaption Label:="Формула", TitleAutoText:="InsertCaption1", _
18 Title:="", Position:=wdCaptionPositionAbove, ExcludeLabel:=1
19 .TypeText Text:=")"
20 .MoveLeft Unit:=wdWord, Count:=5
21 .InlineShapes.AddOLEObject ClassType:="Equation.3", LinkToFile:= _
22 False, DisplayAsIcon:=False
23 End With
24 End Sub
2 With Selection.ParagraphFormat
3 .SpaceBeforeAuto = False
4 .SpaceAfterAuto = False
5 .FirstLineIndent = CentimetersToPoints(0)
6 End With
7 With Selection
8 .ParagraphFormat.TabStops.ClearAll
9 .ParagraphFormat.TabStops.Add Position:=(ActiveDocument.PageSetup.PageWidth - ActiveDocument.PageSetup.LeftMargin - ActiveDocument.PageSetup.RightMargin) / 2 _
10 , Alignment:=wdAlignTabCenter, Leader:=wdTabLeaderSpaces
11 .ParagraphFormat.TabStops.Add Position:=(ActiveDocument.PageSetup.PageWidth - ActiveDocument.PageSetup.LeftMargin - ActiveDocument.PageSetup.RightMargin) _
12 , Alignment:=wdAlignTabRight, Leader:=wdTabLeaderSpaces
13 .TypeText Text:=vbTab
14 .InsertStyleSeparator
15 .TypeBackspace
16 .TypeText Text:=vbTab & "("
17 .InsertCaption Label:="Формула", TitleAutoText:="InsertCaption1", _
18 Title:="", Position:=wdCaptionPositionAbove, ExcludeLabel:=1
19 .TypeText Text:=")"
20 .MoveLeft Unit:=wdWord, Count:=5
21 .InlineShapes.AddOLEObject ClassType:="Equation.3", LinkToFile:= _
22 False, DisplayAsIcon:=False
23 End With
24 End Sub
If Right(.Text, 1) = Chr(32) Or _
ОтветитьУдалитьRight(.Text, 1) = Chr(13) Then
1. Такая запись ухудшает самодокументацию кода, и требует лишнего вызова Chr. Chr(13)=vbCr; Chr(32)=" " (что я лично люблю больше чем константу делать) или Const cSpace as string = " " .
2. Если длинную инструкцию разбиваешь на несколько строк, то лучше начинать перенесённое с оператора или разделителя.
Итого:
If Right(.Text, 1) = " " _
Or Right(.Text, 1) = vbCr Then
3. От Selection отцепляйся всегда, как можно скорее! В случае ошибки или появления модального окна или активации другого документа (мышкой клик прошёл), selection может слететь, а это с ~50% вероятностью приведёт к зависанию всего Word'а.
4. Использование {selection или что-то аналогичное}.MoveXXX плохой стиль, т.к. меняет положение каретки. Или возвращай каретку наместо или по другому делай.