网站首页 工具软件 操作系统 办公软件 网页制作 PHP教程 script脚本专栏 photoshop教程 其他精品教程
我发布的文章 - 教程搜索 - 交流论坛 - 帮助中心 - 网站首页 网络工具 - 常用工具 - 媒体工具 - 系统工具 - 实用工具 NT/2003 - Win Xp - Win2000 - DOS/Win9x - IE/注册表 - Linux - 苹 果 Office - Word - Excel - PowerPoint - 输入法 - 邮件处理 Flash - Dreamweaver - Fireworks - FrontPage - HTMLCSS 基础文章 - PHP函数 - PHP技巧 - 数据库相关 - 高级应用 - PHP安装 - 转载精华 - 常见问题 综 合 类 - 状 态 栏 - 游 戏 类 - 页面背景 - 页面特效 - 页面导航 - 文本操作 - 文本特效 - 图形特效 - 鼠标特效 - 时间日期 - 密 码 类 文字特效 - 按钮与图标 - 色彩运用 - 滤镜魔法 - 综合实例 XML教程 - DELPHI基础教程 - VB教程
首页 -> 其他精品教程 -> VB教程

TOP

用VBA突破WORD查找替换功能 (2)
文章内容
相关信息
用户评论
文章内容


窗体和程序设计


单击WORD的"工具"*"宏"*"Visual Basic 编辑器",启动Visual Basic 编辑器。单击其菜单栏上的命令"插入"*"添加用户窗体",添加一个空白用户窗体,在窗体上添加多页(MultiPage)、组合框(Frame)、下拉列表框(ComoBox)、选择框(CheckBox)、标签(Label)、文本编辑(TextBox)和命令按钮(CommandButton)控件,修改它们的默认属性至相应的值,作成一个象图1和图2所示的对话窗口。



图1 查找并按规则替换数字的对话窗口(1)




图2 查找并按规则替换数字的对话窗口(2)


由于窗口控件较多,限于篇幅,这里不赘述,读者可以从下载的模板文件中看到具体的细节。窗体设计好后,在代码编辑框中输入下面的源程序代码。为了用户的使用方便,在窗体的初始化例程(UserForm_Initialize())中预置了几个常用的数字格式,有:"^#.^#","^#","^#^#","^#^#^#","0.^#","-^#.^#","-^#"。

源程序代码:

Dim DocName
Dim Multiple, ConstCoef, Precise
Dim iCount
Dim FindUnitStr, RepUnitStr
Private Sub btnCancel_Click()
   frmReplaceNumber.Hide
End Sub

Private Sub btnOK_Click()
    On Error Resume Next
    If tbA.Text = "" Then
        MsgBox ("You have to enter at least a number for the slope!")
    Else
        If Selection.Type = wdSelectionIP Then
            ReplaceNumber
        Else
            NewDoc
            ReplaceNumber
            ReplaceDoc
        End If
    End If
    frmReplaceNumber.Hide
End Sub
Private Sub NewDoc()
    DocName = ActiveDocument.Name
    Selection.Copy
    Documents.Add DocumentType:=wdNewBlankDocument
    Selection.WholeStory
    Selection.Paste
    Selection.HomeKey Unit:=wdStory
End Sub
Private Sub ReplaceDoc()
    Selection.WholeStory
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Copy
    ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
    Windows(DocName).Activate
    Selection.Paste
End Sub
Private Function isASpecificChar(AChar, SpecificChar)
    isASpecificChar = (Asc(AChar) = Asc(SpecificChar))
End Function
Private Function isADigit(Ch)
    isADigit = (Asc(Ch) >= Asc("0") And Asc(Ch) <= Asc("9"))
End Function
Private Sub ExtendingSelection2()
    iCount = 0
    isDigit = False
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Do
        isSpace = False
        If Selection.MoveLeft = 1 Then
            TempChar = Left(Selection.Text, 1)
            isSpace = isASpecificChar(TempChar, Chr(32))
            If isSpace Then
                FindUnitStr = TempChar + FindUnitStr
                RepUnitStr = TempChar + RepUnitStr
            Else
                isDigit = isADigit(TempChar)
                Selection.MoveRight Unit:=wdCharacter, Count:=1
            End If
        End If
    Loop While isSpace
    While isDigit
        isDigit = False
        If Selection.MoveLeft = 1 Then
            TempChar = Left(Selection.Text, 1)
            isDigit = (isASpecificChar(TempChar, ".") Or isADigit(TempChar))
            If isDigit Then
                iCount = iCount + 1
            Else
                Selection.MoveRight Unit:=wdCharacter, Count:=1
            End If
        End If
    Wend
    Selection.MoveRight Unit:=wdCharacter, Count:=iCount, Extend:=wdExtend
End Sub
Private Sub ExtendingSelection1()
    iCount = Len(Selection.Text)
    Do
        isDigit = False
        If Selection.MoveRight = 1 Then
            TempChar = Left(Selection.Text, 1)
            isDigit = isASpecificChar(TempChar, ".") Or isADigit(TempChar)
            If isDigit Then iCount = iCount + 1
        End If
    Loop While isDigit
    Selection.MoveLeft Unit:=wdCharacter, Count:=iCount
    If InStr(FindStr, "-") <> 1 Then ' if it is not a negative number, do the loop
        Do
            isDigit = False
            If Selection.MoveLeft = 1 Then
                TempChar = Left(Selection.Text, 1)
                isDigit = isASpecificChar(TempChar, ".") Or isADigit(TempChar)
                If isDigit Then
                    iCount = iCount + 1
                Else
                    Selection.MoveRight Unit:=wdCharacter, Count:=1
                End If
            End If
        Loop While isDigit
    End If
    Selection.MoveRight Unit:=wdCharacter, Count:=iCount, Extend:=wdExtend
