2016-09-20 38 views
-1

我的任务是在word文档中查找数字,并选择上标和下标。单词宏中的数字

我用这个:

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] Saied如何,MH,穆斯塔法,MZ,Abdel-Moneim,TM,Yousef,HA:On Three Phase Six- 开关电压源逆变器:150°传导模式成员IEEE,Alexandria Univercity(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

'测试=真 昏暗CHR作为范围 对于每个CHR在ActiveDocument.Range.Characters 如果则IsNumeric(唯一chr.Text)和test = True然后chr.Font.Subscript = True并且test = False 如果IsNumeric(chr.Text)和t EST = false,那么chr.Font.Superscript = 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 

这将引发所有的数字变成标然后调用子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 

这将把所有的数字交替换成下标和上标...... 这段代码可以明显优化,,,目前执行给定工作需要很长时间,,,但是在整天搜索工作方法后,这是该工程

希望这将有助于将有人谈到谁找到这个:)