2016-09-20 1 views
-1

У меня есть задача найти числовое значение в текстовом документе и, альтернативно, надстрочный индекс и индексировать их.числовые слова в слове макрос

Я использовал это:

test = True 

Dim chr As Range 
For Each chr In ActiveDocument.Range.Characters 

If IsNumeric(chr.Text) And test = True Then chr.Font.Subscript = True 
test = False 
If IsNumeric(chr.Text) And test = False Then chr.Font.Superscript = True 
test = True 

Next chr 

Это только делает все числа Надстрочным, не чередуя супер и к югу от сценария

Примера текст - "[17] Сайед, MH, Мостаф , MZ, Abdel-Moneim, TM, Yousef, HA: на трехфазном этапе - Переключатель источника напряжения: режим проводки 150 °. Член IEEE, Александрия Университет (2006) "

сейчас в ТИС примере макрос должен сделать 17 надстрочный и подстрочный 150 и 2006 в качестве верхнего индекса ..

Пожалуйста, кто поможет мне с этим

ответ

1

Вы можете использовать Range.Characters для перебора символов. Что-то вроде

Dim chr As Range 
For Each chr In ActiveDocument.Range.Characters 
    If IsNumeric(chr.Text) Then chr.Font.SubScript = True 
Next chr 

Затем добавить некоторые булевы, которые говорят вам, если вы должны установить его на суб- или надстрочный

+0

'тест = True Dim CHR В диапазоне Для каждого CHR В ActiveDocument.Range.Characters Если IsNumeric (chr.Text) И test = True Затем chr.Font.Subscript = True И test = False Если IsNumeric (chr.Text) И t Эст = False Тогда chr.Font.Superscript = True и тест = True Следующая chr' Я попробовал этот путь ... но это не будет работать ,, пожалуйста, помощь по этому –

+0

'And' является логическим оператором, не что-то для подключения линий. Использование 'И', как это, приведет к тому, что VBA будет оценивать оба оператора как логические, а не устанавливать свойства. – arcadeprecinct

+0

Не могли бы вы построить для меня это, я пробовал, но это может быть для меня. –

0

если кому-то нужен ответ на этот вопрос .. вот что я сделал,

Selection.MoveUp Unit:=wdParagraph, Count:=2000 
    Dim vFindText As Variant 
    Dim vReplText As Variant 
    Dim i As Long 
    vFindText = Array("\[", "\] ", " \*") 
    vReplText = Array("", "", "") 
    With Selection 
    With .Find 
    .ClearFormatting 
    .Replacement.ClearFormatting 
    .Forward = True 
    .Wrap = wdFindStop 
    .MatchWholeWord = True 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
    .MatchWildcards = True 
    .Format = True 
    .MatchCase = True 
    For i = 0 To UBound(vFindText) 
     .Text = vFindText(i) 
     .Replacement.Text = vReplText(i) 
     .Execute Replace:=wdReplaceAll 
    Next i 
    .Text = "[0-9]{1,}" 
    .Replacement.Text = "^&" 
    .Replacement.Font.Superscript = True 
    .Execute Replace:=wdReplaceAll, MatchWildcards:=True 
End With 
End With 
MsgBox "Numbers has finshed , calling double1" 
Call Numbers1 

это будет бросать все цифры в индексе, то он вызывает Sub Numbers1

Sub Numbers1() 
Dim chr As Range 
Dim firstChar As Word.Range 
Dim test As Integer 
test = 0 
Dim firstAlphabet As Range 

Selection.SetRange Start:=0, End:=100000 

Set firstAlphabet = Selection.Range 
For i = 2 To 1600 
test = test + 2 
Set firstChar = Selection.Characters(test) 

If IsNumeric(firstChar.Text) Then firstChar.Font.Subscript = True 

On Error Resume Next 

Next i 

End Sub 

это будет поместите все числа поочередно в индекс и надстрочный индекс .... Код может быть оптимизирован, очевидно ,,, в настоящее время требуется слишком много времени, чтобы выполнить задание, но после поиска рабочего метода весь день, это единственное, что работает

надеюсь, что это поможет кто-то будет кто приходит найти это :)

Смежные вопросы