小伙伴们好啊,今天有请帅哥协会主任赵中山同学,和大家一起学习一下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中也能帮我们自动完成很多繁杂的工作。 好了,今天的内容就是这些吧,我是帅哥,我是赵中山,祝各位一天好心情!
|
|