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