[黑科技] WPS通过VB宏函数实现自编号功能

来源:互联网 发布:3des算法的c语言实现 编辑:程序博客网 时间:2024/09/21 06:36

这篇文章主要是作为李老师《算法设计与分析》助教课程中,与她交流,学到的一些基础知识。它主要是讲述Word通过宏函数设置一些操作,比如在Word全文中替换一些符号;再如对Word上角表进行编号,如果删除中间某个值,运行宏函数自动编号;对Word中所有图片进行大小统一整合;文章竖着排版等操作。Word宏函数主要是基础VB编写的,希望这篇文章对你有所帮助~


一. WPS实现宏函数可用

Office中Word的宏函数直接可以使用,而WPS需要安装一个软件后才能使用。打开WPS Word如下图所示,宏是不能使用的。



这时需要下载VBA for WPS并安装才能使用。下载地址:
https://yun.baidu.com/share/link?shareid=2773182689&uk=892671164
下载安装如下图所示:


安装完后可以设置宏函数,如下图所示:


点击"宏",然后"创建"宏函数,如下图所示,取名为test。



创建后如下图所示,可以看到是VB代码进行编写的。

WPS需要保存为带宏函数的格式,如下图所示。


然后运行宏函数如下图所示,点击"运行"即可,如下图所示。


这里,如果想好好研究这个,可以看看VB一些基础书籍,程序就那回事。我简单看了《VB从入门到精通》后,开始写相应功能的。



二. 编写宏函数实现自编号

Visual Basic支持一个对象集合,该集合中的对象直接对应于Microsoft Word 97中的元素,并且通过用户界面,用户熟悉这些元素中的绝大多数。

例如,Document 对象代表了一个打开的文档,Bookmark对象代表了一个文档中的书签,而Selection对象则代表了在一个文档窗口窗格中的选定内容。在Word中,每一类元素-文档、表格、段落、书签、域等等-都可以用Visual Basic的对象来表示。要在Word中自动执行任务,可以使用这些对象的方法和属性。


下面简单讲解宏函数实现一些功能。

Sub test()'' test Macro'    Dim sLineNum3 As String     '行号(文字)    Dim nLineNum                '行号(数值)    Dim i As Long     Title = "输入编号信息"    a1 = "请输入总编号开始号:"    b1 = InputBox(a1, Title)     End Sub
运行宏函数如下图所示:


运行结果如下图所示,弹出界面输入:



下面是完整的代码,如下所示:

Sub test()'' test Macro'    '定义变量    Dim sLineNum3 As String     '行号(文字)    Dim nLineNum                '行号(数值)    Dim sLineNum As String      '行号(文字)    Dim sLineNum1 As String     '行号(文字)    Dim sLineNum2 As String     '行号(文字)    Dim selRge As Range    Dim i As Long    Dim x As Long    Dim y As Long    Dim k As Long      '输入行号对话框    Title = "输入编号信息"    a1 = "请输入总编号开始号:"    b1 = InputBox(a1, Title)    'Val函数将数字字符串换成数值    y = 200000 + Val(b1) - 1            i = 1    For k = 1 To 20        sLineNum1 = Str(i + y)            '200001        sLineNum1 = LTrim(sLineNum1)      '移除字符串最左边的空白字符        sLineNum1 = Right(sLineNum1, 5)   '生成行号格式"00001"                '行号前加"/"        'sLineNum = "/" & b2 & sLineNum        'sLineNum2 = sLineNum1 + sLineNum        sLineNum2 = sLineNum1                   '移动光标至当前行首 Selection.HomeKey wdLine        Selection.HomeKey Unit:=wdLine        '选择从光标至当前行首的内容 Selection.HomeKey wdLine, wdExtend        Selection.EndKey Unit:=wdLine, Extend:=wdExtend            sLineNum3 = Selection.Text        sLineNum3 = Left(sLineNum3, 3)    '从左边获取每行前3个字符        If sLineNum3 = "%%%" Then         '替换行号            Selection.Find.Execute FindText:="%%%", ReplaceWith:=sLineNum2            i = i + 1        End If        Selection.MoveDown Unit:=wdLine, Count:=1        Next k     End Sub
现在Word中内容如下所示:

然后运行"宏",运行如下所示:



运行结果如下图所示:


