分享

一个小技巧,认识Word中的VBA

 爱幻想的笨熊 2018-04-08

小伙伴们好啊,今天有请帅哥协会主任赵中山同学,和大家一起学习一下Word中的VBA应用。


Word是一个很强大的东西,从字符录入到文档排版,无所不能,甚至可以在word中嵌入Excel表格等程序功能。

但是现在已经有的word功能似乎有点满足不了我们的特别需求。

比如:在word文档中输入一个中文日期,而且是今天的日期,如:二○一八年三月九日,输入这个日期你至少要输入N多个字符来完成。

而word文档并没有一个直接获取中文日期的功能(我说的是直接),当然你也可以通过【插入】选项卡→【文本】组下→【日期和时间】来获取中文日期,但我不告诉你的话,你也许还不知道这一功能。但是对于我来说还是不够方便。

再比如:在word文档中可能要经常用到“Excel之家ExcelHome”,则每次输入太过繁琐,或许你会通过复制和粘贴来搞定,不过对于我来说,这也有点繁琐了。

现在你可以用Word vba来完成上述两个功能(只是举个例子,你可以编写vba来完成更多的功能)。

程序代码功能:捕获用户输入,根据用户的输入返回其他的关联的信息,如输入职工编号,直接跳出该职工的身份信息等。


优点:制作成word宏模版,可以在该电脑上任何一个word中快速录入。

缺点:需要根据实际环境建立规则。

 先打开Word中的VBE编辑器:

然后输入本示例中所用的代码:

OptionExplicit

 PrivateWithEvents WdApp As Word.Application

'以上声明为 Word对象 必须加关键字 WithEvents 这是前提1

'事件代码必须在ThisDocument中,这是前提2

PrivateSub Document_Open()

SetWdApp = Word.Application '文档打开时 WdApp取得整个Word对象

EndSub

 '以下是Wrod文档选择区域改变事件 只有在声明时加了 WithEvents才有

PrivateSub WdApp_WindowSelectionChange(ByVal Sel As Selection) 

    '以下是规则第一关 选择内容为空 并且 光标之后是空格才成立

    If Sel <> '' AndVBA.Asc(Sel) <> 32 Then Exit Sub

       '以下选择对象是图形时 退出过程

    If Sel.Type = wdSelectionShape Then ExitSub

   DimStr1 As String   

    Sel.MoveLeft 1, 3, 1 '1是按字符移动,3是移动次数,1是扩选

    Str1 = Sel.Text '用Str1接收选择的字符

    Sel.Collapse 0 '取消选择,并把光标停留在选择内容的尾部

   DimRe As Object

DimK As Integer 

DimisYes1 As Boolean

DimisYes2 As Boolean 

    Set Re =CreateObject('VBScript.regexp') '正则表达式后期绑定

        Re.Global = True '查找全部       

        '建立正则表达式,并验证输入的字符,返回布尔值

        Re.Pattern = '日期#'

        isYes1 = Re.Test(Str1)       

        '建立正则表达式,并验证输入的字符,返回布尔值

        Re.Pattern = '之家#'

        isYes2 = Re.Test(Str1)           

        '两个表达式验证不通过,则说明不是我们要的关键字就退出程序

        If isYes1 = False And isYes2 = FalseThen Exit Sub       

        '以下通过for循环删除字符,删除的长度就是Str1接收Sel内容

        For K = 1 To VBA.Len(Str1)

            Sel.TypeBackspace '退格键

        Next       

DimExcel As Object

DimDateCn As String

DimDayDate As String

        If isYes1 = True Then '当日期规则成立时           

            '创建Excel对象

            Set Excel =CreateObject('Excel.Application')           

                '获得当前计算机日期;通过Excel的Text函数格式化成中文日期

                DayDate = VBA.Now

                DateCn =Excel.WorksheetFunction.Text(DayDate, '[DBNum1][$-804]yyyy''年''m''月''d''日'';@')

                Sel.TypeText DateCn 'word文档光标处插入格式化后的中文日期DateCn                    ElseIf isYes2 = True Then '之家规则成立

            '插入文本

            Sel.TypeText 'Excel之家ExcelHome'

        End If

EndSub


'以上代码是通过word的选择区域发生改变时的事件,

'先验证选择的内容的类型

'再判断光标后的字符的ASCII值来达到触发验证规则

'之后捕获光标左侧指定长度字符的内容,再正则表达式验证

'当捕获的内容不是验证的关键字后就退出

'如果是,再删除正则表达式长度的内容,便于之后的插入

 '通过判断跳到规则成立的条件

'输入你代码确定要输入的内容。。。


 '【注1: 此代码需要写在ThisDocument中】

'【注2: word的选择区域改变事件需要建立较多规则,不然肯定会影响word的正常录入】

'【注3:你可以通过正则表达式建立更多规则,识别更多关键字】

'【注4:你也可以结合数据库使用,提高Wrod文档的工作效率应该不在话下】

'【注5:word文档须打开或启用宏】


有同学可能会说了,我的某某输入法也可以自定义词语,也可以快速输入日期啊,嗯嗯这个不错,咱们今天的内容只是想通过一个简单的应用,让大家对Word中的VBA有个了解和认识,让大家知道,VBA不仅仅是Excel的专利,在Word中也能帮我们自动完成很多繁杂的工作。


好了,今天的内容就是这些吧,我是帅哥,我是赵中山,祝各位一天好心情!



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多