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

这篇文章主要是作为李老师《算法设计与分析》助教课程中,与她交流,学到的一些基础知识。它主要是讲述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:=wdLine
End Sub
Sub MoveToCurrentLineEnd()
  ' 移动光标至当前行尾
  ' Selection.EndKey wdLine
  Selection.EndKey unit:=wdLine
End Sub
Sub SelectToCurrentLineStart()
  ' 选择从光标至当前行首的内容
  ' Selection.HomeKey wdLine, wdExtend
  Selection.HomeKey unit:=wdLine, Extend:=wdExtend
End Sub
Sub SelectToCurrentLineEnd()
  ' 选择从光标至当前行尾的内容
  ' Selection.EndKey wdLine, wdExtend
  Selection.EndKey unit:=wdLine, Extend:=wdExtend
End Sub
Sub SelectCurrentLine()
  ' 选择当前行
  ' Selection.HomeKey wdLine
  ' Selection.EndKey wdLine, wdExtend
  Selection.HomeKey unit:=wdLine
  Selection.EndKey unit:=wdLine, Extend:=wdExtend
End Sub
Sub MoveToDocStart()
  ' 移动光标至文档开始
  ' Selection.HomeKey wdStory
  Selection.HomeKey unit:=wdStory
End Sub
Sub MoveToDocEnd()
  ' 移动光标至文档结尾
  ' Selection.EndKey wdStory
  Selection.EndKey unit:=wdStory
End Sub
Sub SelectToDocStart()
  ' 选择从光标至文档开始的内容
  ' Selection.HomeKey wdStory, wdExtend
  Selection.HomeKey unit:=wdStory, Extend:=wdExtend
End Sub
Sub SelectToDocEnd()
  ' 选择从光标至文档结尾的内容
  ' Selection.EndKey wdStory, wdExtend
  Selection.EndKey unit:=wdStory, Extend:=wdExtend
End Sub
Sub SelectDocAll()
  ' 选择文档全部内容(从WholeStory可猜出Story应是当前文档的意思)
  Selection.WholeStory
End Sub
Sub MoveToCurrentParagraphStart()
  ' 移动光标至当前段落的开始
  ' Selection.MoveUp wdParagraph
  Selection.MoveUp unit:=wdParagraph
End Sub
Sub MoveToCurrentParagraphEnd()
  ' 移动光标至当前段落的结尾
  ' Selection.MoveDown wdParagraph
  Selection.MoveDown unit:=wdParagraph
End Sub
Sub SelectToCurrentParagraphStart()
  ' 选择从光标至当前段落开始的内容
  ' Selection.MoveUp wdParagraph, wdExtend
  Selection.MoveUp unit:=wdParagraph, Extend:=wdExtend
End Sub
Sub SelectToCurrentParagraphEnd()
  ' 选择从光标至当前段落结尾的内容
  ' Selection.MoveDown wdParagraph, wdExtend
  Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
End Sub
Sub SelectCurrentParagraph()
  ' 选择光标所在段落的内容
  ' Selection.MoveUp wdParagraph
  ' Selection.MoveDown wdParagraph, wdExtend
  Selection.MoveUp unit:=wdParagraph
  Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
End Sub
Sub DisplaySelectionStartAndEnd()
  '显示选择区的开始与结束的位置,注意:文档第1个字符的位置是0
  MsgBox ("第" & Selection.Start & "个字符至第" & Selection.End & "个字符")
End Sub
Sub DeleteCurrentLine()
  ' 删除当前行
  ' Selection.HomeKey wdLine
  ' Selection.EndKey wdLine, wdExtend
  Selection.HomeKey unit:=wdLine
  Selection.EndKey unit:=wdLine, Extend:=wdExtend
  Selection.Delete
End Sub
Sub DeleteCurrentParagraph()
  ' 删除当前段落
  ' Selection.MoveUp wdParagraph
  ' Selection.MoveDown wdParagraph, wdExtend
  Selection.MoveUp unit:=wdParagraph
  Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
  Selection.Delete
End Sub


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eastmount

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值