下面补充一些代码,常见的操作Word宏的 函数。
参考:http://wangye.org/blog/archives/135/
          http://blog.sina.com.cn/s/blog_5e646c1f0100u24w.html
 

Sub MoveToCurrentLineStart()  ' 移动光标至当前行首  ' Selection.HomeKey wdLine  Selection.HomeKey unit:=wdLineEnd SubSub MoveToCurrentLineEnd()  ' 移动光标至当前行尾  ' Selection.EndKey wdLine  Selection.EndKey unit:=wdLineEnd SubSub SelectToCurrentLineStart()  ' 选择从光标至当前行首的内容  ' Selection.HomeKey wdLine, wdExtend  Selection.HomeKey unit:=wdLine, Extend:=wdExtendEnd SubSub SelectToCurrentLineEnd()  ' 选择从光标至当前行尾的内容  ' Selection.EndKey wdLine, wdExtend  Selection.EndKey unit:=wdLine, Extend:=wdExtendEnd SubSub SelectCurrentLine()  ' 选择当前行  ' Selection.HomeKey wdLine  ' Selection.EndKey wdLine, wdExtend  Selection.HomeKey unit:=wdLine  Selection.EndKey unit:=wdLine, Extend:=wdExtendEnd SubSub MoveToDocStart()  ' 移动光标至文档开始  ' Selection.HomeKey wdStory  Selection.HomeKey unit:=wdStoryEnd SubSub MoveToDocEnd()  ' 移动光标至文档结尾  ' Selection.EndKey wdStory  Selection.EndKey unit:=wdStoryEnd SubSub SelectToDocStart()  ' 选择从光标至文档开始的内容  ' Selection.HomeKey wdStory, wdExtend  Selection.HomeKey unit:=wdStory, Extend:=wdExtendEnd SubSub SelectToDocEnd()  ' 选择从光标至文档结尾的内容  ' Selection.EndKey wdStory, wdExtend  Selection.EndKey unit:=wdStory, Extend:=wdExtendEnd SubSub SelectDocAll()  ' 选择文档全部内容(从WholeStory可猜出Story应是当前文档的意思)  Selection.WholeStoryEnd SubSub MoveToCurrentParagraphStart()  ' 移动光标至当前段落的开始  ' Selection.MoveUp wdParagraph  Selection.MoveUp unit:=wdParagraphEnd SubSub MoveToCurrentParagraphEnd()  ' 移动光标至当前段落的结尾  ' Selection.MoveDown wdParagraph  Selection.MoveDown unit:=wdParagraphEnd SubSub SelectToCurrentParagraphStart()  ' 选择从光标至当前段落开始的内容  ' Selection.MoveUp wdParagraph, wdExtend  Selection.MoveUp unit:=wdParagraph, Extend:=wdExtendEnd SubSub SelectToCurrentParagraphEnd()  ' 选择从光标至当前段落结尾的内容  ' Selection.MoveDown wdParagraph, wdExtend  Selection.MoveDown unit:=wdParagraph, Extend:=wdExtendEnd SubSub SelectCurrentParagraph()  ' 选择光标所在段落的内容  ' Selection.MoveUp wdParagraph  ' Selection.MoveDown wdParagraph, wdExtend  Selection.MoveUp unit:=wdParagraph  Selection.MoveDown unit:=wdParagraph, Extend:=wdExtendEnd SubSub DisplaySelectionStartAndEnd()  '显示选择区的开始与结束的位置,注意:文档第1个字符的位置是0  MsgBox ("第" & Selection.Start & "个字符至第" & Selection.End & "个字符")End SubSub DeleteCurrentLine()  ' 删除当前行  ' Selection.HomeKey wdLine  ' Selection.EndKey wdLine, wdExtend  Selection.HomeKey unit:=wdLine  Selection.EndKey unit:=wdLine, Extend:=wdExtend  Selection.DeleteEnd SubSub DeleteCurrentParagraph()  ' 删除当前段落  ' Selection.MoveUp wdParagraph  ' Selection.MoveDown wdParagraph, wdExtend  Selection.MoveUp unit:=wdParagraph  Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend  Selection.DeleteEnd Sub


        最后希望文章对你有所帮助,如果文章中存在错误或不足之处,还请海涵~后面肯恩会补充一些实用的功能,娜美人生,精彩人生。
      (By:Eastmount 2017-03-15 中午1点   http://blog.csdn.net/eastmount/ 


0 0
原创粉丝点击