+ -
当前位置:首页 → 问答吧 → 求教版里达人老师:如何用VBA将文档中的文本框中的部分文字“格式化”

求教版里达人老师:如何用VBA将文档中的文本框中的部分文字“格式化”

时间:2011-02-26

来源:互联网

请教:
  对当前Word文档中的所有文本框中的每行文字进行如下格式化:每行中第一个空格字符前、起行大写字母串后的字符部分进行红色、加粗显示(可能有的行没有这样的字符)该如何用VBA批量操作?

说明:
  “起行大写字母串后的”是指行首是大写字母或连续的大写字母的,则从它后面的第一个字符开始,到这个行内第一次出现空格的位置,这两者之间的字符(附件中的文档在这个位置不小心多打了“副本”两字)进行红色显示。

注意:
  有的文本框跟其它对象进行了组合操作,还有的是竖排文本框

本问题的关键:
  1.VBA格式化文本框中部分字符;
  2.若用正则表达式,好像VB不支持零宽后行断言。那这里的字符匹配问题能否有其它的变通方法;
  3.文本框与其他对象组合后使问题变得更加不好处理了。有人提议先用VBA解除组合,可惜我不会弄。另外解除组合后还能用VBA来还原组合吗。

  详情见附件及图片。
  另外说明一下,这个问题我已经发了个Excel版的,因为没有得到解答,所有特转成Word版发到本版块,看能否请守柔、konggs、c81等高人解决解决。在这里先谢谢大家啦!











[ 本帖最后由 cg372101 于 2011-2-26 19:44 编辑 ]

附件

Help.gif(45.06 KB)

2011-2-26 19:28

Help.rar(15.3 KB)

2011-2-26 19:28, 下载次数: 2

作者: cg372101   发布时间: 2011-02-26

可试试如下代码:
复制内容到剪贴板
代码:
Sub test()
    Dim S As Shape, SS As Shape
    Application.ScreenUpdating = False
    For Each S In ActiveDocument.Shapes
        If S.Type = msoTextBox Then
            aa S.TextFrame.TextRange
        ElseIf S.Type = msoGroup Then
            For Each SS In S.GroupItems
                If SS.Type = msoTextBox Then aa SS.TextFrame.TextRange
            Next
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Sub aa(myRange As Range)
    Dim aPar As Paragraph, a As String, i As Integer
    For Each aPar In myRange.Paragraphs
        With aPar.Range.Find
            .Text = "[A-Z][!^32]@^32"
            .MatchWildcards = True
            If .Execute Then
                With .Parent
                    a = .Text
                    .Expand wdParagraph
                    If .Text Like a & "*" Then
                        For i = 1 To Len(a)
                            If Mid(a, i, 1) Like "[!A-Z]" Then
                                .SetRange .Start + i - 1, .Start + Len(a) - 1
                                .Font.Color = wdColorRed
                                .Font.Bold = True
                                Exit For
                            End If
                        Next
                    End If
                End With
            End If
        End With
    Next
End Sub

作者: sylun   发布时间: 2011-02-26