End Sub
Private Sub CalculateFormula()
    Dim TempDocName
    FormatStr = "#.00000000000000x"
    TempDocName = ActiveDocument.Name
    Documents.Add DocumentType:=wdNewBlankDocument
    Selection.WholeStory
    Selection.InsertFormula Formula:="=" & tbA.Text, NumberFormat:=FormatStr
    Selection.WholeStory
    Multiple = CDbl(Selection.Text)
    If tbB.Text <> "" Then
        Selection.InsertFormula Formula:="=" & tbB.Text, NumberFormat:=FormatStr
        Selection.WholeStory
        ConstCoef = CDbl(Selection.Text)
    End If
    If tbPrecise <> "" Then
        Selection.InsertFormula Formula:="=" & tbPrecise.Text, 
NumberFormat:=FormatStr
        Selection.WholeStory
        Precise = CDbl(Selection.Text)
    Else
        Precise = 2
    End If
    ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
    Windows(TempDocName).Activate
End Sub
Private Sub CalculateNReplace()
    d = CDbl(Selection.Text)
    If (d <> 0) Then
        Value = d * Multiple + ConstCoef
        TempStr = CStr(Round(Value, Precise))
        If InStr(TempStr, ".") <> 0 Then
            While (Asc(Left(Right(TempStr, Precise + 1), 1)) <> Asc("."))
                TempStr = TempStr + "0"
            Wend
        ElseIf Precise > 0 Then
            TempStr = TempStr + "."
            For i = 1 To Precise
                TempStr = TempStr + "0"
            Next
        End If
        If MultiPage1.Value = 1 Then
            TempStr = TempStr + RepUnitStr
            Selection.MoveRight Unit:=wdCharacter, Count:=Len(FindUnitStr), 
Extend:=wdExtend
        End If
        Selection.Text = TempStr
    End If
End Sub
Private Sub ReplaceNumber()
    On Error Resume Next
    CalculateFormula
    FindStr = ""
    RepStr = ""
    Select Case MultiPage1.Value
    Case 0:
        FindStr = cobFindStr.Text
        RepStr = ""
    Case 1:
        FindStr = tbFindUnit.Text
        RepStr = tbRepUnit.Text
    End Select
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = FindStr
        .Replacement.Text = RepStr
        .Forward = True
        .Wrap = wdFindStop
    End With
    While Selection.Find.Execute
        Select Case MultiPage1.Value
        Case 0: ' by number
            If Not cbNoExtend.Value Then
                ExtendingSelection1
            End If
        Case 1: ' by unit
            FindUnitStr = FindStr
            RepUnitStr = RepStr
            ExtendingSelection2
        End Select
        If iCount > 0 Then CalculateNReplace
        Selection.MoveRight Unit:=wdCharacter, Count:=1
    Wend
End Sub

Private Sub UserForm_Initialize()
   Load frmReplaceNumber
   cobFindStr.AddItem ("^#.^#")
   cobFindStr.AddItem ("^#")
   cobFindStr.AddItem ("^#^#")
   cobFindStr.AddItem ("^#^#^#")
   cobFindStr.AddItem ("0.^#")
   cobFindStr.AddItem ("-^#.^#")
   cobFindStr.AddItem ("-^#")
End Sub


使用方法


当完成了窗体设计并输入了正确的程序代码后,还需要设计一个启动窗体的代码。单击Visual Basic编辑器菜单栏上的"插入"*"添加模块"命令,在代码编辑窗口输入如下程序段:

Sub ReplaceNumber()
    frmReplaceNumber.Show
End Sub


完成上述步骤后,保存当前的工作,回到WORD,就可以使用该宏命令了。将插入点移到需要替换的数字前面或选中特定的文档区域,运行这个宏,弹出一个对话窗口(见图1-2)。

依照数字来查找并替换的步骤如下:

步骤1:在"依数字"页上的"查找"下拉列表框中选中一种通用数字格式,或者自己在编辑框中输入一个有效的通用数字格式串;

步骤2:如果你需要精确匹配数据格式,选中"不扩展选中的文本"选项;

步骤3:在"结果=A×当前值+B"部分,在A和B编辑框中输入一个有效的数字表达式,如果某项无值,将对应的编辑框置空即可。在小数位数编辑框中输入数字的有效精度(即小数的位数);

步骤4:单击确定按钮执行程序。

依照单位来查找并替换的步骤如下:

步骤1:单击"依单位"选项页,切换页面,在"查找"编辑框中输入需要查找的单位,在"替换为"编辑框中输入将要替换为的单位;

步骤2、3、4:与第一种方法相同,不赘述。

小结


由于窗体较为复杂和源程序较长,如果你要使用该工具,请从杂志的网站上下载一个完整的模板文件,将其复制到C:\Program Files\Microsoft Office\Office\Startup子目录下。当你重新启动WORD后,就可以看到工具栏区多了一个工具栏,上面有个按钮叫“查找并替换数字”。单击该按钮即可启动该宏。



相关信息
用VBA突破WORD查找替换功能 (2)
发布者:mmcbbs
浏览量:130
发布日期:2005-04-10 10:27:12
所属专题:
用户评论
称  呼:
内  容:

广告位

广告招租,欢迎抢订

热门信息

·什么是ODBC
·初识WTL(上)
·理解ActiveX控件的一些背景..
·VB.NET 的新特点:变..
·探讨VB.Net中的数据绑定
·用VB.NET打造NameSpace
·VB.NET中的面向对象编程特征
·用VB和MTS开发多层数据库应..

推荐信息